Hiện tại không có cách nào để sử dụng mongodb-2.0
tính năng với một ứng dụng OSGi.
Tìm kiếm com.mongodb.DB
tài nguyên sẽ trả lại cho bạn một phiên bản của DBApiLayer
, nhưng đó không phải là vấn đề (vì DBApiLayer
mở rộng DB
). Bạn vẫn sẽ nhận được ClassCastException ngay cả khi bạn đã làm điều này:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Sẽ ném:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
Lý do cho hạn chế này là mongodb-2.0
tính năng sẽ sử dụng Classloader từ Liberty để tải các lớp com.mongodb và ứng dụng OSGi sẽ sử dụng một Classloader riêng để tải các lớp com.mongodb, bất kể bạn định cấu hình mọi thứ như thế nào.
Các ứng dụng Java EE bình thường có thể làm những việc như sau:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Tuy nhiên, <osgiApplication>
các phần tử không có khả năng đó. Thật không may, giải pháp duy nhất ở đây là mở một RFE với IBM (hoặc ủng hộ một RFE nếu đã tồn tại một RFE cho việc này).