岳阳企业网站建设,软件开发主要是干什么的,如何登陆建设银行信用卡网站,睢县网站制作公司不久前#xff0c;我不得不更改Quartz Scheduler的标准集群行为#xff0c;并使其能够在不同步数据库的情况下工作。 当然#xff0c;有很多选择可以做到这一点#xff0c;但是由于我是简单性的忠实拥护者#xff0c;因此我决定使用标准的Spring Scheduled配置#xff0c… 不久前我不得不更改Quartz Scheduler的标准集群行为并使其能够在不同步数据库的情况下工作。 当然有很多选择可以做到这一点但是由于我是简单性的忠实拥护者因此我决定使用标准的Spring Scheduled配置并且完全跳过了这一级的集群问题。 这个想法是在计划方法的开头只是调用“检查我是否在主节点上”方法。 唯一的问题是如何编写这种方法。 选择是使用JBoss HA Singleton功能。 它在JBoss 7.x中可用但是缺少文档迫使进行了一些实验……太好了 我们需要做的第一件事是提供适当的依赖关系其中包含一些重要的类。 当然请记住正确的版本这里我使用的是7.1.1.Final因为它在公共存储库中可用并且所有下一个版本的7都需要手动构建。 dependencygroupidorg.jboss.as/groupidartifactidjboss-as-clustering-singleton/artifactidversion7.1.1.Final/versionscopeprovided/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 AbstractServiceSerializable {private static final Logger LOGGER LoggerFactory.getLogger(MasterStatusHaSingleton.class);private static AtomicBoolean masterStatus new AtomicBoolean(false);Overridepublic void start(StartContext startContext) {LOGGER.info(MasterStatusHaSingleton started);masterStatus.set(true);}Overridepublic 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);Overridepublic 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插件中 configurationarchivemanifestentriesdependenciesorg.jboss.msc,org.jboss.as.server,org.jboss.as.clustering.singleton/dependencies/manifestentries/archive
/configuration 太好了-快完成了 几乎。 我们要做的最后一件事是在JBoss配置中激活适当的模块。 只需编辑standalone-full-ha.xml文件或您当然使用的其他配置然后将以下模块添加到ee子系统中 subsystem xmlnsurn:jboss:domain:ee:1.0global-modulesmodule nameorg.jboss.msc slotmainmodule nameorg.jboss.as.clustering.singleton slotmain/global-modules
/subsystem 最后您可以执行服务器并享受新的酷功能。 参考 JavaBLog博客上的JCG合作伙伴 Jakub Kubrynski 在JBoss 7中使用HA Singleton 。 翻译自: https://www.javacodegeeks.com/2013/09/using-ha-singleton-in-jboss-7.html