1

我的程序是包客户端;

import homeif.HelloWorldHome;
import remoteif.HelloWorld;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.awt.image.LookupOp;
import java.util.Properties;

public class HelloClient {
    public static void main(String args[]) {
        try {


            Context initialContext = new InitialContext();

            Object object = initialContext.lookup("myHelloWorld");
            HelloWorldHome home =
                    (HelloWorldHome) PortableRemoteObject.narrow(object,
                            HelloWorldHome.class);
            HelloWorld myHelloWorld = home.create();
            String message = myHelloWorld.sayHello();
            System.out.println(message);
        } catch (Exception e) {
            System.err.println(" Error : " + e);
            System.exit(2);
        }

    }
}

我收到 javax.naming.NameNotFoundException: myHelloWorld not bound。我尝试使用 initialContext.bind("myHelloWorld",null); 绑定它 但是得到一个 NullPointerException。我的 jndi.properties 包括

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
我在 ejb-jar.xml 中指定了查找名称 myHelloWorld。我应该怎么做才能绑定查找

In jonas-ejb-jar.xml   
  ejb-name->HelloWorld 
  jndi-name->myHelloWorld
4

1 回答 1

2

您尝试连接的 JNDI 名称 ('myHelloWorld') 似乎不正确。您的 JNDI 名称应该绑定在 Java 范围内或全局范围内。如果它在 Java 命名范围内,那么您应该使用 java:myHelloWorld 访问它,否则直接访问它。您可以从 Jboss 管理控制台验证命名范围。Java 名称 sapce 意味着,它只能从同一服务器访问。全局名称空间意味着,它可以从任何其他服务器访问。您可以使用 ejb-jar.xml 中的配置来控制它。

其他可能性是您的 bean 没有正确部署。它将在启动时在服务器日志中显示一条消息。此消息还包含 bean 绑定的 JNDI 名称。尝试重新启动服务器可以看到你可以得到这个细节

于 2014-06-10T08:53:29.077 回答