【问题标题】:Unable to resolve <JNDI>无法解析 <JNDI>
【发布时间】:2011-06-12 20:01:57
【问题描述】:

我在“ejb.Bb_restriction_USRemoteHome”下绑定了 JNDI 中的 SessionBean。 Weblogic 控制台也证实了这一点。

但是在通过以下代码访问它时:

private static Context getInitialContext() throws NamingException {
      Context ctx = null;
      Hashtable ht = new Hashtable();
      ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
      ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
      ctx = new InitialContext(ht);
      return ctx;
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    try {
        Context ctx = getInitialContext();
        System.out.println(ctx.list("java:comp/env"));
        System.out.println(ctx.lookup("ejb.Bb_restriction_USRemoteHome").getClass());
    } catch (NamingException e) {
        e.printStackTrace();
    }
}

,我收到以下错误:

javax.naming.NameNotFoundException: Unable to resolve 'ejb.Bb_restriction_USRemoteHome'. Resolved 'ejb'; remaining name 'Bb_restriction_USRemoteHome'
    at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)
    at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:252)
    at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:182)
    at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:206)
    at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
    at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:254)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:411)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at TestServlet.doGet(TestServlet.java:50)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3717)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

“System.out.println(ctx.list("java:comp/env"));”的输出仅是 weblogic.jndi.internal.NameClassPairEnumeration@aee30f。

谁能告诉我如何检索 JNDI 名称为“ejb.Bb_restriction_USRemoteHome”的对象?

【问题讨论】:

  • 你能显示你的 ejb-jar.xml 会话 bean 条目吗?

标签: jakarta-ee weblogic ejb


【解决方案1】:

您正尝试在全局 JNDI 上下文中访问 JNDI 名称“ejb.Bb_restriction_USRemoteHome”。显然容器可以解析ejb部分,但不能解析“Bb_restriction_USRemoteHome”,所以这个名字显然不正确。

您可以尝试简单地列出 ejb 上下文的内容并从那里开始工作。

为此使用类似的东西:

NamingEnumeration namingEnumeration = ctx.list("ejb");
while (namingEnumeration.hasMoreElements()) {
    NameClassPair entry = (NameClassPair) namingEnumeration.nextElement();
    System.out.println(entry.getName());
}

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多