sql >> Databasteknik >  >> NoSQL >> MongoDB

ClassCastException under JNDI-sökning för MongoDB, inuti WAB, kör Liberty

För närvarande finns det inget sätt att använda mongodb-2.0 funktion med en OSGi-applikation.

Söker upp en com.mongodb.DB resursen kommer att returnera en instans av DBApiLayer till dig , men det är inte problemet (eftersom DBApiLayer utökar DB ). Du skulle fortfarande få en ClassCastException även om du gjorde detta:

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

Skulle kasta:

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

Anledningen till denna begränsning är att mongodb-2.0 funktionen kommer att använda en Classloader från Liberty för att ladda com.mongodb-klasser, och en OSGi-applikation kommer att använda en separat Classloader för att ladda com.mongodb-klasser, oavsett hur du konfigurerar saker.

Vanliga Java EE-program kan göra saker som detta:

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

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

Men <osgiApplication> element har inte den förmågan. Tyvärr är den enda lösningen här att öppna en RFE med IBM (eller rösta upp en om en RFE redan finns för detta).




  1. Hur du säkrar dina Open Source-databaser med ClusterControl

  2. Mongodb, $summa med skick

  3. Hur skriver man funktion-y som accepterar parameter-fct_x som accessar var-a som måste definieras i funktion-y?

  4. Mongodb array $push och $pull