Atualmente não há como usar o
mongodb-2.0
recurso com um aplicativo OSGi. Procurando um
com.mongodb.DB
O recurso retornará uma instância de DBApiLayer
, mas esse não é o problema (já que DBApiLayer
estende DB
). Você ainda obteria um ClassCastException mesmo se fizesse isso:DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Jogaria:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
A razão para esta limitação é que o
mongodb-2.0
recurso usará um Classloader do Liberty para carregar classes com.mongodb e um aplicativo OSGi usará um Classloader separado para carregar classes com.mongodb, não importa como você configure as coisas. Aplicativos Java EE normais podem fazer coisas assim:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
No entanto,
<osgiApplication>
elementos não têm essa capacidade. Infelizmente, a única solução aqui é abrir um RFE com a IBM (ou votar em um se já existir um RFE para isso).