Saat ini tidak ada cara untuk menggunakan mongodb-2.0
fitur dengan aplikasi OSGi.
Mencari com.mongodb.DB
resource akan mengembalikan Anda sebuah instance dari DBApiLayer
, tapi bukan itu masalahnya (karena DBApiLayer
memperluas DB
). Anda masih akan mendapatkan ClassCastException bahkan jika Anda melakukan ini:
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");
Akan melempar:
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer
Alasan pembatasan ini adalah karena mongodb-2.0
fitur akan menggunakan Classloader dari Liberty untuk memuat kelas com.mongodb, dan aplikasi OSGi akan menggunakan Classloader terpisah untuk memuat kelas com.mongodb, tidak peduli bagaimana Anda mengonfigurasinya.
Aplikasi Java EE normal dapat melakukan hal-hal seperti ini:
<library id="MongoLib">
<file name="${server.config.dir}/lib/mongo-java-driver-2.11.4.jar"/>
</library>
<application name="myApp">
<classloader commonLibraryRef="MongoLib"/>
</application>
Namun, <osgiApplication>
elemen tidak memiliki kemampuan itu. Sayangnya, satu-satunya solusi di sini adalah membuka RFE dengan IBM (atau memilih salah satu jika RFE sudah ada untuk ini).