我正试图在Wildfly 8.2上创建一个简单的集群Singleton
。我配置了2个Wildfly实例,运行在独立的集群配置中。我的应用程序已部署到两者,并且我可以毫无问题地访问它。Clustered Singleton使用Wildfly?
我的集群EJB是这样的:
@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$
}
}
}
...我已经写了一个非常简单的RESTful服务,让我打电话给通过浏览器这些方法...
@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$
}
}
}
我可以从单个Wildfly实例调用peek
和poke
方法,并获得期望值。但是,如果我试图从一个实例中调用poke,并且从另一个实例中调用poke,我会发现这些值不会跨EJB复制。
我的印象是,一个集群单例将在两个应用程序服务器之间复制'value
'的值,无论我从哪个主机调用peek
来提供相同的值。这是不正确的?有什么我遗漏,仍然需要添加到此代码?
我会很感激任何帮助,你可以给我!谢谢!
费德里科嗨,你和文件为说10 wildfly,“如果在其上部署主动停止或失败的节点,部署将自动另一个节点上启动”我想知道,当一个节点停止或失败并且另一个节点启动时,新节点是否将数据保存在旧节点中? – xxlali
@xxlali根据文档:单例策略的'cache-container'和cache属性必须引用来自Infinispan子系统的有效缓存。如果没有定义特定的缓存,则假定缓存容器的默认缓存。此缓存用作注册表,其中的节点可以提供给定的服务,并且通常使用**复制缓存**配置。 –