[英]Wildfly 10.1.0 Singleton doesn't work
我在域中配置了两个Wildfly服务器,并且需要创建一个与HA一起运行的单例。 我需要它仅在一个服务器上运行,并且如果该服务器发生故障,则应在从属服务器中启动它。 我使用的是defult配置,我只在WAR中创建了“ /META-INF/singleton-deployment.xml”。 当我部署WAR时,它将同时在两台服务器中启动! 不仅合而为一。 什么东西少了? 我是否需要在domain.xml中进行编辑?
我的单例仅将文本写入日志文件和控制台,仅用于测试:
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Singleton
public class TesteAPP {
final Logger logger = LogManager.getLogger(TesteAPP.class);
@Schedule(second = "*/1", minute = "*", hour = "*", persistent = false)
public void executaTarefa() {
try {
logger.log(Level.INFO, "Tarefa executada com sucesso! Nome da máquina: {} Endereço da máquina: {}",
InetAddress.getLocalHost().getHostName(),
InetAddress.getLocalHost().getHostAddress());
System.out.println(String.format("Tarefa executada com sucesso! Nome da máquina: %s Endereço da máquina: %s",
InetAddress.getLocalHost().getHostName(),
InetAddress.getLocalHost().getHostAddress()));
} catch (UnknownHostException e) {
logger.log(Level.ALL, "Tarefa executada com sucesso!");
System.out.println(String.format("Tarefa executada com sucesso!"));
}
}
}
在https://stackoverflow.com/a/27956003/653069中得到了答复
根据EJB 3.1规范,@ @Singleton
仅针对每个JVM,而不针对每个集群。
如果容器分布在许多虚拟机上,则每个应用程序将为每个JVM具有一个Singleton的bean实例。
不过,您可以使用JBoss特定的方式。 看一看具有集群功能的快速入门 -EAP 7.0,它也可以在WildFly 10.x上运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.