分布式对话服务器的管理(5)
远程访问Mnemosyne下面我们来讨论在servlet服务器上访问远程Mnemosyne的方法。要在无需特定服务器在线的情况下加载一个包含对话信息的Mnemosyne,需要创建一个FailoverHandler的实例,FailoverHandler利用JDK 1.3中的Proxy API处理对话服务器当机的问题。FailoverHandler把一个代表访问远程对话服务器的RMI URL的字符串数组作为参数,然后,从Proxy类中获取Mnemosyne实例。下面的SessionManager类中的initializeMnemosyne()方法可以显示出这一切是如何完成的:
public static void initializeMnemosyne(String[] rmiURLs)
{
// 设置当机服务器的处理程序
FailoverHandler fh = new FailoverHandler(null, rmiURLs);
// 得到Mnemosyne. 的一个实例
_Mnemosyne =
(Mnemosyne)Proxy.newProxyInstance(Mnemosyne.class.getClassLoader(),
new Class[] { Mnemosyne.class },
fh );
}
如果用Proxy类获取Mnemosyne的实例,所有的方法调用必须通过FailoverHandler的 invoke()方法进行。当有方法访问Mnemosyne时,FailoverHandler将试着调用该方法访问一个远程对象。如果方法调用失败(例如服务器关机),FailoverHandler将从提供给构造器的URL清单中再取得下一个URL,这样就会无缝地转向下一个对话服务器。
// 建立远程加载类的URL清单
public FailoverHandler(Remote delegate, String[] delegateURLS)
{
this.delegateURLS = delegateURLS;
// 如果这个URL无效,则获取下一个有效的URL
try {
this.delegate =
((delegate == null)?getNextValidDelegate():delegate);
} catch (RemoteException ex) {
// 如果发生远程意外错误,则该URL不能使用,向调用者发送一个 //IllegalArgumentException事件
throw new IllegalArgumentException("Remote URLs could not "
+ "be found");
}
}
public Object invoke(Object proxy,
Method method,
Object[] arguments)
throws Throwable
{
while(true)
{
try
{
file:// 尝试对获得的最后一个URL调用被调用的方法
return method.invoke(delegate, arguments);
}
catch(InvocationTargetException invocationTargetException)
{
file://如果获得的URL无效,则取下一个URL
try
{
throw invocationTargetException.getTargetException();
}
catch(RemoteException remoteException)
{
delegate = getNextValidDelegate();
}
}
}
}
file://从构造器中的URL清单中获得下一个URL
protected Remote getNextValidDelegate() throws RemoteException
{
for(int i = 0; i < delegateURLS.length;i++)
{
try
{
return Naming.lookup(delegateURLS[i]);
}
catch(Exception exception)
{
}
}
throw new RemoteException("All lookup failed");
}
当使用FailoverHandler对象时,从一个对话服务器向另一个对话服务器的转换对于调用Mnemosyne的任何用户端机器都是透明的。
下一篇:分布式对话服务器的管理(6)
↓相关文章:
- · 分布式对话服务器的管理(6)
- · 无状态Enterprise JavaBeans的观点
- · NT下安装JSP
- · Weblogic6.0部署和配置WEB应用程序(4)
- · Weblogic6.0部署和配置WEB应用程序(6)
- · 在apusic上部署EJB之HelloWorld,有错误的请指点
- · 企业JavaBeansTM技术介绍 -- 献给不知道EJB为何物的兄弟们
- · 建立ejb各个接口和bean的文件
- · 自己写的玩的东西,通过网络建立一个ejb的框架,并进行weblogic的部署
- · 为什么用ejb?(ejb使用的经典分析,摘)
- · 网友杂谈各种APP SERVER(昨天讨论的总结)
- · EJB核心技术及其应用(转自china-pub,不错的文章)
- · EJB核心技术及其应用(续)
- · Resin服务器的使用(一篇不错的文章,如果想使用resin做服务器建议看看)
- · J2EE or J2SE? JNDI works with both(from javaworld)
- · 走向J2EE,漫长的道路(
- · Jbuilder6+weblogic6.1开发Entity Bean 全攻略
- · 一点经验:apache、tomcat服务的手工安装与卸下
- · 使用weblogic+jb开发配置说明
- · Weblogic 调试手记:Weblogic中使用Servlet
- · Tomcat 4中的ClassLoader
- · WEBLOGIC6.0的一些使用经验(转载)
- · Weblogic6.0部署和配置WEB应用程序(2)
- · Tomcat4的数据库连接池配置〔转贴csdn〕
- · JSP/JAVABEAN+TOMCAT4.0.5+MYSQL组合建站总结
- · weblogic的jsp问题解决方法(转)
- · WebLogic的安装和配置
- · weblogic:Roadmap for Creating a New Domain 好不容易整理出来:]
- · J2ME手机程序开发中的九大注意要点
- · J2ME程序开发全方位基础讲解汇总
- · J2ME游戏开发学习之高效漂亮显示积分
- · J2ME 实现可伸展目录树TreeList
- · Nokia的J2ME扩展API——UI API使用之DeviceControl类
- · 使用J2ME技术实现简单的动画(附代码实现)
- · 在J2ME中实现游戏功能选择界面(附源代码)
- · 如何使用J2ME中的线程
- · J2ME技术入门之一——J2ME程序的开发过程
- · 有关Motorola J2ME开发的几个细节问题
- · 在J2ME手机编程中使用字体
- · J2ME潜艇大战游戏设计与实现
- · J2me开发心得-数组的使用
- · J2ME中随机数字处理全攻略
- · 我的J2ME编程练习(5)——Canvas
- · J2ME中的时间处理全攻略
- · 我的J2ME编程联系(1)——List

