?? 分布式對話服務器的管理(2).txt
字號:
作者:運氣
email: webmaster@chinaspx.com
日期:7/4/2001 1:41:17 PM
Mnemosyne使用三種界面表達其狀態。
1、CommonContext界面存貯Mnemosyne的全部信息。每個Mnemosyne都有一個CommonContext對象的實例,以便read、write、take Memory對象時在各個方法之間進行同步。在write或者take說Memory對象時,CommonContext對象既定義“silent”方法也定義“loud”方法,當在不進行事件通知的情況下添加對象時,就會用到“silent”方法。例如,當Mnemosyne對象接收到WriteRemoteEvent(向一個遠程Mnemosyne對象寫對象的告示。)事件后,如果它也希望向CommonContext對象寫另一個對象,它就無需通知其他的遠程CommonContext對象,最初的Mnemosyne已經通知了它們,因此這種寫是通過調用CommonContext對象的silentWrite()方法“靜悄悄”地完成的。而“loud”方法則在有對象第一次被添加時將這一事件的詳細信息通知所有被調用的監聽對象。
2、Transaction對象用于在read、write、take Memory對象時進行分布式事務處理,這意味在Mnemosyne對象上可能會有多步驟的操作。
3、TransactionContext界面管理分布式事務,使得系統可以中止或提交一個事務。
保持Mnemosynes的同步是通過synchronize()和notify()這二個由 Mnemosyne定義的方法完成的。synchronize()可以使一個本地的Mnemosyne與其他Mnemosyne的Vector保持同步(這些Mnemosyne可以是本地的或遠程的,為簡明起見,我們假定它們是遠程的。)下面是synchronize()的一個例子:
public void synchronize(Vector Mnemosynes)
throws RemoteException, TransactionException
{
file:// MatchAllMemory對象是一個有效類
file://對任何二個Memory對象進行比較
MatchAllMemory matchAllMemory = new MatchAllMemory();
file:// 從Primary中獲得所有Memory
Mnemosyne Mnemosyne = (Mnemosyne) Mnemosynes.firstElement();
Vector allMemories = Mnemosyne.readAll(matchAllMemory,null);
commonContext.silentWriteAll(allMemories);
// 注冊進行發送、接收事件
Enumeration enumeration = Mnemosynes.elements();
while(enumeration.hasMoreElements())
{
Mnemosyne nextMnemosyne = (Mnemosyne) enumeration.nextElement();
file://注冊接收通知
nextMnemosyne.addTakeRemoteEventListener(this, matchAllMemory);
nextMnemosyne.addWriteRemoteEventListener(this, matchAllMemory);
file:// 注冊發送通知
addTakeRemoteEventListener(nextMnemosyne, matchAllMemory);
addWriteRemoteEventListener(nextMnemosyne, matchAllMemory);
}
// ...
}
本地的Mnemosyne對象讀取Vector中第一個Mnemosyne對象的所有Memory對象,并采用“silent”方法將它們寫到其CommonContext對象中。然后,本地Mnemosyne將自己作為TakeRemoteEventListener和WriteRemoteListener添加到所有的遠程Mnemosyne中,這就意味著任何對遠程Mnemosynes的take或read操作都將調用本地Mnemosyne的notify()方法。最后,本地Mnemosyne將遠程Mnemosyne添加到其TakeRemoteEventListeners和WriteRemoteListeners隊列中,確保對本地Mnemosyne的write或take操作都會通知遠程Mnemosyne。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -