簡體   English   中英

Wildfly 10.1.0 Singleton不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM