还有一点要说明的是,包Student已经引入library了,并且在调用到的地方都import table.student.*;了

解决方案 »

  1.   

    另外,我参考《精通EJB》上面修改XML后,发现,用JBuilder一运行,他就会自动修改回来,不知道又没有什么办法,不让他修改回来?
      

  2.   

    错误是来自这里:
    Object ref = ctx.lookup("java:/comp/env/Student");所以,可以肯定的是,通过JNDI找不到你的student实体bean。可能的原因是:
    1,你没有发布你的student bean 到jndi中。
    2,你的发布名称不对
      

  3.   

    嗯,我发布了,我通过Weblogic Server Console察看,结果如下:
     Component   Component Type  Target      Target Type      Deployed   
      Student       EJB           myserver    Server           true 
    ===========================================================================
    Name       Application    URI          Deployment Order   
    Student     Student      Student.jar      1000 
    应该是发布成功了。发布的名称,难道不是Student么?它的名字明明写着Student呀,还望大哥指教。
      

  4.   


            <jndi-name>StudentRemote</jndi-name>
            <local-jndi-name>Student</local-jndi-name>
      

  5.   

    如果是使用weblogic 7 这句
    Object ref = ctx.lookup("java:/comp/env/Student");
    应该这样写
    Object ref = ctx.lookup("Student");
      

  6.   

    Object ref = ctx.lookup("Student");
    直接look jndi名字,前面那一堆没用.除非你自己配置好了 ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  7.   

    结果还是一样的错误,没有成功执行lookup.
      

  8.   

    是不是XML里面要些什么东西?
      

  9.   

    我记得session bean里面——有个 大概是叫ejb localreference 的选项卡 ,把你要关连的实体bean要加上去,比如你的,格式就是name:  ejb/Student  后面选上islink 然后就会出来你的所有的ejb,选择Student  
    就可以了在左边树形菜单的地方双击你的session bean  就会看到一堆的选项卡  上面所说的就是其中一个
    试试  也许有用
      

  10.   

    to: smilywind
        你说的那种情况是2个Bean在一个工程里面的情况,可是如果我在A工程里面做了一个Bean,然后再B工程里面做了一个Bean,2者怎么调用呢?A工程里面的Bean发布了。
        另外,我还要改动Bean的包,不修改XML怎么行呢?
      

  11.   

    哥们:
    将这段加入到sessionBean的配置文件中
    <reference-descriptor><weblogic-enterprise-bean>
        <ejb-name>Student_S</ejb-name>
        <reference-descriptor>
          <ejb-local-reference-description>
            <ejb-ref-name>
              ejb/Student
            </ejb-ref-name>
            <jndi-name>
              Student
            </jndi-name>
          </ejb-local-reference-description>
        </reference-descriptor>
        <local-jndi-name>SignOnEJB.SignOnHome</local-jndi-name>
      </weblogic-enterprise-bean>附加一句:你应用的是本地接口,所以这么用的;
      

  12.   

    谢谢netcobol,可能是这个问题,我试试看,如果成功了,我一定给分的。
      

  13.   

    ctx.lookup("StudentRemote");要不你要加上
    <ejb-local-ref >
                <ejb-ref-name>ejb/local/Student</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home></local-home>
                <local></local>
                <ejb-link>Student</ejb-link>
             </ejb-local-ref>
    或者
    <ejb-ref>
    ...
    </ejb-ref>
    然后使用ctx.lookup("java:comp/env/your ref-name");
      

  14.   

    在树状导航栏中找到你的bean双击,出现该bean的属性,在选种ejbreference标签栏,在其中添加相应的内容即可!
    注意link选项最好不添,添加容易出错!
      

  15.   

    在树状导航栏中找到你的bean双击,出现该bean的属性,在选种ejbreference标签栏,在其中添加相应的内容即可
    -----------------------------------------------------------
    可是我怎么找不到ejbreference标签栏呢?我用的是weblogic7
    另外通过远程接口可以调用其他的EJB,但是用本地接口就不行,不知道是什么原因
      

  16.   

    import javax.naming.*;
    import java.util.*;
    import javax.rmi.*;
    import javax.ejb.*;public class Bejb {
    private String name = "not found";

    public void setName(String n) {
    try {
    InitialContext ctx = new InitialContext();  //初始化上下文
    Object ref = ctx.lookup("AccountSes");      //通过JNDI名字得到对象的接口
    AccountSesHome accountSesHome = (AccountSesHome) PortableRemoteObject.narrow(ref, AccountSesHome.class); 
    //把对象强制转化为home接口类。这样就得到了EJB对象的Home接口,然
    //后再按EJB规范,根据不同的EJB类型,通过不同的方法得到EJB的
    //Home接口类。
    AccountSes accountSes = accountSesHome.create();
    name = accountSes.getName(new Integer(Integer.parseInt( n )));
    }catch(Exception e) {
    e.printStackTrace();
    }
    }

    public String getName() {
    return name;
    } }