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).