我开发了一个与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();
}
问题的原因是什么?
答案 0 :(得分:1)
理想情况下,您应该将libsapjco3.so文件保留在Web应用程序之外。将其放在任何仲裁位置,并将该文件夹路径添加到LD_LIBRARY_PATH环境变量中。 sapjco.jar可以在你的类路径中。
如果tomcat无法使用环境变量加载.so文件,您可以尝试使用System.setProperty(&#34; java.library.path&#34;,&#34; folder_path_of_.so_file&#34;);
或者尝试通过编辑tomcat配置文件来提供此变量。
最后,确保folder_path_of_.so_file具有tomcat用户所需的权限。
这将解决您的问题。
...
答案 1 :(得分:0)
SAP服务器通常基于
进行配置 System ID
,Message Server
和可能的Group Server
以及Instance Number
。
实例化连接时,可能需要传递这些参数。可能是在localhost上,这些不是必需/可忽略的,但在生产时,它是必需的。
尝试使用SAP的工具连接到服务器,并尝试提供您原本提供的所有设置。
如果您发布了用于JCO的设置,也许我可以提供更多帮助。