Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 缓存初始上下文时,远程查找ejb失败_Caching_Ejb_Websphere_Lookup - Fatal编程技术网

Caching 缓存初始上下文时,远程查找ejb失败

Caching 缓存初始上下文时,远程查找ejb失败,caching,ejb,websphere,lookup,Caching,Ejb,Websphere,Lookup,在我的web层中,我执行远程EJB查找并缓存初始上下文。现在远程EJB部署在WAS集群中。因此,如果远程ejb跨server1、server2和server3部署,让我们说第一次,那么指向server1的初始上下文将被缓存 在此之后,服务器1关闭,但其他服务器仍在运行。但是由于初始上下文被缓存,ejb调用失败 现在,简单的解决方案是删除缓存,每次都进行新的查找。但这会降低性能。是否有一种方法可以同时兼顾可靠性和性能?只有在构建初始上下文时,才会使用corbaloc:提供程序URL中的引导服务器列

在我的web层中,我执行远程EJB查找并缓存初始上下文。现在远程EJB部署在WAS集群中。因此,如果远程ejb跨server1、server2和server3部署,让我们说第一次,那么指向server1的初始上下文将被缓存

在此之后,服务器1关闭,但其他服务器仍在运行。但是由于初始上下文被缓存,ejb调用失败


现在,简单的解决方案是删除缓存,每次都进行新的查找。但这会降低性能。是否有一种方法可以同时兼顾可靠性和性能?

只有在构建
初始上下文时,才会使用
corbaloc:
提供程序URL中的引导服务器列表。在构建上下文的过程中,客户机将获得一个服务器列表,这些服务器可以回答对该上下文的查找,之后只使用该列表。如果提供程序URL中的引导服务器是群集成员,则只要至少有一个群集成员正在运行,
InitialContext
将继续工作。因此可以安全地缓存
InitialContext


请注意,如果提供程序URL中的引导服务器不是集群成员,而是节点代理,则情况就不同了。在这种情况下,
InitialContext
引用特定于单个节点代理的上下文,当该节点代理关闭时,查找将失败。即使在提供程序URL中指定了多个节点代理,也会出现这种情况:在构建
InitialContext
期间选择了一个节点代理,之后选择不会更改。

您有单独的web和EJB服务器。web服务器如何创建InitialContext()?如果您针对本地服务器进行引导并查找群集上下文,则生成的上下文应跨所有群集成员进行WLM。在创建InitialContext时,我们提供provider_url,provider_url是群集中部署的主机名的逗号分隔字符串。如何创建“集群上下文”?还有什么是WLM?如果您已经指定了一个以逗号分隔的主机/帖子列表,那么我认为您的InitialContext应该已经故障转移了。否则,我认为您可以执行
newinitialcontext().lookup(“cell/clusters/xyz”)
,这与指定集群中服务器的所有主机/端口相同。WLM是工作负载管理,这是一种执行路由/故障切换的技术。故障切换机制在创建initilacontext时生效。在创建并缓存初始上下文之后,如果继续在缓存中使用上下文,则无法利用故障转移机制。因此,如果new InitialContext()返回的缓存初始上下文连接不好,则查找将失败。群集成员和节点代理不相同?如果提供程序url是以逗号分隔的主机名和端口号列表,如何辨别它们是群集成员还是节点代理?通过识别端口上正在侦听的进程。您可以在系统级别(例如,使用
netstat-ltnp
)或通过检查WebSphere管理控制台中的端口来执行此操作。