你确认你的文件是Hello.java,没错写成hello.java ??

解决方案 »

  1.   

    没有用过JBoss,但这问题应该是Lookup时没有找到Hello对象。
    原因有几点:
    1. EJB布时出错
    2. EJB没有定义为远程接口,只定义了本地接口
    3. InitialContext();参数有错
    4. 应用服务器还没起动(JBoss)
      

  2.   

    Wnyu(已被封杀):
      就是 Lookup 时没有找到 Hello 对象,好象跟 JNDI 有关。
    是不是我少了什么重要的步骤?我的步骤时这样的:
    1 建立目录:
        
      ..\hello\ejb
                Hello.java       //定义 Remote 接口
                HelloHome.java   //定义 Home 接口
                HelloBean.java   //实现 ejb 
      ..\Meta_Inf
                ejb-jar.xml 
                
    其中每个文件的内容是这样:
    //Hello.java// Remote interface for Enterprise Bean: Hellopackage hello.ejb;public interface Hello extends javax.ejb.EJBObject
    {
        public String hello() throws java.rmi.RemoteException;
    }//HelloHome.java   //Home interface for Enterprise Bean: Hellopackage hello.ejb;public interface HelloHome extends javax.ejb.EJBHome
    {
        //Creates a default instance of Session Bean: Hello
    public Hello create() throws
        javax.ejb.CreateException,
        java.rmi.RemoteException;
    }//HelloBean.java
    //Bean implementation class for Enterprise Bean: Hellopackage hello.ejb;public class HelloBean implements javax.ejb.SessionBean
    {
    private javax.ejb.SessionContext mySessionCtx; //getSessionContext
    public javax.ejb.SessionContext getSessionContext()
    {
    return mySessionCtx;
    } //setSessionContext
    public void setSessionContext(javax.ejb.SessionContext ctx)
    {
    mySessionCtx = ctx;
    } //ejbActivate
    public void ejbActivate() { } //ejbCreate
    public void ejbCreate() throws javax.ejb.CreateException { } //ejbPassivate
    public void ejbPassivate() { } //ejbRemove
    public void ejbRemove() { } // Remote interface
        public String hello()
        {
      return "Hello, I am a ejb Bean ! Time " + new java.util.Date();
        }
    }//ejb-jar.xml<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
    <ejb-jar id="ejb-jar_ID">
    <display-name>helloEJB</display-name>
    <enterprise-beans>
    <session id="Hello">
    <ejb-name>Hello</ejb-name>
    <home>hello.ejb.HelloHome</home>
    <remote>hello.ejb.Hello</remote>
    <ejb-class>hello.ejb.HelloBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    </enterprise-beans>
    </ejb-jar>2 我将 3 个 .java 文件成功编译了。3 将上面2个目录打包成 Hello.jar 放到 JBoss 的 Deploy 目录下面。4 在客户端:
      将 上面服务器端的 2个文件(Hello.java, HelloHome.java)复制过来
      再建立文件 HelloClient.java5 编译 HelloClient.java 
      编译成功
      运行,
      出错:javax.naming.NameNotFoundException:  Hello  not  bound  不知道我是哪里少了什么步骤?
      
      

  3.   

    对了,在客户端同样编译了 Hello.java,HelloLHome.java 。
      

  4.   

    看你的jboss.xml中你的ejb的jndi名称和你lookup的名称是不是一致
      

  5.   

    JNDI名字不正确,编辑JNDI名字然后重新部署
      

  6.   

    老兄,你干吗不用JB做呢,方便的多?
    我看你的错误有以下几个方面的原因:
    1、EJB没部署成功!
    2、应用服务器没启动!
    3、你访问EJB的名字是不是写错拉!
      

  7.   

    我查找了一下,在 Jboss 的安装目录下:
    ..\server\all\deploy\jbossha-httpsession.sar\ClusteredHttpSessionEB.jar\META-INF有 jboss.xml 文件,里面有这么一段:
          <ejb-name>ClusteredHTTPSession</ejb-name>
          <jndi-name>clustering/HTTPSession</jndi-name>
          <local-jndi-name>clustering/LocalHTTPSession</local-jndi-name>
          <configuration-name>Clustered in-memory CMP EntityBean</configuration-name>这里有几个 jndi -name ,应该怎么改啊?
      

  8.   

    还有,和这个文件 jndi.properties 有没有关系?
      

  9.   

    是不是修改我自己写的这个 ejb-jar.xml 文件?
    我刚开始学,我是照着例子作的。
      

  10.   

    除了ejb-jar.xml文件正确外。还要有JBOSS.xml。试问楼主,你怎么知道布署正确了呢?
      

  11.   

    我看了另外一个例子:
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss>
      <enterprise-beans>
        <session>
          <ejb-name>Interest</ejb-name>
          <jndi-name>interest/Interest</jndi-name>
        </session>
      </enterprise-beans>
    </jboss>他有一个 jndi - name,但是,他是放在 session 里面,
    但是,我的 ejb 是一个无状态 (Stateles) ejb,
    我的 .xml 文件:
    <session id="Hello">
    <ejb-name>Hello</ejb-name>
    <home>hello.ejb.HelloHome</home>
    <remote>hello.ejb.Hello</remote>
    <ejb-class>hello.ejb.HelloBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    这里面少了什么?为什么我在调用 ejb 时,会找不到 接口呢?应该怎么修改啊?
      

  12.   

    ygrmry(初学者):
        我在 ..\server\all\deploy\jbossha-httpsession.sar\ClusteredHttpSessionEB.jar\META-INF 这个目录下发现有 Jboss.xml 
    这个文件,
        你说需要 JBOSS.xml ,是要修改这个文件,还是自己创建这个文件呢?我说我的 ejb 部署成功,我是这样作的:
       1 我先启动 Jboss.
       2 我将我的已经编译好的 ejb 和 ejb-jar.xml 文件打包成 hello.jar 文件,
    放到 ..\server\all\deploy\ 目录下面。
       3 在 Jboss 的命令行显示:09:17:46,524 INFO  [MainDeployer] Deployed package: file:/C:/JbossAndTomcat/serv
    er/default/deploy/hello.jar
       
       我看见这个信息,应该就是说 hello.jar 已经 Deployed 了。
           
      

  13.   

    保证jboss.xml和你的ejb-jar.xml在同一个目录下
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <jboss>
    <enterprise-beans>
    <session>
    <ejb-name>Hello</ejb-name>
    <jndi-name>Hello</jndi-name>
    </session>
    <secure>true</secure>
    </enterprise-beans>
    <resource-managers/>
    </jboss>
      

  14.   

    肯定是JNDI配置有误,j2ee对EJB要分接引用名和JNDI名。二者是多对一的关系也就是不同的客户端可以通过不同的引用名访问到同一个JNDI名。看看是否在这方面有问题。
      

  15.   

    RobertDeNiro,
      保证jboss.xml和你的ejb-jar.xml在同一个目录下。
      ejb-jar.xml 是我自己建立的文件,我把 ejb-jar.xml 和ejb组件打包到 hello.jar 中,
    并且放到 Jboss 的 ..\server\all\deploy\ 目录下面。
      而 jboss.xml 是 Jboss 的目录,他们怎么放到同一个目录呢?我是照着一个例子作的,例子在:http://www.huihoo.com/java/hello-jsp-servlet-ejb/我看了客户端的代码,就是在不到 Hello。
    代码我都贴出来了,我刚刚开始学习 java ,不太会弄,你可以说详细点吗?
      

  16.   

    部署到jboss的每一个ejb都要有一个jboss.xml对ejb进行描述,以后你会明白的,在这里只用把这个文件和你的ejb一起打包就可以了
      

  17.   

    应该就是我的那个 ejb-jar.xml 文件吧,那个文件的内容就是描述 ejb的。 
    我已经将他一起打包了。我是对着例子作的:http://www.huihoo.com/java/hello-jsp-servlet-ejb/
      

  18.   

    下面就是JBOSS.XML文件的样本,是自己建的:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jboss PUBLIC '-//JBoss//DTD JBOSS 3.0//EN' 'http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd'>
    <jboss>
    <enterprise-beans>
    <session id="Hello">
    <ejb-name>Hello</ejb-name>
    <jndi-name>ejb/com/HelloHome</jndi-name>
    </session>
    </enterprise-beans>
    </jboss>你也可以参照JBOSS服务器下的jmx-ejb-adaptor.jar文件。里面有jboss.xml和ejb-jar.xml两个文件。这两个都是需要的,第一个是JBOSS服务器自己的JNDI绑定的规则文件,第二个是EJB的汇编描述符。我们几百个EJB的大项目都用JBOSS跑通过了
      

  19.   

    RobertDeNiro() 大哥的回答是正确的.你需要将jboss.xml and ejb-jar.xml
    一起打包进你的jar 文件中.现在觉得我们的书上或多或少有这样那样的问题.不过网上的资料也是大部分抄来抄去的.建议直接看国外网站的英文资料,这样可以少走很多弯路.
      

  20.   

    多谢 chinadfw(爱好) ,
      我自己搞定了,你说得对,谢谢!