J2EE/EJB + 服务定位器:缓存EJB Home查找结果是否安全?

5
在一个J2EE应用程序中,我们正在使用weblogic中的EJB2。
为了避免浪费时间建立初始上下文并查找EJB Home接口,我正在考虑服务定位器模式
但在网上搜索后,我发现即使这种模式经常被推荐用于InitialContext缓存,也有一些负面意见关于EJB Home缓存。
问题:
- 缓存EJB Home查找结果是否安全? - 如果我的集群节点之一不再工作会发生什么情况? - 如果我安装了新版本的EJB而没有刷新服务定位器的缓存会发生什么?
3个回答

4
Is it safe to cache EJB Home lookup result ?
What will happen if one my cluster node is no more working ? 

在我看来,J2EE中ServiceLocator的目的是缓存EJB Home并减少昂贵的JNDI查找。在Weblogic上是安全的,因为默认情况下EJB Home在集群中进行负载平衡,这将自动允许故障转移到下一个服务器。
此值由weblogic-ejb-jar.xml中的home-is-clusterable值控制,文档在此处说明,默认值为true
What will happen if I install a new version of the EJB without refreshing 
the service locator's cache ?

我自己没有尝试过这样的更改。不过,我猜想在您的构建/部署过程中,您的服务定位器类也会随着对EJB的更改而重新部署 - 因此进行新的查找?
如果您的客户端在EJB更改期间不受影响,则缓存的EJBHome将在调用其上的方法时返回过时的引用。因此,您需要强制刷新客户端。

4

缓存EJB主页查找结果是否安全?

是的。

如果我的集群节点不再工作会发生什么?

如果您的服务器配置为集群/WLM,则请求应该无声地故障转移到集群中的另一台服务器。路由信息编码在存根IOR中。

如果我安装新版本的EJB而没有刷新服务定位器的缓存会发生什么?

假设您更新了bean而不是组件或主接口,则一切都可以继续工作。EJBHome实际上是一个无状态会话bean,因此请求可以继续从可用的同一服务器访问,或者在集群中的其他服务器上访问。

请注意,EJB3中的@EJB注入实际上鼓励主页缓存。(尽管,必须承认,它也允许SFSB缓存,即使这显然是不正确的,因此@EJB可能不是我所说支持的最佳方式 :-)).


0
如果我安装了新版本的EJB而没有刷新服务定位器的缓存,会发生什么?
一旦您的应用程序上线,新的安装应该比对EJBHome的请求要少得多。 因此,您的重点和关注应该放在频繁的实时操作上,而不是短暂的开发操作。 在设计中考虑到必要时使缓存失效的能力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接