Actualmente no hay forma de usar mongodb-2.0
característica con una aplicación OSGi.
Buscando un com.mongodb.DB
resource le devolverá una instancia de DBApiLayer
, pero ese no es el problema (ya que DBApiLayer
extiende DB
). Todavía obtendría una ClassCastException incluso si hiciera esto:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Lanzaría:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
El motivo de esta limitación es que mongodb-2.0
La función utilizará un Classloader de Liberty para cargar clases com.mongodb, y una aplicación OSGi utilizará un Classloader independiente para cargar clases com.mongodb, sin importar cómo configure las cosas.
Las aplicaciones Java EE normales pueden hacer cosas como esta:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Sin embargo, <osgiApplication>
elementos no tienen esa capacidad. Desafortunadamente, la única solución aquí es abrir un RFE con IBM (o votar a favor uno si ya existe un RFE para esto).