MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

ClassCastException durante la ricerca JNDI per MongoDB, all'interno di WAB, che esegue Liberty

Attualmente non c'è modo di usare mongodb-2.0 funzionalità con un'applicazione OSGi.

Ricerca di un com.mongodb.DB risorsa ti restituirà un'istanza di DBApiLayer , ma non è questo il problema (poiché DBApiLayer estende DB ). Otterresti comunque un ClassCastException anche se lo facessi:

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

Lancerei:

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

La ragione di questa limitazione è che mongodb-2.0 la funzione utilizzerà un Classloader di Liberty per caricare le classi com.mongodb e un'applicazione OSGi utilizzerà un Classloader separato per caricare le classi com.mongodb, indipendentemente da come configuri le cose.

Le normali applicazioni Java EE possono fare cose come questa:

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

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

Tuttavia, <osgiApplication> gli elementi non hanno questa capacità. Sfortunatamente, l'unica soluzione qui è aprire una RFE con IBM (o votarne una se esiste già una RFE per questo).