2016-10-24 6 views
0

У меня два сервера Wildfly, настроенных в домене, и мне нужно сделать синглтон, который работает с HA. Мне нужно, чтобы он запускался только на одном сервере, и если этот сервер терпит неудачу, он должен быть запущен на подчиненном сервере. Я использую defult конфигурацию, и я только создал «/META-INF/singleton-deployment.xml» в своей WAR. Когда я развертываю 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 и не для кластера.

В случае, когда контейнер распределен по многим виртуальным машинам, каждое приложение будет иметь один экземпляр компонента Singleton для каждой JVM.

Тем не менее, вы можете использовать специальный способ JBoss. Взгляните на cluster-ha-singleton quickstart - EAP 7.0, который также должен работать на WildFly 10.x.