Wildfly 10.1.0 Singleton не работает
Я настроил два сервера Wildfly в домене, и мне нужно создать синглтон, работающий с HA. Мне нужно, чтобы он работал только на одном сервере, и если этот сервер выходит из строя, он должен быть запущен на подчиненном сервере. Я использую конфигурацию по умолчанию и я только создал "/META-INF/singleton-deployment.xml" в моей WAR. Когда я развертываю 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!"));
}
}
}
1 ответ
Ответили в /questions/2274936/klasternyij-singlton-s-ispolzovaniem-wildfly/2274944#2274944
Согласно спецификации EJB 3.1, @Singleton
это только для JVM, а не для кластера.
В тех случаях, когда контейнер распределен по многим виртуальным машинам, каждое приложение будет иметь один экземпляр компонента Singleton для каждой JVM.
Тем не менее, вы можете использовать JBoss специфическим способом. Взгляните на краткий старт cluster-ha-singleton - EAP 7.0, который должен работать и на WildFly 10.x.