Derzeit gibt es keine Möglichkeit, mongodb-2.0
zu verwenden Funktion mit einer OSGi-Anwendung.
Nachschlagen einer com.mongodb.DB
Die Ressource gibt Ihnen eine Instanz von DBApiLayer
zurück , aber das ist nicht das Problem (da DBApiLayer
erweitert DB
). Sie würden immer noch eine ClassCastException erhalten, selbst wenn Sie Folgendes tun würden:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Würde werfen:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
Der Grund für diese Einschränkung ist, dass mongodb-2.0
Das Feature verwendet einen Classloader von Liberty, um com.mongodb-Klassen zu laden, und eine OSGi-Anwendung verwendet einen separaten Classloader, um com.mongodb-Klassen zu laden, unabhängig davon, wie Sie die Dinge konfigurieren.
Normale Java-EE-Anwendungen können Dinge wie diese tun:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Allerdings <osgiApplication>
Elemente haben diese Fähigkeit nicht. Leider besteht hier die einzige Lösung darin, ein RFE bei IBM zu eröffnen (oder ein Upvote, wenn es dafür bereits ein RFE gibt).