Momenteel is er geen manier om de mongodb-2.0
. te gebruiken functie met een OSGi-toepassing.
Een com.mongodb.DB
opzoeken resource zal u een exemplaar teruggeven van DBApiLayer
, maar dat is niet het probleem (sinds DBApiLayer
breidt DB
uit ). Je zou nog steeds een ClassCastException krijgen, zelfs als je dit deed:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Zou gooien:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
De reden voor deze beperking is dat de mongodb-2.0
functie zal een Classloader van Liberty gebruiken om com.mongodb-klassen te laden, en een OSGi-toepassing zal een aparte Classloader gebruiken om com.mongodb-klassen te laden, ongeacht hoe je dingen configureert.
Normale Java EE-applicaties kunnen dit soort dingen doen:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Echter, <osgiApplication>
elementen hebben die mogelijkheid niet. Helaas is de enige oplossing hier om een RFE bij IBM te openen (of een upvote als hier al een RFE voor bestaat).