第一,JNDI名称不符,注意大小写。
第二,EJB部属的服务器没启动或EJB部属有问题,一般启动服务器后到控制台可以调整。
第三,Context获取不正确,就是那个查找JNDI名字的东东。
最好你把代码贴上来。

解决方案 »

  1.   

    这是测试ejb的时候报的错误,部署是正确的,我也认为是lookup("..."),有点问题,就是不知道怎么解决.
    部署信息:
    18:33:17,546 INFO  [MainDeployer] Starting deployment of package: file:/E:/jboss
    -3.2.3/server/default/deploy/HelloWorld.jar
    18:33:17,921 INFO  [EjbModule] Deploying Hello
    18:33:17,984 INFO  [StatelessSessionInstancePool] Started jboss.j2ee:jndiName=He
    llo,plugin=pool,service=EJB
    18:33:17,984 INFO  [StatelessSessionContainer] Started jboss.j2ee:jndiName=Hello
    ,service=EJB
    18:33:17,984 INFO  [EjbModule] Started jboss.j2ee:module=HelloWorld.jar,service=
    EjbModule
    18:33:17,984 INFO  [EJBDeployer] Deployed: file:/E:/jboss-3.2.3/server/default/d
    eploy/HelloWorld.jar
    18:33:18,000 INFO  [MainDeployer] Deployed package: file:/E:/jboss-3.2.3/server/
    default/deploy/HelloWorld.jarhelloclient代码:
    package examples;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import java.util.Properties;
    public class HelloClient {
    public static void main(String[] args) throws Exception {

    Properties props = System.getProperties();
    System.out.println("aaa");
    Context ctx = new InitialContext(props);
    Object obj = ctx.lookup("HelloHome");
    HelloHome home = (HelloHome)
    javax.rmi.PortableRemoteObject.narrow(
    obj, HelloHome.class);
    Hello hello = home.create();
    System.out.println(hello.hello());
    hello.remove();
    }
    }
    jboss.xml 代码
    <?xml version="1.0"?><!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN" "http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd"><jboss>
      <enterprise-beans>
         <session>
      <ejb-name>Hello</ejb-name>
      <jndi-name>HelloHome</jndi-name>
      <local-jndi-name>HelloLocalHome</local-jndi-name>
        </session>
    </enterprise-beans>
       
    </jboss>
    ejb-jar.xml代码
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"><ejb-jar>
     <enterprise-beans>
      <session>
       <ejb-name>Hello</ejb-name>
       <home>examples.HelloHome</home>
       <remote>examples.Hello</remote>
       <local-home>examples.HelloLocalHome</local-home>
       <local>examples.HelloLocal</local>
       <ejb-class>examples.HelloBean</ejb-class>
       <session-type>Stateless</session-type>
       <transaction-type>Container</transaction-type>
      </session>
     </enterprise-beans>
    </ejb-jar>运行测试命令:
    E:\jboss-3.2.3\HelloWorld\classes>java -Djava.security.policy=E:/jboss-3.2.3/Hel
    loWorld/java.policy -Djava.naming.factory.initial=org.jnp.interfaces.NamingConte
    xtFactory -Djava.naming.provider.url=localhost:1099 examples.HelloClient
    aaa
    Exception in thread "main" javax.naming.NameNotFoundException: HelloHome not bou
    nd
            at org.jnp.server.NamingServer.getBinding(NamingServer.java:495)
            at org.jnp.server.NamingServer.getBinding(NamingServer.java:503)
            at org.jnp.server.NamingServer.getObject(NamingServer.java:509)
            at org.jnp.server.NamingServer.lookup(NamingServer.java:282)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:39)
            at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
            at sun.rmi.server.UnicastRef.invoke(Unknown Source)
            at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:528)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:507)
    >>>>    at javax.naming.InitialContext.lookup(Unknown Source)
    >>>>    at examples.HelloClient.main(HelloClient.java:36)如果是lookup错误该怎么解决呢?
    谢谢各位,有奖.
      

  2.   

    在不断总结下,问题得以解决,原来是粗心将jboss.xml写错了,所以lookup不能找到home接口,现在得以运行了,谢谢各位的解答.