我有一种情况,在我的 Web 层中,我执行远程 EJB 查找并缓存初始上下文。现在远程 EJB 部署在 WAS 集群中。所以如果远程 ejb 部署在 server1、server2 和 server3 上,让我们说第一次,指向 server1 的初始上下文被缓存。
在此 server1 关闭但其他服务器仍在运行后。但是因为缓存了初始上下文,所以 ejb 调用失败。
现在简单的解决方案是删除缓存并每次进行新的查找。但这会降低性能。有没有办法在这里两全其美......可靠性和性能?
提供者 URL中的引导服务器列表corbaloc:
仅在InitialContext
构造时使用。在上下文的构建过程中,客户端会获得一个服务器列表,这些服务器可以回答对该上下文的查找,之后只使用该列表。如果提供者 URL 中的引导服务器是集群成员,那么InitialContext
只要至少有一个集群成员在运行,它就会继续工作。因此InitialContext
可以安全地缓存。
请注意,如果提供程序 URL 中的引导服务器不是集群成员,而是节点代理,情况会有所不同。在这种情况下,InitialContext
引用特定于单个节点代理的上下文,并且当该节点代理关闭时查找将失败。即使在提供者 URL 中指定了多个节点代理也是这种情况:在构建过程中选择了一个节点代理,InitialContext
之后选择不会改变。