jboss1.7_在JBoss 7中使用HA Singleton

jboss1.7

jboss1.7

前一段时间,我不得不更改Quartz Scheduler的标准集群行为,并使其能够在不同步数据库的情况下工作。 当然,有很多选择可以做到这一点,但是由于我是简单性的忠实拥护者,我决定使用标准的Spring @Scheduled配置,并且完全跳过了这一级的集群问题。 这个想法只是在计划方法的开头调用“检查我是否在主节点上”方法。 唯一的问题是如何编写这种方法。 选择是使用JBoss HA Singleton功能。 它在JBoss 7.x中可用,但是缺乏文档迫使进行了一些实验……太好了!

我们需要做的第一件事是提供适当的依赖关系,其中包含一些重要的类。 当然,请记住正确的版本(这里我使用的是7.1.1.Final,因为它在公共存储库中可用,并且所有下一个版本的7都需要手动构建)。

<dependency>
  <groupid>org.jboss.as</groupid>
  <artifactid>jboss-as-clustering-singleton</artifactid>
  <version>7.1.1.Final</version>
  <scope>provided</scope>
</dependency>

现在是时候进行一些编码了! 让我们从包含将要安装到应用程序服务器中的服务的类开始。 它的作用是设置主机状态标志,并通过简单的静态方法将其公开。

包com.stackholder.jboss.ha;

import org.jboss.msc.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.util.concurrent.atomic.AtomicBoolean;

public class MasterStatusHaSingleton 
    extends AbstractService<Serializable> {

  private static final Logger LOGGER = 
      LoggerFactory.getLogger(MasterStatusHaSingleton.class);

  private static AtomicBoolean masterStatus = 
      new AtomicBoolean(false);

  @Override
  public void start(StartContext startContext) {
    LOGGER.info("MasterStatusHaSingleton started");
    masterStatus.set(true);
  }

  @Override
  public void stop(StopContext stopContext) {
    LOGGER.info("MasterStatusHaSingleton stopped");
    masterStatus.set(false);
  }

  public static boolean isMaster() {
    return masterStatus.get();
  }
}

现在我们需要编写将准备好的服务安装到容器中的类。

package com.stackholder.jboss.ha;

import org.jboss.as.clustering.singleton.SingletonService;
import org.jboss.msc.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HaSingletonActivator implements ServiceActivator {

  private final static Logger LOGGER =
      LoggerFactory.getLogger(HaSingletonActivator.class);

  public static final ServiceName SINGLETON_SERVICE_NAME =
      ServiceName.JBOSS.append("ha", "singleton");

  @Override
  public void activate(ServiceActivatorContext context) 
      throws ServiceRegistryException {
    LOGGER.info("HaSingletonActivator will be installed");

    MasterStatusHaSingleton srv = new MasterStatusHaSingleton();
    SingletonService singleton = 
        new SingletonService(srv, SINGLETON_SERVICE_NAME);

    singleton.build(new DelegatingServiceContainer(
        context.getServiceTarget(),context.getServiceRegistry()))
        .setInitialMode(ServiceController.Mode.ACTIVE).install();
    LOGGER.info("HaSingletonActivator installation SUCCESSFUL");
  }
}

请记住,JBoss 7使用的是OSGi,因此我们必须告诉应用程序服务器我们将在应用程序中使用哪些模块。 最简单的方法是将配置添加到war或jar插件中:

<configuration>
  <archive>
    <manifestentries>
      <dependencies>
        org.jboss.msc,org.jboss.as.server,
        org.jboss.as.clustering.singleton
      </dependencies>
    </manifestentries>
  </archive>
</configuration>

太好了-差不多完工了! 几乎。 我们要做的最后一件事是在JBoss配置中激活适当的模块。 只需编辑standalone-full-ha.xml文件(或您当然使用的其他配置),然后将以下模块添加到ee子系统中:

<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>

最后,您可以执行服务器并享受新的酷功能。

参考: Java(B)Log博客上的JCG合作伙伴Jakub Kubrynski在JBoss 7中使用HA Singleton

翻译自: https://www.javacodegeeks.com/2013/09/using-ha-singleton-in-jboss-7.html

jboss1.7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值