论坛首页 Java企业应用论坛

为什么EJB3.0里面没有了home接口

浏览 3631 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-12  
这个问题迷惑了我很久,EJB2.0里面实现Home接口的类是从JDNI里面获取的,然后用来创建一个EJB的实例,这个实例应该是实现了这个EJB接口的RMI Stub,很容易理解。
但是在EJB3.0里面取消了这个接口,从JDNI查找的结果不是Home类,而直接是一个EJB的实例,代码如下:

	InitialContext context = new InitialContext();
	Cart cart = (Cart) context.lookup("CartBean");


注:Cart是一个Stateful的SessionBean.
如果这个Cart跟2.0一样也是一个RMI Stub的话,那么所有从JNDI查找出来的类应该是连接到同一个Skeleton的,这样的话应该是所有的Client得到的EJB状态是一样的。。。
但事实不是,每个客户端查找出来的EJB实例互相的状态是没有影响的,这个到底是为什么呢?
   发表时间:2007-12-12  
EJB3就是为了简化这些东西而开发出来的。并不是没有了,而是被屏蔽了。
你不用担心拿到的EJB对象的生存状态,这些统一由容器管理。只要是在JNDI中注册了这个名字,那么就可以拿来直接用。
你说的这个Bean是有状态SessionBean,当然不会有互相影响的问题。
0 请登录后投票
   发表时间:2007-12-12  
我个人觉得还是有必要去了解这些东西的,要不然Robin也不会费力的去写EJB实现原理了。EJB这个东西虽然屏蔽了很多东西,EJB虽然屏蔽了很多东西,比如分布式和事务,但是如果要使用好EJB还是要了解他到底是如何实现的。很多时候对EJB的滥用就是因为对这个东西不够了解造成的。
0 请登录后投票
   发表时间:2007-12-12  
对于上面的问题我有一些思路了,虽然不同的客户端拿到是连接到同一个Skeleton的Stub但是在远程方法调用的时候会有一个唯一的id生成来标示不同的客户端,这样就实现了不同客户端的状态的隔离。就像http的Session id一样。
不知道我说得对不对
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics