设为首页 收藏本站
查看: 940|回复: 0

[经验分享] 为 IBM Lotus Expeditor 创建网络感知应用程序

[复制链接]

尚未签到

发表于 2015-10-4 10:00:50 | 显示全部楼层 |阅读模式
  Lotus Expeditor Client 提供了一种广泛的网络管理框架,可使应用程序具备网络感知功能。它使应用程序能够访问客户机平台的网络状态以及与远端资源的连接性;它也可以将网络状态的变化通知给实现中的应用程序。Lotus Expeditor 网络框架还可以扩展,提供了两个扩展点,应用程序可用这两个扩展点来提供网络故障的定制检测和处理。
  本文展示了 Lotus Expeditor Client 的网络功能,并通过一个详细示例介绍了如何让应用程序具网络感知功能。
  先决条件
  本文需要您对 Java 以及 Eclipse 插件开发有足够的理解。而且还需要您拥有 Lotus Expeditor 的基础知识,且安装过 Lotus Expeditor Toolkit。关于这些主题的更多信息,可以在本文的 “参考资料” 部分找到。

回页首
  示例应用程序
  我们创建了一个简单的应用程序,该应用程序可以详尽地展示 Lotus Expeditor 的网络感知特性。它从一个远端服务器检索遍布全球的 IBM 站点的当前时间。通过在应用程序中启用网络感知特性,就能区分网络故障并确定合适的行为。
  从本文的 “下载” 部分可以下载此示例应用程序,继而跟随 README.txt 的指导来设置该示例并将此项目导入到 Eclipse 工作区。此示例应用程序称为 com.ibm.rcp.time.client,包含 8 个类,如表 2 所列。

表 2. Time client 类
类描述com.ibm.rcp.time.clientActivator.java控制插件生命周期IConnectionStates.java包含连接状态的公共接口TimeBean.java负责将时间返回到用户界面com.ibm.rcp.time.client.perspectiveTimeClientPerspective.java当 IBM time client 应用程序打开时所显示的透视TimeClientView.javatime client UIcom.ibm.rcp.time.client.netawareNetworkConnectivityListener.javacom.ibm.rcp.offline.api.server.INetworkAware 的实现,可侦听到本地网络的连接性的变化ServerConnectivityListener.javacom.ibm.rcp.offline.api.server.INetworkAware 的实现,可侦听到远端服务器的连接性的变化ServerConnectivityMonitor.java对 com.ibm.rcp.net.faults.handler 的扩展,可监视远端服务器的连接性  随着我们进一步启用网络感知特性,会对 com.ibm.rcp.time.client.netaware 包中的这些类有更加详尽地描述。

回页首
  运行和测试应用程序
  在向此应用程序添加进一步的功能性之前,让我们先试着运行一下。为了从工具箱运行此应用程序,打开在项目的 META-INF 文件夹中的 MANIFEST.MF 文件。在 Overview 附签,单击 Testing 部分的 "Launch Client Services Application" 链接,如图 2 所示。

图 2. “Launch Client Services application” 链接

  这会使应用程序在 Lotus Expeditor Client 中启动。输入 Lotus Expeditor Client 密码并选择 Open - IBM Time Client。出现一个视图显示遍布全球的 IBM 站点的当前时间。这些时间都是当前远程检索的。
  接下来,使用 Online/Offline 开关按钮将客户机的状态更改为 Offline。单击 Refresh 按钮。注意 IBM 站点时间也已更新,即便您失去了到 Internet 的连接。在后台,Lotus Expeditor 网络框架会通知应用程序有关的连接丢失。此时,之前所实现的 disconnected() 方法会让 time client 感知到网络状态的更改,而此客户机会从系统时钟计算所显示的时间。
  重获网络连接之后,就会通知侦听程序,而此 time client 则再次会从 Web 服务器检索时间。这可以通过将 Online/Offline 按钮切换成 Online 实现。

