Java-Programm zum Erstellen einer
Server-Verbindung
Im nächsten Schritt können Sie ein Java-Programm schreiben, dass eine Server-Verbindung zu einem SAP Gateway erstellt.
Um dies zu tun, müssen Sie:
1. Den JCoServerFunctionHandler sowie das Coding implementieren, dass ausgeführt wird wenn der Aufruf eingeht.
2. Eine Instanz für Ihre JCoServer Implementierung anlegen und mit start() starten.
Definition der Server Properties
import java.io.File; import java.io.FileOutputStream; import java.util.Hashtable; import java.util.Map; import java.util.Properties;
import com.sap.conn.jco.JCoException; import com.sap.conn.jco.JCoFunction; import com.sap.conn.jco.ext.DestinationDataProvider; import com.sap.conn.jco.ext.ServerDataProvider; import com.sap.conn.jco.server.DefaultServerHandlerFactory; import com.sap.conn.jco.server.JCoServer; import com.sap.conn.jco.server.JCoServerContext; import com.sap.conn.jco.server.JCoServerErrorListener; import com.sap.conn.jco.server.JCoServerExceptionListener; import com.sap.conn.jco.server.JCoServerFactory; import com.sap.conn.jco.server.JCoServerFunctionHandler; import com.sap.conn.jco.server.JCoServerState; import com.sap.conn.jco.server.JCoServerStateChangedListener; import com.sap.conn.jco.server.JCoServerTIDHandler;
public class StepByStepServer { static String SERVER_NAME1 = "SERVER"; static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL"; static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL"; static { Properties connectProperties = new Properties(); connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "ls4065"); connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "85"); connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "800"); connectProperties.setProperty(DestinationDataProvider.JCO_USER, "farber"); connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "laska"); connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "en"); createDataFile(DESTINATION_NAME1, "jcoDestination", connectProperties);
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); createDataFile(DESTINATION_NAME2, "jcoDestination", connectProperties);
Properties servertProperties = new Properties(); servertProperties.setProperty(ServerDataProvider.JCO_GWHOST, "binmain"); servertProperties.setProperty(ServerDataProvider.JCO_GWSERV, "sapgw53"); servertProperties.setProperty(ServerDataProvider.JCO_PROGID, "JCO_SERVER"); servertProperties.setProperty(ServerDataProvider.JCO_REP_DEST, "ABAP_AS_WITH_POOL"); servertProperties.setProperty(ServerDataProvider.JCO_CONNECTION_COUNT, "2"); createDataFile(SERVER_NAME1, "jcoServer", servertProperties); }
static void createDataFile(String name, String suffix, Properties properties) { File cfg = new File(name+"."+suffix); if(!cfg.exists()) { try { FileOutputStream fos = new FileOutputStream(cfg, false); properties.store(fos, "for tests only !"); fos.close(); } catch (Exception e) { throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e); } } }
|
JCo Server
static class StfcConnectionHandler implements JCoServerFunctionHandler { public void handleRequest(JCoServerContext serverCtx, JCoFunction function) { System.out.println("----------------------------------------------------------------"); System.out.println("call : " + function.getName()); System.out.println("ConnectionId : " + serverCtx.getConnectionID()); System.out.println("SessionId : " + serverCtx.getSessionID()); System.out.println("TID : " + serverCtx.getTID()); System.out.println("repository name : " + serverCtx.getRepository().getName()); System.out.println("is in transaction : " + serverCtx.isInTransaction()); System.out.println("is stateful : " + serverCtx.isStatefulSession()); System.out.println("----------------------------------------------------------------"); System.out.println("gwhost: " + serverCtx.getServer().getGatewayHost()); System.out.println("gwserv: " + serverCtx.getServer().getGatewayService()); System.out.println("progid: " + serverCtx.getServer().getProgramID()); System.out.println("----------------------------------------------------------------"); System.out.println("attributes : "); System.out.println(serverCtx.getConnectionAttributes().toString()); System.out.println("----------------------------------------------------------------"); System.out.println("req text: " + function.getImportParameterList().getString("REQUTEXT")); function.getExportParameterList().setValue("ECHOTEXT", function.getImportParameterList().getString("REQUTEXT")); function.getExportParameterList().setValue("RESPTEXT", "Hello World"); } } static void step1SimpleServer() { JCoServer server; try { server = JCoServerFactory.getServer(SERVER_NAME1); } catch(JCoException ex) { throw new RuntimeException("Unable to create the server " + SERVER_NAME1 + ", because of " + ex.getMessage(), ex); }
JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler(); DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory(); factory.registerHandler("STFC_CONNECTION", stfcConnectionHandler); server.setCallHandlerFactory(factory);
server.start(); System.out.println("The program can be stopped using <ctrl>+<c>"); }
|