MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

ClassCastException lors de la recherche JNDI pour MongoDB, à l'intérieur de WAB, exécutant Liberty

Actuellement, il n'y a aucun moyen d'utiliser le mongodb-2.0 fonctionnalité avec une application OSGi.

Recherche d'un com.mongodb.DB ressource vous renverra une instance de DBApiLayer , mais ce n'est pas le problème (puisque DBApiLayer étend DB ). Vous obtiendrez toujours une ClassCastException même si vous faisiez ceci :

DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");

Lancerait :

java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer

La raison de cette limitation est que le mongodb-2.0 utilisera un Classloader de Liberty pour charger les classes com.mongodb, et une application OSGi utilisera un Classloader séparé pour charger les classes com.mongodb, quelle que soit la façon dont vous configurez les choses.

Les applications Java EE normales peuvent faire des choses comme ceci :

<library id="MongoLib">
    <file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>

<application name="myApp">
    <classloader commonLibraryRef="MongoLib"/>
</application>

Cependant, <osgiApplication> les éléments n'ont pas cette capacité. Malheureusement, la seule solution ici est d'ouvrir un RFE avec IBM (ou d'en voter un si un RFE existe déjà pour cela).