快速业务通道

高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
的转发。 OrderListener 接口用于每当一个 Buy 按钮被点击时转发一个来自 CatalogUI 组件的 OrderEvent。图 9 显示了事件转发动作:

图 9. JGCart 中的事件流

高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网

在图 8 中 GUI 的下半部分有一个 OrderList 组件。该组件是一个 JPanel, 其中带有 一个 受管JTable ,这个JTable在任何时候都会显示购物车的内容。受管 JTable 有一个定 制的模型 (包含显示的数据),就像由我们的 OrderTableModel 类实现的一样。该定制模型 确保我们在会话中――在 CartState 类的一个实例中――维护的状态与受管 JTable 中显示 的状态同步。通过使用 OrderTableModel.changeData() 方法,我们可以在任何时候更新模 型中的数据 (并显示这些数据) 。

编程 GUI 和连接事件流

在清单 2 中 (以红色高亮显示),我们可以看到如何通过 JGCart 类的 CreateUIandPrepChannel() 和 addOrderItem() &#160&#160 方法将 CatalogUI 组 件连接到 OrderList 组件。

注意, addOrderItem() 方法不是由于 Buy按钮点击事件而直接被调用的。相反,点击 Buy 按钮会产生一个 到群集的所有成员 (包括发送消息的成员) 的AddItemMessage 消息的 广播。实际上, addOrderItem() 方法是在该消息的处理期间,通过 MessageListener 接口 (由 JGCart 类实现)的 receive() 方法调用的。这将有效地复制购物车中的所有更改到该组 的所有成员。

如果您对所有 GUI 类的详细操作感兴趣,请参见 参考资料部分,以下载源代码。

清单 2. 在 JGCart 中创建 GUI 及转发事件private void CreateUIandPrepChannel() {   mainFrame=new JFrame();    ...    subPanel = new JPanel();    subPanel.setLayout(new GridLayout(2,1));    <span class="rboldcode">catUI = new CatalogUI();    catUI.addOrderListener(this);    orderModel = new OrderTableModel(Arrays.asList(data));</span>    ordList = new OrderList(orderModel);    subPanel.add(catUI);    subPanel.add(ordList);    mainFrame.getContentPane().add("Center", subPanel);    ...      }  ...  private void addOrderItem(String desc, Integer price) {  <span class="rboldcode">   cstate.addOrderItem(desc, price);    orderModel.changeData(cstate);</span>> }

高影响力的Web层群集,第一部分: 利用JavaGroups扩展(10)

时间:2011-04-16 IBM Sing Li

测试可视化购物车

要观察该应用的会话复制行为,请执行一下步骤:

通过使用 run.bat 批处理文件 (在代码分布的 src 目录下),在您的系统上启动 JGCart 的一个实例。您需要编辑 run.bat 文件,以指定 JavaGroups 库位于哪里。

在同一 LAN 上的另一台 PC 上启动另一个实例 (如果您不是工作在 LAN 上,则在同一台 PC 上启动另一个实例)。

在第一个实例上,单击目录,然后单击几件商品的 Buy按钮。注意,会话状态更改马上被 复制到其他机器。

图 10 演示了由&#160 JGCart 表示的两个复制的会话。注意它们之间如何保持同步 。

图 10. 复制的 JGCart 会话

高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网

如果您在 LAN 上不止有两台机器,您就可以容易地将该实验群集扩展到更多的机器―― 只要在这些机器上启动 JGCart 的新实例。

现在假设该购物车会话是运行在一个应用服务器内,而该服务器硬件崩溃了。通过关闭第 一个 JGCart 实例,我们可以模拟这一场景。当然,很容易看到,通过发送请求到会话的第 二个实例,我们可以继续购物。以群集的术语来说,这是一个 fail-over。在群集中的多台 服务器之间的硬件崩溃事件中幸免于难的能力,确保了服务的高可靠性。

实际上,即使没有

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号