一点粗浅的认识,与 hzhstar (云)  兄探讨:
1.虽然EJB在Naming.lookup("hello")的时候没有指定服务器IP,但在构造Naming对象的时候是要指定的,通常像下面这样:
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://211.34.59.6:7001");
Context Naming = new InitialContext(properties);
当然,这样做跟RMI的调用没太大的区别了,把服务位置写死在了代码中----但这跟ejb 号称的服务透明原则相背,而且上面的代码不可能用在cluster中实现load balance,所以另一种做法是把服务器ip写在jndi.properties中放到classpath下,这样做可能在部署期指定服务,移植性很好.2.EJB是基于RMI-IIOP的,而RMI-IIOP实现了RMI的一个子集而已.如果你注意过,应该知道EJB的Remote和home接口都间接继承自java.rmi.Remote,这使的ejb得意借用RMI的分布式特性.要说EJB跟RMI的区别,我觉得可以用一句话说:EJB spec要求把服务定位,分布式事务等底层操作都放到应用服务器中实现了,可以让开发人员避开底层的实现细节,专注与business logic的开发.

解决方案 »

  1.   

    同意楼上的
    jndi可以通过context指定服务器地址
      

  2.   

    太感谢lzl123(潜龙)大哥了,
    你为我解开了困惑!因为我最近要把一个原来用java rmi的分布式程序改作用ejb实现,
    对一些两者区分要比较清醒认识!我还有些问题需要请教你,
    能否留一下您的email?
      

  3.   

    [email protected]
    我最近经常泡在csdn上,有问题我也可以看得到:)
      

  4.   

    lzl123(潜龙) 大哥:
    你帮我看一下那篇文章,已发!
      

  5.   

    当然,这样做跟RMI的调用没太大的区别了,把服务位置写死在了代码中----但这跟ejb 号称的服务透明原则相背,而且上面的代码不可能用在cluster中实现load balance,所以另一种做法是把服务器ip写在jndi.properties中放到classpath下,这样做可能在部署期指定服务,移植性很好.
    lzl123(潜龙) 兄弟,我按照你的方法,将jndi.properties放在classpath下,但是就是的不到里面的信息啊,能否给小弟发一个使用例子,感激不尽!!!