sql >> Databáze >  >> NoSQL >> MongoDB

ClassCastException během vyhledávání JNDI pro MongoDB, uvnitř WAB, běžící Liberty

V současné době neexistuje žádný způsob, jak použít mongodb-2.0 funkce s aplikací OSGi.

Vyhledání com.mongodb.DB resource vám vrátí instanci DBApiLayer , ale to není problém (protože DBApiLayer rozšiřuje DB ). Stále byste dostali ClassCastException, i když byste udělali toto:

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

Hodilo by:

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

Důvodem tohoto omezení je mongodb-2.0 funkce použije Classloader od Liberty k načtení tříd com.mongodb a aplikace OSGi použije samostatný Classloader k načtení tříd com.mongodb, bez ohledu na to, jak věci nakonfigurujete.

Normální Java EE aplikace mohou dělat věci jako toto:

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

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

Nicméně <osgiApplication> prvky tuto schopnost nemají. Bohužel jediným řešením je otevřít RFE s IBM (nebo dát souhlas, pokud pro to RFE již existuje).




  1. Textové vyhledávání Mongoose s operátorem AND

  2. třídit mongo kolekci na základě skóre podřízených dokumentů

  3. moveChunk nedokázal zapojit TO-shard do přenosu dat:nemůže přijímat nové bloky, protože

  4. Vypsat dynamické atributy v mongoidním modelu