Singleton en clúster con Wildfly?

Estoy tratando de crear un grupo simpleSingleton en Wildfly 8.2. He configurado 2 instancias de Wildfly, ejecutándose en una configuración en clúster independiente. Mi aplicación está implementada en ambos, y puedo acceder a ella sin ningún problema.

Mi EJB agrupado se ve así:

@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$
        }
    }
}

... y he escrito un servicio RESTful muy simple que me permite llamar a estos métodos a través del navegador ...

@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$
        }
    }
}

Puedo llamar a ambospeek ypoke métodos de una sola instancia de Wildfly y obtener el valor esperado. Sin embargo, si intento llamar a poke desde una instancia y miro desde otra, veo que los valores no se replican en los EJB.

Tenía la impresión de que un singleton agrupado replicaría el valor de 'value'en ambos servidores de aplicaciones, proporcionando el mismo valor independientemente del host que hicepeek Llamada de. ¿No es esto correcto? ¿Hay algo que me falta y que aún debe agregarse a este código?

Agradecería cualquier ayuda que me puedan dar! ¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta