分布式对话服务器的管理(2)
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。
下一篇:分布式对话服务器的管理(3)
↓相关文章:
- · 分布式对话服务器的管理(3)
- · 分布式对话服务器的管理(5)
- · J2EE配置指南(1)
- · J2EE配置指南(2)
- · XML和J2EE的组合技术 (转)
- · Weblogic6.0部署和配置WEB应用程序(5)
- · 简析J2EE应用程序数据库类设计模式
- · 转贴:利用EJB创建CRM系统
- · 说明
- · 创建部署的xml文件和bat文件
- · 建立ejb各个接口和bean的大致框架的文件
- · to: jeru, 我对nucleus不清楚, 在此谈谈对ejb的感受
- · EJB核心技术及其应用(再续)
- · Weblogic6.0安装及配置(1)
- · Weblogic6.0 SP1的安装及配置
- · TOMCAT全攻略
- · J2EE建议的学习路线(一篇不错的谈个人学习方法的文章)
- · EJB的事务处理属性
- · JBUILDER6.0配置WEBLOGIC6.1全攻略
- · tomcat应用程序的手工装载和3种自动装载
- · WebLogic6.0中Ejb的使用
- · Weblogic6.0上Connection Pool、DataSource的创建与使用
- · Running The Tomcat 4.0(英文,关键部分译成了中文。)
- · Weblogic6.0部署和配置WEB应用程序(1)
- · Weblogic6.0部署和配置WEB应用程序(3)
- · Tomcat自动reload新的class的插件
- · 在Java中使用DES算法
- · WebLogic Server 性能调优
- · WebLogic Domain的定义,翻译出来大家交流,第一次作赏个脸:]
- · 手把手教您如何搭建WAP应用开发环境
- · J2ME三种低级用户界面事件处理技术比较
- · J2ME程序开发新手入门九大要点
- · J2ME游戏开发学习之用setClip分割图片
- · J2ME小tip:setClip方法的使用
- · 彻底解决J2ME中的中文问题
- · 在J2ME中实现欢迎界面(附源代码)
- · 怎样优化J2ME程序当中的paint()函数
- · J2ME中查表法使用三角函数
- · J2ME应用用户体验核对表(翻译)
- · 在J2ME手机程序开发中使用颜色
- · J2ME学习过程中的一点心得整理
- · 浅谈即时战略游戏J2ME中应用
- · 我的J2ME编程练习(7)——Canvas2
- · J2ME相关名词解释及概念阐述
- · 我的J2ME编程练习(4)——StringItem

