2013-08-06 9 views
6

Ich habe eine Java-Webanwendung entwickelt, die mit SAP integriert ist. Ich habe es mit Linux Server und Tomcat 7.0 entwickelt. Ich habe sapjco3.jar und libsapjco3.so im Ordner WEB-INF/lib hinzugefügt. Es funktioniert gut lokalen Server. Bei der Bereitstellung der WAR-Datei auf dem Remote-Server wird jedoch der folgende Fehler generiert.SAP + Java: java.lang.NoClassDefFoundError: com.sap.conn.rfc.driver.CpicDriver

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) 

Der Fehler tritt auf, wenn das Ziel vom Tomcat-Server abgerufen wird.

private JCoDestination dest;  
    public Connection(SapSystem system) { 

    dest = JCoDestinationManager.getDestination(SAP_SERVER); 

      dest.ping(); 
} 

Was ist die Ursache des Problems?

+0

Ist diese Klasse definitiv in dieser JAR-Datei? –

+0

@JonSkeet, ja Klasse ist im Jar –

+0

Irgendwelche anderen Fehler früher im Protokoll, die etwas falsches in der Kriegs- oder Jar-Akte anzeigen können? –

Antwort

0

SAP-Server konfiguriert sind, basieren im allgemeinen auf

System ID, die Message Server und möglich, eine Group Server zusammen mit einem Instance Number.

Wahrscheinlich müssen Sie diese Parameter beim Instanziieren Ihrer Verbindung übergeben. Es könnte sein, dass diese auf localhost nicht benötigt/ignoriert werden, aber auf Produktion, ist es erforderlich.

Versuchen Sie, eine Verbindung zum Server mithilfe der SAP-Tools herzustellen, und versuchen Sie, alle Einstellungen bereitzustellen, die Sie andernfalls bereitstellen würden.

Wenn Sie angeben, welche Einstellungen Sie für Ihre JCO verwenden, kann ich vielleicht mehr helfen.

+1

Sorry zu sagen, aber das ist falsch. Was auch immer Sie auf der JCo-Seite wählen, keine Einstellung der Anmeldeparameter, JCo-Programmkonfiguration oder API-Verwendung führt zu NoClassDefFoundError.Ein solcher Fehler wird immer durch externe Faktoren verursacht, z. eine falsche JCo-Installation. – Trixx

1

Idealerweise sollten Sie die Datei libsapjco3.so außerhalb Ihrer Webanwendung aufbewahren. Platzieren Sie es an einem beliebigen Ort und fügen Sie den Ordner Pfad zur Umgebungsvariable LD_LIBRARY_PATH hinzu. sapjco.jar kann in Ihrem Klassenpfad sein.

Wenn der Tomcat die .so-Datei nicht mit der Umgebungsvariablen laden kann, können Sie versuchen, System.setProperty ("java.library.path", "folder_path_of_.so_file") zu verwenden;

ODER versuchen Sie, diese Variable zu liefern, indem Sie Tomcat-Konfigurationsdateien bearbeiten.

Stellen Sie abschließend sicher, dass folder_path_of_.so_file Berechtigungen für Tomcat-Benutzer benötigt.

Dies wird Ihr Problem lösen.

......