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

时间:2010-04-28 09:16:06

标签: java java-ee weblogic service-locator

在J2EE应用程序中,我们在weblogic中使用EJB2。

为了避免浪费时间构建初始上下文并查找EJB Home界面,我正在考虑Service Locator Pattern

但是在网上进行了一些搜索之后,我发现即使这种模式经常被推荐用于InitialContext缓存,也会对EJB Home缓存有一些负面看法。

问题:

  • 缓存EJB Home查找结果是否安全?
  • 如果我的群集节点不再有效,会发生什么?
  • 如果我在不刷新服务定位器缓存的情况下安装新版本的EJB会发生什么?

3 个答案:

答案 0 :(得分: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值控制,记录为here,默认为true

What will happen if I install a new version of the EJB without refreshing 
the service locator's cache ?

我自己没有尝试过这样的改变。但是,我猜你的构建/部署的一部分,你的服务定位器类也会被重新部署,同时改变你的EJB - 从而进行新的查找?

如果您的客户端在更改EJB期间不受影响,那么当您在其上调用方法时,缓存的EJBHome将返回陈旧的引用。因此,您必须强制刷新客户端。

答案 1 :(得分:4)

  

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

  

如果我的群集会发生什么   节点不再有用吗?

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

  

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

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

请注意,EJB3中的@EJB注入有效地鼓励了家庭缓存。 (虽然,诚然,它也允许SFSB缓存,即使这显然不正确,所以也许@EJB不是我声称的最佳支持: - ))。

答案 2 :(得分:0)

  

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

一旦您的应用程序上线,新安装的频率应远低于EJBHome的请求 因此,您的关注点和关注点应该是频繁的实时操作,而不是瞬态开发操作 在必要时将因无效缓存的能力考虑在您的设计中。