一点粗浅的认识,与 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.虽然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的开发.
jndi可以通过context指定服务器地址
你为我解开了困惑!因为我最近要把一个原来用java rmi的分布式程序改作用ejb实现,
对一些两者区分要比较清醒认识!我还有些问题需要请教你,
能否留一下您的email?
我最近经常泡在csdn上,有问题我也可以看得到:)
你帮我看一下那篇文章,已发!
lzl123(潜龙) 兄弟,我按照你的方法,将jndi.properties放在classpath下,但是就是的不到里面的信息啊,能否给小弟发一个使用例子,感激不尽!!!