8

我一直在 jboss 中使用 deploy-hasingleton 文件夹作为 6,这允许我创建一个用于控制来自集群节点的业务信息请求的单例 bean。这些方法是同步的,目的是控制节点之间的并发(相同的数据不能在不同的节点)。

现在我正在迁移到 Jboss 7,并且由于那个 deploy-hasingleton 文件夹消失了,我一直在关注官方示例:

问题是这些例子太琐碎了,我不明白在哪里可以放置业务逻辑方法。所以我试图把这个逻辑放在SingletonService中,它实现了:Service、MyInterface

我已将 getValue 方法修改为以下内容:

@Override
    public MyInterface getValue() throws IllegalStateException,
            IllegalArgumentException {

        return this;
    }

在客户端:

@Override
    public List<Long> myMeth(Long arg1, int arg2) {
        LOGGER.log("loadGroups() is called()");
        ServiceController<?> service = CurrentServiceContainer.getServiceContainer().getService(
                GroupDistributorService.SINGLETON_SERVICE_NAME);

        if (service != null) {
            return ((MyInterface ) service.getValue()).getMyMethod(arg1, arg2);
        } else {
            throw new IllegalStateException("Service '" + GroupDistributorService.SINGLETON_SERVICE_NAME + "' not found!");
        }
    }

我怀疑这是正确的方法。其次,这似乎在包含主单例服务的节点中工作。但是在其他节点中,它在调用单例服务时会锁定,并且我会超时。

4

1 回答 1

1

几个月前,我发布了关于在 Jboss 7 中使用 HASingleton 的博客文章: http ://www.kubrynski.com/2013/07/using-ha-singleton-in-jboss-7.html 希望它会有所帮助。确保您启用了集群模式:

<subsystem xmlns="urn:jboss:domain:ee:1.0">
  <global-modules>
    <module name="org.jboss.msc" slot="main">
    <module name="org.jboss.as.clustering.singleton" slot="main">
  </global-modules>
</subsystem>

并且你坚持使用 osgi 系统,通过添加你的 pom.xml(到 jar/war 插件)这样的配置:

<configuration>
  <archive>
    <manifestentries>
      <dependencies>
        org.jboss.msc,org.jboss.as.server,
        org.jboss.as.clustering.singleton
      </dependencies>
    </manifestentries>
  </archive>
</configuration>
于 2014-01-04T15:52:50.513 回答