6

我开发了一个与 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();
}

问题的原因是什么。

4

2 回答 2

0

SAP 服务器通常基于以下配置

System ID,Message Server和可能的 aGroup Server以及Instance Number.

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

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

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

于 2013-08-16T18:27:36.970 回答
0

理想情况下,您应该将 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 用户所需的权限。

这将解决您的问题。

……

于 2014-05-28T05:06:40.370 回答