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

3.6k views Asked by At

I have developed a java web application integrating with SAP. I have developed it with Linux Server and Tomcat 7.0. I have added sapjco3.jar and libsapjco3.so in WEB-INF/lib folder. It is working fine local server. But when deploying WAR file in remote server the following error is generating.

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)

The error is arising when ping the destination from Tomcat Server.

private JCoDestination dest;    
    public Connection(SapSystem system)  {

    dest = JCoDestinationManager.getDestination(SAP_SERVER);

            dest.ping();
}

What's the cause of the problem.

2

There are 2 answers

1
Nasir On

SAP Servers are generally configured based on

System ID , the Message Server and possible a Group Server along with an Instance Number.

You probably need to pass these parameters when instantiating your connection. It could be that on localhost, these are not needed/ignorable, but on production, it is required.

Try connecting to the server using SAP's tools and try to provide all the settings that you would otherwise provide.

If you post what settings you are using for your JCO, perhaps I can help more.

0
Gana On

Ideally, you should keep libsapjco3.so file outside your web application. Place it in any arbitary location and add that folder path to LD_LIBRARY_PATH environment variable. sapjco.jar can be in your classpath.

If the tomcat cannot load the .so file using the environment variable, you can try using System.setProperty("java.library.path", "folder_path_of_.so_file");

OR try to supply this variable by editing tomcat configuration files.

Finally, ensure that folder_path_of_.so_file has needed privileges for tomcat user.

This will solve your problem.

......