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).