如果你的两ejb在两个不同的jar包中,那么你必须要把这两个jar包打在一个ear包中,再部署这个ear。结果就会对。
如果你的两个ejb在同一个jar中,那么问题应该在ejb-jar.xml中,你好好检查一下。祝好运!

解决方案 »

  1.   

    你的jndi没有帮定好,或者就是你的jndi名字不对,你检查一下,注意大小写。
      

  2.   

    我仔细查过JNDI,肯定没有写错,大小写也没有错。我后来把那个不能lookup到的EJB单独拿出来,放在一个ear中,部署成功,但lookup时就是提示 not found,不管我用的什么JNDI名字。我现在猜想是程序代码的问题,但我也没有见j2ee的容器(sun 自带的)对无状态会话Bean有什么限制要求啊,再说如果要是触犯限制那也不能被部署成功啊。我用同样的客户端代码lookup其他的EJB时都能成功。真不知是为什么,希望大家帮忙!非常感谢!
      

  3.   

    我遇到过这个问题,当时在bean中调用了资源,而资源没有定义好就会出现这种问题.
      

  4.   

    我现在找出了问题所在:我能lookup到的那个EJB是有本地接口和远程接口;但lookup不到的那个EJB当时考虑到只需本地接口调用,就没有开发远程接口,问题就出在我没有开发远程接口,所以能部署但不能lookup。这怎么可能呢?EJB2.0是可以本地调用的啊,那我就可以不开发远程接口啊,再说真要是必须远程接口而我没有开发,那部署工具(deploytool)也应该会提示啊。再有奇怪的就是,我在不得已的情况下,为每个Bean开发了远程接口,然后想用本地接口调用,语句如下:
        InitialContext initCtx = new InitialContext();
        MyEjbLocalHome localHome = (MyEjbLocalHome)initCtx.lookup 
                                                  ("myEjbJNDI");
    执行到这儿,就抛出异常:java.lang.ClassCastException: _MyEjbHome_Stub.怎么会这样呢?为什么我的本地调用总不能成功呢?希望大家给予帮助,谢谢!
    对了,我的j2ee版本是1.3.01_win。再次谢谢!
      

  5.   

    还没有得到答案,希望大家继续帮忙,现把两问题整理如下(j2ee 1.3.01):    1、只有Local接口的EJB能部署成功,也会要求输入JNDI,但不管是否在一个ear的客户端,lookup(JNDIName)时都会提示Name not found;这样就导致了下面第二个问题的发生。
        2、有Remote和Local接口的EJB,在用Remote接口调用时(先lookup()后narrow())能正常使用;但用Local接口调用时,直接用lookup()造型,但这时的lookup到实际是Remote Home对象,所以会产生造型异常。个人觉得问题出在1,因为本地接口根本不能被正确部署。    找到这个问题,不知是不是j2ee的Bug,还是我的说法不成立。希望大家给予指点和讨论,谢谢!