检查你的LocalHome接口的jndi名字是否正确,而且我好像记得Servlet中好像不能使用LocalHome接口,反正我知道在EJB中是可以使用的,它要求必须在一个虚拟机中使用,有时Servlet和EJB的虚拟机不是一个。

解决方案 »

  1.   

    试试这个.
    EjbAccountsHome home = (EjbAccountsHome)PortableRemoteObject.narrow(ref, EjbAccountsHome.class);
      

  2.   

    昨天我自己又做了一个实验,内容是测试同一应用服务器不同ejb容器间调用Localhome接口,结果出错信息一样,也是能找到JNDI名,而在强制转换成Localhome接口时出错,所以我也认为Servlet可能不能调用本地接口的EJB。不知各位高手有何意见!
    1.小田甜的方法只适用于调用远程接口。
    2.之支吾,上下文属性如下:
      private Context getInitialContext() throws Exception {
        String url = "t3://localhost:7001";
        String user = null;
        String password = null;
        Properties properties = null;
        try {
          properties = new Properties();
          properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
          properties.put(Context.PROVIDER_URL, url);
          if (user != null) {
            properties.put(Context.SECURITY_PRINCIPAL, user);
            properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password);
          }      return new InitialContext(properties);
        }
        catch(Exception e) {
          System.out.println("Unable to connect to WebLogic server at " + url);
          System.out.println("Please make sure that the server is running.");
          throw e;
        }
      }
    不知有何不妥,请指教。
      

  3.   

    好像使用你的getInitialContext() 方法是不正确的,你的这个方法实际上是采用了远程访问EJB的方法而不是本地访问.
    试试如此调用:
    Context ctx = new InitialContext();
      

  4.   

    你可以把代码写到一个EJB中做测试,就知道到底能不能调用了。
      

  5.   

    请参照weblogic文档中关于local interface的说明,里面写的很清楚:
    想要使用local interface,那么调用者和EJB必须在同一个jar(ear,zip)里面.
    我试过在ejb之间的调用,是成功的。
      

  6.   

    小小说的对。在weblogic里,weblogic会为你的ejb创建新的JVM和Servlet的JVM不同,这也是为什么调用者要
    在同一个包里的原因
      

  7.   

    小小说的对。在weblogic里,weblogic会为你的ejb创建新的JVM和Servlet的JVM不同,这也是为什么调用者要
    在同一个包里的原因
      

  8.   

    呵呵,再试试这个:
    Context initial = new InitialContext();
    Object objref = initial.lookup("<your jndi name for EjbAccount>");
    return (EjbAccountsHome) objref;
      

  9.   

    在同一个EJB容器中可以调用,我已试过。但在Servlet中不能。
      

  10.   

    各位大哥,那是不是说Servlet不能调用使用本地接口的EJB。
      

  11.   

    应该是吧,还是建议你做一个Facade Bean(当然了是一个Session Bean)吧,把你要调用的Entity Bean和Session Bean都放到改Facade中,这样就可以使用本地接口了。然后在Servlet中调用远程接口。