SAP + Java:java.lang.NoClassDefFoundError:com.sap.conn.rfc.driver.CpicDriver

我开发了一个与SAP集成的Java Web应用程序。 我已经用Linux Server和Tomcat 7.0开发了它。 我在WEB-INF / lib文件夹中添加了sapjco3.jar和libsapjco3.so。 这是正常的本地服务器。 但是当在远程服务器上部署WAR文件时,会产生以下错误。

java.lang.NoClassDefFoundError: com.sap.conn.rfc.driver.CpicDriver at com.sap.conn.rfc.engine.DefaultRfcRuntime.createChannel(DefaultRfcRuntime.java:52) at com.sap.conn.rfc.engine.RfcIoOpenCntl.open_channel(RfcIoOpenCntl.java:1260) at com.sap.conn.rfc.engine.RfcIoControl.ab_rfcopen(RfcIoControl.java:85) at com.sap.conn.rfc.api.RfcApi.RfcOpen(RfcApi.java:83) at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcClient.connect(MiddlewareJavaRfc.java:1107) at com.sap.conn.jco.rt.ClientConnection.connect(ClientConnection.java:659) at com.sap.conn.jco.rt.PoolingFactory.init(PoolingFactory.java:103) at com.sap.conn.jco.rt.ConnectionManager.createFactory(ConnectionManager.java:171) at com.sap.conn.jco.rt.DefaultConnectionManager.createFactory(DefaultConnectionManager.java:44) at com.sap.conn.jco.rt.ConnectionManager.getFactory(ConnectionManager.java:160) at com.sap.conn.jco.rt.RfcDestination.initialize(RfcDestination.java:754) at com.sap.conn.jco.rt.RfcDestination.ping(RfcDestination.java:964) at com.my.ciry.sap.Connection.<init>(Connection.java:63) 

从Tomcat服务器ping目的地时出现错误。

 private JCoDestination dest; public Connection(SapSystem system) { dest = JCoDestinationManager.getDestination(SAP_SERVER); dest.ping(); } 

什么是问题的原因。

理想情况下,您应该将libsapjco3.so文件保存在Web应用程序之外。 将其放在任何任意位置,并将该文件夹路径添加到LD_LIBRARY_PATH环境变量。 sapjco.jar可以在你的类路径中。

如果tomcat无法使用环境变量加载.so文件,则可以尝试使用System.setProperty(“java.library.path”,“folder_path_of_.so_file”);

或者尝试通过编辑tomcat配置文件来提供这个变量。

最后,确保folder_path_of_.so_file对于tomcat用户具有所需的权限。

这将解决您的问题。

……

SAP服务器通常基于

System IDMessage server和可能的Group server以及Instance Number

实例化连接时可能需要传递这些参数。 这可能是在本地主机上,这些是不需要/可以忽略的,但在生产上,这是必需的。

尝试使用SAP的工具连接到服务器,并尝试提供您将提供的所有设置。

如果您发布了您为JCO使用的设置,或许我可以提供更多帮助。