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