首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JNDI查找MongoDB期间的ClassCastException,在WAB内,运行Liberty

在JNDI查找MongoDB期间的ClassCastException,在WAB内,运行Liberty
EN

Stack Overflow用户
提问于 2014-03-17 13:16:22
回答 1查看 722关注 0票数 1

我想在WAB/OSGi中使用MongoDB的JNDI lookup,运行Liberty Profile。

代码语言:javascript
复制
import com.mongodb.DB;

@WebServlet("/MongoServlet")
public class MongoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;  

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
            DB db = (DB) new InitialContext().lookup("java:comp/env/mongodb");
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

JNDI查找给出了以下异常。

代码语言:javascript
复制
[ERROR   ] SRVE0777E: Exception thrown by application class 'com.osgi.jndi.web.MongoServlet.doGet:57'
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DB
com.mongodb.DBApiLayer is subclass of com.mongodb.DB. 

我相信ClassCastException是因为我的应用程序使用了不同的类加载器,以及OSGi引导类加载器。但是,我不知道如何解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2015-12-22 10:12:49

目前还没有办法在OSGi应用程序中使用mongodb-2.0功能。

查找com.mongodb.DB资源将返回一个DBApiLayer实例,但这不是问题所在(因为DBApiLayer扩展了DB)。即使你这样做了,你仍然会得到一个ClassCastException:

代码语言:javascript
复制
DBApiLayer db = (DBApiLayer) new InitialContext().lookup("java:comp/env/mongodb");

会抛出:

代码语言:javascript
复制
java.lang.ClassCastException: com.mongodb.DBApiLayer incompatible with com.mongodb.DBApiLayer

这种限制的原因是,mongodb-2.0特性将使用Liberty中的类加载器来加载com.mongodb类,而OSGi应用程序将使用单独的类加载器来加载com.mongodb类,而不管您是如何配置的。

普通的Java EE应用程序可以做这样的事情:

代码语言:javascript
复制
<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>元素不具有该功能。不幸的是,这里唯一的解决方案是与IBM建立一个RFE (或者,如果已经存在一个RFE,则上选一个)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22447446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档