EJB的JNDI Environment是它自己的一个私人空间,它所用的参数和其他Bean的reference都放在这个空间里,deployer在部署时设置这些东西,把reference连接到实际的Bean上。

解决方案 »

  1.   

    打个比方,你是我的弟弟(占你点便宜,不要介意)。
    因此,我一般喊你都叫你弟弟(logic name),但是,我的弟弟也是有个名字的。
    并且,在中国是中文名,在外国是外国名(名字在这里就是jndi),但是,我不管你的名字(jndi)是什么,我都喊你是弟弟(logic name),我都能找到(call or lookup)你,但是,别人,要找你,都得通过你的名字(jndi),,,,
    明白了吧?
      

  2.   

    1.对于Reference, 有两种,一种是EJB Reference 和 EJB LOCAL Reference 。它是用来引用在你当前的BEAN 所要用到的别的BEAN。
    2。JNDI name 也就是HOME 接口的一个别名,为了实现网络的透明,可以把JNDI的别名和它的对象用键值的方式(象HASHTABLE)存放在JNDI 树上,这样不管你的EJB在那个机器上,只要找到这个别名,就可以找到对应的对象了。
      

  3.   

    如果EJB在另外一台机器上,需要指定机器的IP吗?
      

  4.   

    jndi name属于jndi命名空间,遵循结构化命名规范,具体的格式有名称服务器决定。
    EJB Reference就是jndi的logical name,EJB容器使用它们来调用EJB组件的home接口。你可以把它们看成是jndi name的别名,由组件开发人员在web.xml文件中指定。这样客户程序可以使用简单的名字来调用ejb组件,省去了使用jndi name所必须的复杂步骤。
      

  5.   

    TO  daquan198163(大权)如果EJB在另外一台机器上,需要指定机器的IP吗?***********************************************
    当然要了,如果是同一种EJB服务器,比如是WEBLOGIC 这间访问好办,这样写就可以了:        properties = new Properties();
            properties.put(Context.INITIAL_CONTEXT_FACTORY,
                           "weblogic.jndi.WLInitialContextFactory");
            properties.put(Context.PROVIDER_URL, EJBSERVERURL);
            properties.put(Context.SECURITY_PRINCIPAL, EJBUSERNAME);
            properties.put(Context.SECURITY_CREDENTIALS, EJBPASSWORD);        Context context = new InitialContext(properties);        YOURHome home = (YOURHome ) context.lookup(
                "YOURRemote");如果要是访问其它的服务器,比如WEBLOGIC 访问 JBOSS 的EJB,我这样试的,理论可以,但没有成功:        properties = new Properties();
            properties.put(Context.INITIAL_CONTEXT_FACTORY,
                           "org.jnp.interfaces.NamingContextFactory");
            properties.put(Context.PROVIDER_URL, "tangb:8080");
            Context context = new InitialContext(properties);^_^
      

  6.   

    谢谢大家!
    我在TheServerSide.com上也发了同样的帖子。大家可以参考一下:
    http://www.theserverside.com/news/thread.tss?thread_id=24679#115247