2016-10-24 61 views
0

我在域中配置了两个Wildfly服务器,并且我需要制作一个与HA一起运行的单例。我只需要它在一台服务器上运行,如果该服务器出现故障,它应该在从服务器上启动。 我正在使用defult配置,并且只在WAR中创建了“/META-INF/singleton-deployment.xml”。 当我部署WAR时,它会在两台服务器上启动!不仅在一个。什么不见​​了?我是否需要在domain.xml中编辑某些内容?Wildfly 10.1.0 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!")); 
    } 
} 


} 
+0

包还没有忘记? – igilfanov

回答

2

得到的回答在https://stackoverflow.com/a/27956003/653069

按照EJB 3.1规范,该@Singleton只有每个JVM和不是每个群集。

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

尽管如此,您可以使用JBoss特定的方式。看一下cluster-ha-singleton quickstart - EAP 7.0,它也应该可以在WildFly 10.x上运行。

相关问题