读书人

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

发布时间: 2012-10-29 10:03:53 作者: rapoo

为什么EJB3.0里面没有了home接口
这个问题迷惑了我很久,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实例互相的状态是没有影响的,这个到底是为什么呢? 1 楼 魔力猫咪 2007-12-12 EJB3就是为了简化这些东西而开发出来的。并不是没有了,而是被屏蔽了。
你不用担心拿到的EJB对象的生存状态,这些统一由容器管理。只要是在JNDI中注册了这个名字,那么就可以拿来直接用。
你说的这个Bean是有状态SessionBean,当然不会有互相影响的问题。 2 楼 solospider 2007-12-12 我个人觉得还是有必要去了解这些东西的,要不然Robin也不会费力的去写EJB实现原理了。EJB这个东西虽然屏蔽了很多东西,EJB虽然屏蔽了很多东西,比如分布式和事务,但是如果要使用好EJB还是要了解他到底是如何实现的。很多时候对EJB的滥用就是因为对这个东西不够了解造成的。 3 楼 solospider 2007-12-12 对于上面的问题我有一些思路了,虽然不同的客户端拿到是连接到同一个Skeleton的Stub但是在远程方法调用的时候会有一个唯一的id生成来标示不同的客户端,这样就实现了不同客户端的状态的隔离。就像http的Session id一样。
不知道我说得对不对

读书人网 >软件架构设计

热点推荐