从不同的集群成员服务器调用的Weblogic无状态会话方法

时间:2013-12-12 19:45:11

标签: ejb weblogic cluster-computing

我的环境是Solaris上的Weblogic 10.3.5。 EJB是版本3,Bean类中有anotation。很抱歉由于代码对我来说很新,而且他们还有部署描述符来为另一个客户端调用生成ejb2客户端代码,所以它不是直截了当的。

我有一个无状态会话bean部署到一个集群,它有2个服务器成员,说它们是member1和member2。 会话bean部署为可群集,因为它在anotation中: homeIsClusterable = Constants.Bool.TRUE

这就是我的独立Java客户端查找和调用EJB方法的方法:

private void testBean(){

    bean.methodA();
    bean.methodB(); 
     }

在提供者URL中,我只指定一个服务器成员的提供者URL:         env.put(Context.PROVIDER_URL,“t3:// member1:7005”);         env.lookup( “远程#the.bean.qulified.remoteinterface”) 上面的Jndi名称使用“映射名称+限定远程接口类名”,映射名称在anotation中定义。

现在的问题是,我发现,在member1中调用了bean.methodA(),并且在member2上调用了methodB(),我从每个服务器成员的日志中找到了这个。所以它始终是这样的,member1 log只显示来自methodA的调试信息,member2只显示来自methodB的调试信息。

所以这是我的概念性问题 - 这有可能吗?是否应该仅在member1上调用上述两种方法?我知道当您通过home接口查找时,您可能从任一服务器获取bean,但在这种情况下,ejb3查找不会通过home接口(就像在ejb2中我们得到一个home然后调用create方法)但是直接得到一个远程对象。

这导致了问题,因为我们的methodB依赖于methodA(methodA正在做一些清理工作,然后方法重新初始化缓存),我们需要在每个集群成员上执行此操作。 这只是额外信息,但请从概念角度关注上述问题。

1 个答案:

答案 0 :(得分:0)

来自文档:

当home-is-clusterable为True时,可以从群集中的多个WebLogic Server部署EJB。对部署此bean的服务器之间进行主存根调用的负载平衡,如果托管bean的服务器无法访问,则调用会自动故障转移到托管该bean的另一台服务器。

我相信即使你明确只连接到一个成员也是如此。这在Replica-Aware Home部分有一些非常好的信息:

http://www.informit.com/articles/article.aspx?p=101737&seqNum=8

这或多或少是集群的重点......集群看起来好像是客户端的单个服务器实例。