2017-03-10 5 views
0

Ich möchte meine Google App mit SAP verbinden, um Daten von SAP abzurufen.SAP Java Connector funktioniert nicht in Google App Engine

Ich versuchte mit SAP Java Connector in einfachen Java-Anwendung und es hat gut funktioniert.

Allerdings gibt es eine Ausnahme, wenn ich versuche, das gleiche zu tun in Google App.

Hier ist mein Code:

public static final void getConnection() { 
    Properties connectProperties = new Properties(); 
    connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, SAP_IP); 
    connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00"); 
    connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "350"); 
    connectProperties.setProperty(DestinationDataProvider.JCO_USER, SAP_USER_NAME); 
    connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, SAP_PASSWORD); 
    connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "en"); 

    try { 
     JCoDestination destination = JCoDestinationManager.getDestination(SAP_DESTINATION); 
     System.out.println("Attributes:"); 
     System.out.println(destination.getAttributes()); 
     System.out.println(); 
     destination.ping(); 
    } catch (JCoException e) { 
     e.printStackTrace(); 
    } 
} 

Hier SAP_DESTINATION, SAP_IP, SAP_USER_NAME und SAP_PASSWORD sind die String-Variablen mit entsprechenden Werten.

Hier ist die ausgelöste Ausnahme, wenn ich diese getConnection() -Methode aufrufen.

java.lang.ExceptionInInitializerError 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:191) 
at com.sap.conn.jco.rt.RuntimeEnvironment.getRuntimeImplementation(RuntimeEnvironment.java:475) 
at com.sap.conn.jco.rt.JCoRuntimeFactory.createRuntime(JCoRuntimeFactory.java:41) 
at com.sap.conn.jco.rt.JCoRuntimeFactory.<clinit>(JCoRuntimeFactory.java:22) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:191) 
at com.sap.conn.jco.JCo.createJCo(JCo.java:52) 
at com.sap.conn.jco.JCo.<clinit>(JCo.java:26) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:191) 
at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) 
at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65) 
at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:104) 
at com.gulbrandsen.sap.SAPConn.getConnection(SAPConn.java:24) 
at com.gulbrandsen.sap.GAESAPServlet.doGet(GAESAPServlet.java:9) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) 
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) 
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) 
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) 
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) 
at com.google.appengine.tools.development.StaticFileUtils.serveWelcomeFileAsForward(StaticFileUtils.java:82) 
at com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeWelcomeFile(LocalResourceFileServlet.java:253) 
at com.google.appengine.tools.development.LocalResourceFileServlet.doGet(LocalResourceFileServlet.java:120) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) 
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) 
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:512) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) 
at java.security.AccessController.checkPermission(AccessController.java:559) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429) 
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454) 
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) 
at java.lang.ThreadGroup.checkParentAccess(ThreadGroup.java:135) 
at java.lang.ThreadGroup.<init>(ThreadGroup.java:117) 
at java.lang.ThreadGroup.<init>(ThreadGroup.java:96) 
at com.sap.conn.jco.rt.JCoRuntime.<clinit>(JCoRuntime.java:125) 
... 74 more 

Das gleiche Code funktioniert mit einfachen Java-Anwendung fein (Ohne Google-SDK für Java)

Kann irgend jemand bestätigen dass das JCO-Jar mit Google App kompatibel ist oder nicht. Ist das ein Problem mit JCO oder Google SDK?

Oder Kann jemand mir empfehlen eine andere Art und Weise Google App mit SAP zu verbinden. (Statt JCO)

Antwort

0

Der SAP Java Connector bietet eine plattformunabhängige API für Java, aber selbst ist plattformabhängig. Es muss eine plattformabhängige native Bibliothek laden. Eine Liste der unterstützten JREs und Betriebssysteme finden Sie im SAP-Hinweis 1077727.

Der SAP Java Connector verwendet das RFC-Protokoll für die Kommunikation mit SAP-Systemen. Als Alternative können Sie stattdessen HTTP/HTTPS verwenden. Sehen Sie sich dazu das Internet Communication Framework (ICF) und den Internet Communication Manager (ICM) an. Vielleicht wird dieser Link als eine Einführung nützlich sein:

https://help.sap.com/saphelp_qim100/helpdata/EN/48/641ea1bdbc51eee10000000a421937/frameset.htm