4

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

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

但是在网上搜索了一些之后,我发现即使这种模式经常被推荐用于 InitialContext 缓存,也有一些关于 EJB Home 缓存的负面意见。

问题:

  • 缓存 EJB Home 查找结果是否安全?
  • 如果我的集群节点不再工作会怎样?
  • 如果我安装新版本的 EJB 而不刷新服务定位器的缓存会发生什么?
4

3 回答 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 在集群中是负载平衡的,这将自动允许故障转移到下一个服务器。

此值由home-is-clusterableweblogic-ejb-jar.xml 中的值控制,此处记录的默认值为true.

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

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

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

于 2010-04-28T10:30:38.213 回答
4

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

是的。

如果我的集群节点不再工作会怎样?

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

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

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

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

于 2010-04-28T13:48:16.473 回答
0

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

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

于 2010-04-28T11:10:49.007 回答