Clustered Singleton mit Wildfly?

Ich versuche ein einfaches Clustered zu erstellenSingleton auf Wildfly 8.2. Ich habe 2 Wildfly-Instanzen konfiguriert, die in einer eigenständigen Clusterkonfiguration ausgeführt werden. Meine App wird für beide bereitgestellt und ich kann problemlos darauf zugreifen.

Meine Clustered-EJB sieht folgendermaßen aus:

@Named
@Clustered
@Singleton
public class PeekPokeEJB implements PeekPoke {

    /**
     * Logger for this class
     */
    private static final Logger logger = Logger
            .getLogger(PeekPokeEJB.class);

    private static final long serialVersionUID = 2332663907180293111L;

    private int value = -1;

    @Override
    public void poke() {
        if (logger.isDebugEnabled()) {
            logger.debug("poke() - start"); //$NON-NLS-1$
        }

        Random rand = new SecureRandom();
        int newValue = rand.nextInt();
        if (logger.isDebugEnabled()) {
            logger.debug("poke() - int newValue=" + newValue); //$NON-NLS-1$
        }

        this.value = newValue;

        if (logger.isDebugEnabled()) {
            logger.debug("poke() - end"); //$NON-NLS-1$
        }
    }

    @Override
    public void peek() {
        if (logger.isDebugEnabled()) {
            logger.debug("peek() - start"); //$NON-NLS-1$
        }

        if (logger.isDebugEnabled()) {
            logger.debug("peek() - value=" + value); //$NON-NLS-1$
        }

        if (logger.isDebugEnabled()) {
            logger.debug("peek() - end"); //$NON-NLS-1$
        }
    }
}

... und ich habe einen sehr einfachen RESTful-Service geschrieben, mit dem ich diese Methoden über den Browser aufrufen kann ...

@Path("/test")
@Named
public class TestRS extends AbstractRestService {
    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(TestRS.class);

    @Inject
    private PeekPoke ejb = null;

    @GET
    @Path("/poke")
    public void poke() {
        if (logger.isDebugEnabled()) {
            logger.debug("poke() - start"); //$NON-NLS-1$
        }

        this.ejb.poke();

        if (logger.isDebugEnabled()) {
            logger.debug("poke() - end"); //$NON-NLS-1$
        }
    }

    @GET
    @Path("/peek")
    public void peek() {
        if (logger.isDebugEnabled()) {
            logger.debug("peek() - start"); //$NON-NLS-1$
        }

        this.ejb.peek();

        if (logger.isDebugEnabled()) {
            logger.debug("peek() - end"); //$NON-NLS-1$
        }
    }
}

Ich kann beide @ anrufpeek undpoke Methoden von einer einzelnen Wildfly-Instanz und erhalten den erwarteten Wert. Wenn ich jedoch versuche, poke von einer Instanz aus aufzurufen und von einer anderen zu spähen, sehe ich, dass die Werte nicht über die EJBs repliziert werden.

Ich hatte den Eindruck, dass ein Clustered-Singleton den Wert von '@ replizieren würdvalue 'auf beiden Anwendungsservern, wobei derselbe Wert bereitgestellt wird, unabhängig davon, auf welchem Host das @ erstellt wurpeek Anruf von. Ist das nicht richtig? Fehlt mir noch etwas, das noch zu diesem Code hinzugefügt werden muss?

Ich würde mich über jede Hilfe freuen, die du mir geben kannst! Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage