Singleton em cluster usando o Wildfly?

Estou tentando criar um simples agrupadoSingleton no Wildfly 8.2. Eu configurei 2 instâncias do Wildfly, executando em uma configuração em cluster autônoma. Meu aplicativo está implantado nos dois e posso acessá-lo sem problemas.

Meu EJB em cluster fica assim:

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

... e escrevi um serviço RESTful muito simples para que eu chame esses métodos pelo 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$
        }
    }
}

Eu sou capaz de chamar tanto opeek epoke métodos de uma única instância do Wildfly e obtenha o valor esperado. No entanto, se eu tentar chamar poke de uma instância e espiar de outra, vejo que os valores não estão sendo replicados nos EJBs.

Fiquei com a impressão de que um singleton em cluster replicaria o valor de 'value'nos dois servidores de aplicativos, fornecendo o mesmo valor, independentemente de qual host eu crieipeek chamada de. Isso não está correto? Falta algo que ainda precise ser adicionado a esse código?

Agradeço qualquer ajuda que você possa me dar! Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion