Obecnie nie ma możliwości użycia mongodb-2.0
funkcja z aplikacją OSGi.
Wyszukiwanie com.mongodb.DB
zasób zwróci ci instancję DBApiLayer
, ale to nie problem (ponieważ DBApiLayer
rozszerza DB
). Nadal otrzymasz wyjątek ClassCastException, nawet jeśli to zrobisz:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Rzuciłby:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
Powodem tego ograniczenia jest to, że mongodb-2.0
funkcja użyje Classloader firmy Liberty do ładowania klas com.mongodb, a aplikacja OSGi użyje oddzielnego Classloader do ładowania klas com.mongodb, bez względu na to, jak wszystko skonfigurujesz.
Zwykłe aplikacje Java EE mogą robić takie rzeczy:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Jednak <osgiApplication>
elementy nie mają takiej możliwości. Niestety jedynym rozwiązaniem jest tutaj otwarcie RFE z IBM (lub zagłosowanie na jedną, jeśli RFE już istnieje).