Tôi cần kết nối với một cá thể MongoDB từ ứng dụng EJB3 của tôi, chạy trên glassfish 3.0.1. Dự án Mongo cung cấp một bộ trình điều khiển và tôi có thể sử dụng chúng trong một ứng dụng Java độc lập.Làm cách nào để sử dụng thư viện của bên thứ 3 trong thủy tinh?
Làm cách nào để sử dụng chúng trong ứng dụng Java EE? Hoặc có thể nói cách khác tốt hơn: làm thế nào tôi có thể làm cho một thư viện của bên thứ ba có sẵn cho ứng dụng của tôi khi nó chạy trong một thùng chứa EJB?
Tại thời điểm này, tôi nhận được một java.lang.NoClassDefFoundError khi triển khai một bean mà cố gắng để nhập khẩu từ thư viện:
[#|2010-03-24T11:42:15.164+0100|SEVERE|glassfishv3.0|global|_ThreadID=28;_ThreadName=Thread-1;|Class [ com/mongodb/DBObject ] not found. Error while loading [ class mvs.core.LocationCacheService ]|#]
[#|2010-03-24T11:42:15.164+0100|WARNING|glassfishv3.0|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=28;_ThreadName=Thread-1;|Error in annotation processing: java.lang.NoClassDefFoundError: com/mongodb/DBObject|#]
[#|2010-03-24T11:42:15.259+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=28;_ThreadName=Thread-1;|Exception while loading the app
org.glassfish.deployment.common.DeploymentException: java.lang.NoClassDefFoundError: com/mongodb/DBObject
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:171)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:125)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:224)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
Tôi đã cố gắng thêm nó vào dự án NetBeans (Properties -> Thư viện -> Biên dịch -> Thêm Jar, bật 'Gói'), và tôi cũng đã thử sao chép thủ công tệp jar thành $ GF_HOME/glassfish/domains/domain1/lib (nơi mà trình kết nối mysql đã cư trú).
Tôi có cần 'đăng ký' thư viện với vùng chứa không? Tham khảo nó qua Chú thích? Mở rộng đường dẫn lớp của vùng chứa để bao gồm thư viện?
@Pascal: cảm ơn bạn! Tôi nghĩ rằng tôi đã thử điều này, quá. Dù sao, hoạt động như một say mê. Đó có phải là cách tốt không? Điều này có nên là một phần của việc triển khai không? – Hank
@Cảm ơn Tôi không biết trình điều khiển MongoDB được sử dụng như thế nào nhưng nếu nó không được sử dụng bởi thùng chứa (như trình điều khiển JDBC để tạo hồ bơi kết nối) cũng không được chia sẻ giữa các ứng dụng của miền. nó bên trong ứng dụng của bạn. –