sql >> Database >  >> NoSQL >> MongoDB

ClassCastException tijdens JNDI-lookup voor MongoDB, binnen WAB, met Liberty

Momenteel is er geen manier om de mongodb-2.0 . te gebruiken functie met een OSGi-toepassing.

Een com.mongodb.DB opzoeken resource zal u een exemplaar teruggeven van DBApiLayer , maar dat is niet het probleem (sinds DBApiLayer breidt DB uit ). Je zou nog steeds een ClassCastException krijgen, zelfs als je dit deed:

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

Zou gooien:

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

De reden voor deze beperking is dat de mongodb-2.0 functie zal een Classloader van Liberty gebruiken om com.mongodb-klassen te laden, en een OSGi-toepassing zal een aparte Classloader gebruiken om com.mongodb-klassen te laden, ongeacht hoe je dingen configureert.

Normale Java EE-applicaties kunnen dit soort dingen doen:

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

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

Echter, <osgiApplication> elementen hebben die mogelijkheid niet. Helaas is de enige oplossing hier om een ​​RFE bij IBM te openen (of een upvote als hier al een RFE voor bestaat).




  1. Rails Redis instelling maxmemory en maxmemory-policy

  2. Spring Boot Standard UUID-codec werkt niet met AbstractMongoClientConfiguration

  3. Kan buffer niet schrijven naar MongoDB GridFS

  4. Commit in twee fasen in MongoDB