【问题标题】:Accesing an remote enterprise bean within a simple Java class在简单的 Java 类中访问远程企业 bean
【发布时间】:2009-10-25 12:40:23
【问题描述】:

这是我的 Java 类

import endpoint.NewSessionRemote;
import javax.naming.Context;
import javax.naming.InitialContext;

public class HelloClient {

    public static void main(String[] args) {
        try {
            Context ctx = new InitialContext();
            NewSessionRemote hello = (NewSessionRemote) ctx.lookup("endpoint.NewSessionRemote");
            System.out.println(hello.stringChange(4));
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

当我运行这个类时,我遇到了一个异常。

    javax.naming.NameNotFoundException: endpoint.NewSessionRemote not found
        at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
        at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
        at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
        at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
java.lang.NullPointerException

所有其他企业 bean 类都是根据 EJB 3.0 标准编写的。 我们期待您的宝贵贡献。

解决方案

例外是

javax.naming.NameNotFoundException: endpoint.NewSessionRemote not found

这是因为应用程序端给出的 JNDI 名称与服务器(Glassfish)的实际 JNDI 名称不匹配,所以我通过其管理控制台(特定于供应商)检查 Glassish 中的 JNDI 树,我做到了请注意,NewSessionRemote 接口(它是会话 bean NewSessionBean 的业务接口)的 JNDI 与我在应用程序端给出的名称不同。那么这是怎么发生的,然后我突然想到了 ejb-jar.xml 有另一个名称 JNDI 名称分配给相同的 NewSessionRemote 使用标签。所以我只是删除它并重新部署 EJB 模块。就是这样。

【问题讨论】:

  • 问题已解决,感谢您的帮助。
  • 那么您如何发布有关解决方案的一些详细信息,以便其他有相同问题的人从您的经验中学习?

标签: java ejb jndi


【解决方案1】:

您似乎没有 lookingUp() 反对的 RMI 注册表(即活动服务器)。

您没有提供 Context.INITIAL_CONTEXT_FACTORY 变量,因此查找应该是一个有效的 URL,但它不是。

因此,您应该在您的enviCtx)上放置类似的内容:

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");

我建议您阅读http://java.sun.com/j2se/1.5.0/docs/guide/jndi/jndi-rmi.html 上的简单示例

【讨论】:

    【解决方案2】:

    在使用 JNDI 时,您使用的 API 需要基于其的特定配置才能连接到服务器(有关该配置的详细信息,请参阅Javadoc)。例如,java.naming.factory.initial 是指示您要使用的 JNDI 实现的属性。

    现在,当在 JavaEE 服务器中运行代码时,此配置是隐式可用的,您需要做的就是您在代码中所做的 - 实例化 InitialContext,并执行查找。但是,在服务器外部运行时,这种隐式配置不存在,因此您需要显式配置您的InitialContext

    您的示例代码使用main() 方法,这表明您在容器外运行。您需要的配置取决于您的特定应用程序服务器,您需要查看该文档以查看要提供的配置。

    【讨论】:

    • 嗨,我确实设法克服了这个问题,但现在我遇到了另一个异常
    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多