高影响力的Web层群集, 第二部分: 用JavaSpaces构建 - 编程入门网
JSCart 与 CartSessionManager 之间的分工是明确的。 JSCart 维护 GUI 并对所有需要 的会话数据使用 CartSessionManager 。 CartSessionManager 用 JavaSpaces 联网共享内 存实现了其 API -- 客户是看不到它的。这意味着 CartSessionManager 不知道数据是如何 包含在会话中的。会话细节对于 CartSessionManager 来说是不透明的。这使原子读-修改- 写循环变的实现变得有些困难了,因为: 只有 CartSessionManager 知道如何读和写共享内存 只有 JSCart 知道如何有效地修改会话 在代码中,读-修改-写是在一个名为 com.ibm.devworks.javaspace.PrepReadModifyWrite 的接口帮助下实现的。清单 2 显示了 这个接口的定义: 清单 2. PrepReadModifyWrite 接口
高影响力的Web层群集, 第二部分: 用JavaSpaces构建(6)时间:2011-04-16 IBM Sing Li在这个接口中只有一个方法,称为 afterRead() 。 当 JSCart 需要执行读-修改-写操作时,它调用 CartSessionManager 对象的 readModifyWrite() 方法,传递一个实现了 PrepReadModifyWrite 接口的对象(在我们的例 子里,就是 JSCart 类本身)。 当用户用 GUI 向购物车中添加货物时,由 JSCart 发出这个调用。它是在 itemOrdered () 方法中处理的,如清单 3 所示: 清单 3. itemOrdered() 方法中的读-修改-写
这使事务中的 CartSessionManager 可以自动: 执行 JavaSpaces take 操作 用 PrepReadModifyWrite 接口的 afterRead() 方法向 JSCart 返回不透明的会话以进行 修改 用修改后的数据执行 JavaSpaces write 操作 seed 空间的需要 在 JavaSpaces 的当前规范中,没有已知的一组 n 个客户可靠地合作以在空间中 “seed”共享 singleton 项的一般性方法。这就是为什么会有一个用 SessionSeeder 类实现的会话 seed 实用程序的原因。这个工具在任何客户启动之前将初始 会话项写入空间。在概念上,我们可以在联网的内存初始化以共享或者映射要共享的区域时 看到这一点。 用分布式共享内存测试 JSCart 我们可以用以下步骤试一试这个版本的 JSCart : 1.在 code\jini2 目录中启动 Jini 和 JavaSpaces 环境,在 code\jini2 目录中,键入 startup(保证遵循每一个目录中的所有 README.TXT 中的指示来设置系统)。 2.用 scripts 目录中的 seedspc.bat 批处理文件运行会话 seed 实用程序。在代码目录中,键入 scripts\seedspc(参阅侧栏“ seed 空间的需要”有关 seed 空间的更多信息)。 3.在 scripts 目录中,运行 runcart.bat 批处理文件以执行 JSCart 的两个或者更多实例,在 code 目录中,键入 scripts\runcart。 如果需要从源代码编译为二进制文件,在 code\src 目录中使用 compile.bat 批处理文件。 JSCart 只使用了一个共享会话以使它保持简单和容易观察。在生产方案中,通常都有多 个会话项,每一个会话项可以独立修改。还会需要一个单独的共享项以保持所有会话 ID。 现在试着在第一个购物车中添加货物。这相当于让添加货物请求进入第一台服务器。注意 两个购物车看上去不同步,类似于图 5: 图 5. 显示的 JavaSpaces 购物车看上去不同步 高影响力的Web层群集, 第二部分: 用JavaSpaces构建(7)时间:2011-04-16 IBM Sing Li不过,如果我们现在在第二个服务器/购物车上 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |