我正試圖在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子系統的有效緩存。如果沒有定義特定的緩存,則假定緩存容器的默認緩存。此緩存用作註冊表,其中的節點可以提供給定的服務,並且通常使用**複製緩存**配置。 –