的方法我应该怎么做那?
有人有代码吗?顺便讲讲原理呗谢谢啊。

解决方案 »

  1.   

    可以,你需要知道 EJB 服务端所在的地址,然后从 JNDI 中直接查找。客户端 JNDI 查找方式与服务端所用的 J2EE 应用服务器有关。比如 JBoss 可以这样做:public static void main(String[] args) {
        Context ctx = getContext();
        Object ref = ctx.lookup("XxxxxBean/remote");  // EJB 的 JNDI 名字
        Xxxxx ejb = (Xxxxx)PortableRemoteObject.narrow(ref, Xxxxx.class);  // Xxxxx 是 EJB 的 remote 接口,之后就可以使用这个 ejb 对象了。
    }public Context getContext() throws ... {
        Properties p = new Properties();
        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interface");
        p.put(Context.PROVIDER_URL, "jnp://xxx.xxx.xxx.xxx:1099");  // xxx.xxx.xxx.xxx 为服务端 IP
        return new javax.naming.InitialContext(p);
    }
      

  2.   

    其他 J2EE 应用服务器不同之处在于 getContext 中的 put 的属性值,以及 Context#lookup 中的 JNDI 名字(在 EJB 3.1 之前这个名字没有规范化,这个 JNDI 名字由具体的 EJB 厂商做主)。
      

  3.   

    那比如一个b/s的项目是ejb的我只要知道jndi就可以随便操作这个ejb了?
      

  4.   

    那比如一个b/s的项目是ejb的我只要知道jndi就可以随便操作这个ejb了?
      

  5.   

    那比如一个b/s的项目是ejb的我只要知道jndi就可以随便操作这个ejb了?
      

  6.   

    是的EJB 作为服务端,你的 B/S 属于客户端,如果 EJB 和 B/S 程序不是在一个 EAR 工程中的话,只要把 EJB 的接口拿过去就行了。
      

  7.   

    如果 EJB 和程序不是打包在一个 ear 包中的话,那么那个 EJB 必须是 Remote 型的才能被调用得到。