2013-08-06 32 views
6

Tôi đã phát triển một ứng dụng web java tích hợp với SAP. Tôi đã phát triển nó với Linux Server và Tomcat 7.0. Tôi đã thêm sapjco3.jar và libsapjco3.so vào thư mục WEB-INF/lib. Nó đang làm việc tốt máy chủ địa phương. Nhưng khi triển khai tệp WAR trong máy chủ từ xa, lỗi sau được tạo.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) 

Lỗi xảy ra khi ping điểm đến từ máy chủ Tomcat.

private JCoDestination dest;  
    public Connection(SapSystem system) { 

    dest = JCoDestinationManager.getDestination(SAP_SERVER); 

      dest.ping(); 
} 

Nguyên nhân của vấn đề là gì.

+0

Lớp học đó có chắc chắn trong tệp jar đó không? –

+0

@JonSkeet, có lớp nằm trong bình –

+0

Bất kỳ lỗi nào khác trước đó trong nhật ký có thể cho biết có điều gì đó sai trong chiến tranh hoặc tệp jar? –

Trả lời

0

Servers SAP thường được cấu hình dựa trên

System ID, các Message Server và có thể một Group Server cùng với một Instance Number.

Bạn có thể cần phải vượt qua các thông số khi instantiating kết nối của bạn. Nó có thể là trên localhost, đây không phải là cần thiết/ignorable, nhưng về sản xuất, nó là cần thiết.

Thử kết nối với máy chủ bằng cách sử dụng các công cụ của SAP và cố gắng cung cấp tất cả các cài đặt mà bạn có thể cung cấp.

Nếu bạn đăng những cài đặt nào bạn đang sử dụng cho JCO của mình, có lẽ tôi có thể trợ giúp thêm.

+1

Xin lỗi để nói, nhưng điều này là sai. Bất cứ điều gì bạn chọn ở phía JCo, không có thiết lập tham số đăng nhập, cấu hình chương trình JCo hoặc sử dụng API sẽ dẫn đến một NoClassDefFoundError.Lỗi như vậy luôn do các yếu tố bên ngoài gây ra, ví dụ: cài đặt JCo sai. – Trixx

1

Tốt nhất, bạn nên giữ libsapjco3.so tập tin bên ngoài ứng dụng web của bạn. Đặt nó vào vị trí bất kỳ và thêm vào đó thư mục đường dẫn đến biến môi trường LD_LIBRARY_PATH. sapjco.jar có thể nằm trong classpath của bạn.

Nếu tomcat không thể tải tệp .so bằng biến môi trường, bạn có thể thử sử dụng System.setProperty ("java.library.path", "folder_path_of_.so_file");

HOẶC cố gắng để cung cấp biến này bằng cách chỉnh sửa file cấu hình tomcat.

Cuối cùng, đảm bảo rằng thư mục_path_of_.so_file có các đặc quyền cần thiết cho người dùng tomcat.

Điều này sẽ giải quyết được sự cố của bạn.

......

Các vấn đề liên quan