Java Wildfly 10.1.0 Singleton不';行不通

Java Wildfly 10.1.0 Singleton不';行不通,java,singleton,wildfly,high-availability,wildfly-10,Java,Singleton,Wildfly,High Availability,Wildfly 10,我在一个域中配置了两个Wildfly服务器,我需要创建一个使用HA运行的单例。我需要它只在一台服务器上运行,如果该服务器出现故障,它应该在从属服务器上启动。 我使用的是defult配置,我在WAR中只创建了“/META-INF/singleton deployment.xml”。 当我部署WAR时,它会在两台服务器中启动!不仅在一个方面。少了什么?是否需要在domain.xml中编辑某些内容 My singleton只将文本写入日志文件和控制台,仅用于测试: import java.net.In

我在一个域中配置了两个Wildfly服务器,我需要创建一个使用HA运行的单例。我需要它只在一台服务器上运行,如果该服务器出现故障,它应该在从属服务器上启动。 我使用的是defult配置,我在WAR中只创建了“/META-INF/singleton deployment.xml”。 当我部署WAR时,它会在两台服务器中启动!不仅在一个方面。少了什么?是否需要在domain.xml中编辑某些内容

My singleton只将文本写入日志文件和控制台,仅用于测试:

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!"));
    }
}


}
答复是

根据EJB3.1规范,
@Singleton
仅针对每个JVM,而不是针对每个集群

在容器分布在多个虚拟机上的情况下,每个应用程序将为每个JVM提供一个单例bean实例

不过,您可以使用JBoss特定的方式。看看-EAP7.0版本,它应该也适用于WildFly 10.x

根据EJB3.1规范,
@Singleton
仅针对每个JVM,而不是针对每个集群

在容器分布在多个虚拟机上的情况下,每个应用程序将为每个JVM提供一个单例bean实例


不过,您可以使用JBoss特定的方式。看看-EAP 7.0,它也应该在WildFly 10.x上工作。

包没有忘记?包没有忘记?