爲了學習,我是EJB3的新手,我將服務器端的EJB3作爲客戶端 - 服務器應用程序來實現棋盤遊戲Risk。其目的是多個用戶共同登錄並玩遊戲。目前,我正在考慮使用JSF作爲前端。EJB3客戶端回調?
有多個實例,其中由某些客戶端「A」的動作需要導致一些其它客戶端「B」被通知。例如。如果A攻擊B所擁有的國家,則B需要知道它,例如,考慮擲出多少骰子以及他們是否想玩牌。
我有一個@Stateless
會話bean caled PlayBean
一個名爲attack()
和defend()
方法,暴露或者由@WebService
或@Remote
接口。如果玩家A調用attack()
,我需要通知受到攻擊的玩家B,以便B可以決定用什麼參數調用defend()
。具體而言,這相當於A的託管bean調用PlayBean,然後PlayBean調用回B的託管bean。我如何執行這個會話bean到託管bean回調? (一旦我可以'進入'管理bean,從那裏我可以看到JSF的服務器推送功能直接向用戶提供)
我的直覺是讓頁面bean提供一個回調對象作爲參數到會話bean ......但這是否以EJB3的方式工作?
@Stateless
public class PlayBean implements Play {
@Override
public void attack(OccupiedTerritory from, OccupiedTerritory to, int battalions, Set<Leader> leader) {
int attackDice = battalions;
Die die = new Die(6); // TODO read number of sides from cfg
Iterator<Leader> leaderIt = leader.iterator();
int[] roll = new int[attackDice];
for (int i = 0; i < attackDice; i++) {
int bonus = leaderIt.hasNext() ? leaderIt.next().getAttackBonus() : 0;
roll[i] = die.roll(bonus);
}
Arrays.sort(roll);
Player victim = to.getOccupier(); // ...but how do I nudge this player (NOT the player that invoked this method) to act, i.e. to choose how many defence dice to use? I need to get a reference to "victim"'s JSF managed bean.
}
謝謝EdH--這幫助我重新思考了一下我的問題;我已經在上面編輯過了。我缺少的關鍵是如何從一個會話bean'備份'到一個JSF託管bean ......而不是實際調用會話bean的同一託管bean,而是一個用於不同用戶的託管bean。我希望我編輯的問題現在更完整。 – womblbombl