在J2EE应用程序中,我们在weblogic中使用EJB2。
为了避免浪费时间构建初始上下文并查找EJB Home界面,我正在考虑Service Locator Pattern。
但是在网上进行了一些搜索之后,我发现即使这种模式经常被推荐用于InitialContext缓存,也会对EJB Home缓存有一些负面看法。
问题:
答案 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的请求 因此,您的关注点和关注点应该是频繁的实时操作,而不是瞬态开发操作 在必要时将因无效缓存的能力考虑在您的设计中。