2013-08-06 170 views
6

我開發了一個與SAP集成的Java Web應用程序。我用Linux Server和Tomcat 7.0開發了它。我在WEB-INF/lib文件夾中添加了sapjco3.jar和libsapjco3.so。它工作正常本地服務器。但是當在遠程服務器中部署WAR文件時,會生成以下錯誤。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) 

從Tomcat服務器ping目標時出現錯誤。

private JCoDestination dest;  
    public Connection(SapSystem system) { 

    dest = JCoDestinationManager.getDestination(SAP_SERVER); 

      dest.ping(); 
} 

問題的原因是什麼。

+0

那個類是否在該jar文件中? –

+0

@JonSkeet,是類中的jar –

+0

日誌中的任何其他錯誤可能表明war或jar文件中有錯誤嗎? –

回答

0

SAP服務器基於

System ID,所述Message Server並用Instance Number沿着可能一個Group Server通常配置。

實例化連接時可能需要傳遞這些參數。這可能是在本地主機上,這些不是必需的/可忽略的,但是在生產中,這是必需的。

嘗試使用SAP的工具連接到服務器,並嘗試提供您將另外提供的所有設置。

如果您發佈了您用於JCO的設置,或許我可以提供更多幫助。

+1

對不起,但這是錯誤的。無論您在JCo方面選擇什麼,沒有登錄參數設置,JCo程序配置或API使用都會導致NoClassDefFoundError。這種錯誤總是由外部因素引起的,例如錯誤的JCo安裝。 – Trixx

1

理想情況下,您應該將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用戶所需的權限。

這將解決您的問題。

......