快速业务通道

分布式对话服务器的管理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
:// 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。

当添加或删除一个Memory对象时,经过同步的本地Mnemosyne对象需要对所有的Mnemosyne进行更新,可以通过notify()方法来完成这一任务。无论是发生write或take事件,Mnemosyne都会针对发生的事件调用适当的监听者的notify()方法。在synchronize()方法中,我们把本地Mnemosyne注册为所有远程Mnemosyne的take和write事件的监听者,一旦远程Mnemosyne上有take和write事件发生,就会调用本地 Mnemosyne的notify()方法。然后,本地Mnemosyne必须对事件作出反应。下面是Mnemosyne如何与远程Mnemosyne进行同步的例子:

public void notify(RemoteEvent remoteEvent) throws RemoteException { // 回写被写的内存,但无需通知所有的Mnemosyne if(remoteEvent instanceof WriteRemoteEvent) { WriteRemoteEvent wre = (WriteRemoteEvent) remoteEvent; commonContext.silentWrite(wre.getMemory()); } file:// 取被写的Memory,但无需通知所有的Mnemosyne if(remoteEvent instanceof TakeRemoteEvent) { TakeRemoteEvent tre = (TakeRemoteEvent) remoteEvent; commonContext.silentTake(tre.getMemory()); } }

现在已经创建了一个控制所有memory对象的Mnemosyne,它自动与远程Mnemosyne保持同步,如果任何一个远程Mnemosynes得到或失去一个Memory对象时,都可以使它保持最新的状态。

要通过Mnemosyne管理HTTP对话,servlet需要创建HttpSession的实例(从HttpServletRequest中使用getSession()),在实现Memory对象的类中封装对话,并调用Mnemosyne对象的write()方法把封装类写到一个Mnemosyne中。

通过调用write()方法,封装着对话的Memory对象沿着网络传送给Mnemosyne,并通知远程机器。当对象被写到Mnemosyne时,WriteRemoteEvent被发送给在Mnemosyne上注册的所有WriteRemoteEventListeners,这样,所有其他的Mnemosynes就能将新的对象作为Mnemosynes添加到它们的对话信息存贮库中。

要对存贮的对话进行查询,servlet调用read()方法查找包含对话的Memory对象,如果Mnemosyne找到了要查找的对象,则该对象通过RMI返回到servlet服务器。

最后,要删除对话,servlet就会

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号