回页首
  扩展处理程序扩展点来创建连接性监视器
  网络故障框架提供给开发人员一个 API,此 API 可以分类由应用程序传递给它的网络异常。然后,它通过 handle() 方法将此故障传递给对 com.ibm.rcp.net.faults.handlert 扩展点的所有扩展。每个处理器都会检查此故障,决定它是否是所感兴趣的,如果是,就执行合适的行为。在这种场景中,需要有一个处理程序以便检测与主服务器上下文相关的连接故障并触发 Eclipse Job 来监视远端资源的可用性。但首先,如果丢失了到主服务器的连接,您必须通知该框架。
  com.ibm.rcp.time.client.TimeBean.java 类负责连接到服务器和通过 getTimeFromServer() 方法检索时间。此方法会试图打开指向远端服务器的 URL 对象上的一个流。如果异常在这个打开连接的过程中发生,那么就必须将其通过 DetectAndHandle.detectAndHandle() 方法传递到网络框架。detectAndHandle() 方法接受两个参数:所抛出的那个异常以及抛出异常的上下文。在本例中,上下文就是服务器。这就是负责分类所给出异常并将其传递给处理程序扩展的方法。如下所示的到 detectAndHandle() 的调用放置于 TimeBean.java 中的 getTimeFromServer() 方法的捕获块。

  DetectAndHandle.detectAndHandle(new ConnectException(e.getMessage()), server);

  这些就绪后,当主服务器不可用时,就会通知网络框架。它然后调用用服务器上下文注册的服务器连接性侦听程序中的 disconnected() 方法。随后,应用程序就知道要转换到备用服务器。
  通过扩展处理程序扩展点,可以检测作为 ConnectException 的结果进行分类的故障,而且还可以启动 Eclipse Job 来监视远端服务器的可用性,而无需占用应用程序的主线程。
  创建处理程序的第一步是实现 com.ibm.rcp.net.faults.Handler 接口,如清单 4 所示。这个接口包含一个方法,称为 handle(),它接受 Fault 对象数组。Lotus Expeditor 提供的 com.ibm.rcp.net.faults 插件包含一系列用来描述各种网络错误的 Fault 对象。我们只关心其中的 ConnectFault,原因是它描述了当主服务器不可用时,对应用程序可见的 ConnectException。每个 Fault 对象都包含一个称为 context 的对象。在 detectAndHandle() 方法中传递给网络框架的 context 对象是主服务器的字符串表示。因此,在 handle() 实现(参见清单 4),需要遍历 Fault 对象数组以查找 String 上下文等于主服务器的 ConnectFault。一旦找到,就表示主服务器不可用,需要立即开始监测连接性。请注意,每次检测到网络故障时,都会调用 com.ibm.rcp.net.faults.handler 扩展点的每个扩展内的 handle() 方法。出于这个原因,就有必要确保只在适当的故障发生时才开启连接性监视器。

清单 4. 实现 handle()
//called by the network component when a fault is detected public void handle(Fault[] faults) {  for (int i = 0; i < faults.length; i++) { Fault f = faults; Object context = f.getContext(); if (context != null && f instanceof ConnectFault &&      f.getContext().toString().equals(TimeBean.PRIMARY_SERVER)) {      //start monitor      reconnect(context);      break; } } }

  当为远端资源创建监视器时,最好的做法是扩展 Eclipse Job 框架。这将让监视器运行在其自身的线程内,防止它占用应用程序的主资源。更多信息,请参看 Eclipse Job 框架。
  完成主服务器监视器所需的最后一步是在到远端服务器的连接被恢复时通知 Lotus Expeditor 网络框架。网络感知框架随后会通知所有注册该服务器上下文的侦听程序,包括通过调用 reconnected() 方法已经注册的那些侦听程序。所实现的 reconnected() 方法会将 time client 的网络状态更改为 STATE_CONNECTED 以便让 time client 知道它可以再次从主服务器检索时间。
  要向 Eclipse 框架注册处理程序扩展,必须将如下代码添加到此项目的 plugin.xml 文件,其中的 handlerClass 是实现中的类的名称,而 id 是此处理程序的惟一 ID。参看清单 5。

清单 5. 对 plugin.xml 文件的添加
<extension point="com.ibm.rcp.net.faults.handler">     <handler          handlerClass="com.ibm.rcp.time.client.netaware.ServerConnectivityMonitor"     id="com.ibm.rcp.time.client.handler.1"/> </extension>

  您可以在 com.ibm.rcp.time.client.netaware.ServerConnectivityMonitor.java 查看服务器连接性监视器的完整实现。

回页首
  结束语
  本文带您领略了 Lotus Expeditor Client 的网络框架的细节,描述了如何修改现有的应用程序以为本地和远端网络资源充分利用这些功能。建议您下载和安装此示例并使用它作为指导来帮助您在自己的 Lotus Expeditor 应用程序中启用网络感知特性。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-122439-1-1.html 上篇帖子: IBM-JAVA面试题 下篇帖子: 浪潮之巅读书笔记——IBM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表