В момента няма начин да използвате mongodb-2.0
функция с OSGi приложение.
Търсене на com.mongodb.DB
ресурс ще ви върне обратно екземпляр на DBApiLayer
, но не това е проблемът (тъй като DBApiLayer
разширява DB
). Все пак ще получите ClassCastException, дори ако сте направили това:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Бих хвърлил:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
Причината за това ограничение е, че mongodb-2.0
функцията ще използва Classloader от Liberty за зареждане на класове com.mongodb, а OSGi приложение ще използва отделен Classloader за зареждане на класове com.mongodb, без значение как конфигурирате нещата.
Нормалните Java EE приложения могат да правят неща като това:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Въпреки това, <osgiApplication>
елементите нямат тази способност. За съжаление, единственото решение тук е да отворите RFE с IBM (или да гласувате за такъв, ако вече съществува RFE за това).