MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

ClassCastException durante a pesquisa JNDI para MongoDB, dentro do WAB, executando o Liberty


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