V současné době neexistuje žádný způsob, jak použít mongodb-2.0 funkce s aplikací OSGi.
Vyhledání com.mongodb.DB resource vám vrátí instanci DBApiLayer , ale to není problém (protože DBApiLayer rozšiřuje DB ). Stále byste dostali ClassCastException, i když byste udělali toto:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Hodilo by:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
Důvodem tohoto omezení je mongodb-2.0 funkce použije Classloader od Liberty k načtení tříd com.mongodb a aplikace OSGi použije samostatný Classloader k načtení tříd com.mongodb, bez ohledu na to, jak věci nakonfigurujete.
Normální Java EE aplikace mohou dělat věci jako toto:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Nicméně <osgiApplication> prvky tuto schopnost nemají. Bohužel jediným řešením je otevřít RFE s IBM (nebo dát souhlas, pokud pro to RFE již existuje).