2010-04-28 63 views
4

在J2EE应用程序中,我们在weblogic中使用EJB2。J2EE/EJB +服务定位器:缓存EJB Home查找结果是否安全?

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

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

问题:

  • 它是安全的高速缓存EJB首页查找结果?
  • 如果我的群集节点不再工作会发生什么?
  • 如果我安装新版本的EJB而不刷新服务定位器的缓存会发生什么?

回答

4

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

是。

如果我的群集 节点没有工作,会发生什么?

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

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

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

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

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

恕我直言内J2EE的服务定位的目的就是缓存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 ? 

我还没有尝试过自己做这样的改变。但是,我猜是作为构建/部署的一部分,您的Service Locator类也会随着对EJB的更改而重新部署 - 从而重新进行查找?

如果在更改EJB期间客户端不受影响,那么当您调用EJBHome上的方法时,缓存的EJBHome将返回一个陈旧的引用。所以你将不得不强制客户端被刷新。

0

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

一旦您的应用程序上线,新的安装应该比请求EJBHome的频率低得多。
因此,您的关注和关注应该在于频繁的实时操作,而不是暂时的开发操作。
将您的设计因素考虑在必要时使缓存无效。