快速业务通道

高影响力的Web层群集, 第二部分: 用JavaSpaces构建 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
事务中止 了,那么 JavaSpaces 操作的任何效果(即改变空间内容的 write 和 take)都会回滚并且其 他客户将不会知道曾经试图进行过这些操作。

在多个 JavaSpaces 中执行的操作可以结合到一个事务中,这些 JavaSpaces 可以包括在 地理上分散的实现。在这个外壳下,事务管理器协调参与 JavaSpaces 服务实例之间的分布 式两阶段提交协议。

事务语义极大地简化了对部分失败模式的处理,因为从概念上已经将它消除了。通过结合 项 m 在空间 A 中的 take 和空间 B 中的 write,我们就创建了一个最基本的事务操作。如 果传输时有任何错误,那么项 m 不会从空间 A 中删除。如果传输成功了,那么我们知道 m 肯定是在空间 B 中并从已空间 A 中删除了。

现在我们已经牢固掌握了 JavsSpaces 的概念,就可以在我们的 Web 层群集问题上应用 它们了。在上一篇文章中,我们了解到可以跨越一组分布式 servlet 容器进行内存中应用程 序会话复以制构建可伸缩的、高度可用的群集。使用 JavaSpaces,我们就可以不用费心关注 如何处理实际的会话复制细节。相反,我们将注意力放到会话共享的更高级语义上。

使用分布式共享内存进行会话共享

使用 JavaSpaces,我们就可以创建一个模拟共享内存系统的跨越网络的软件。这个概念 使我们可以跨越空间中的所有客户使用共享会话信息。图 2 展示了会话共享:

图 2. 用分布式共享内存实现共享的会话

高影响力的Web层群集, 第二部分: 用JavaSpaces构建 - 编程入门网

在图 2 中,应用程序会话信息是在分布式共享内存中维护的。每一个应用服务器对共享 的会话的任何改变都可以被所有服务器实例看见。所有服务器从同一个(联网共享的)内存位 置读取共享的会话信息。

支持容错的主机/备用机配置

我们现在准备用 JavaSpaces 创建一个分布共享内存语义。在这个初步方案中,我们在一 个事务中结合了一个 take 操作和一个 write 操作以创建一个 update 操作。清单 1 是实 际的 Java 代码,可以在提供的源代码中找到它:

清单 1. updateSession() 方法

public boolean updateSession(Serializable sess) {     if ((spaceService == null) || (transactionService == null))       return false;     Transaction transact = null;     try {       Transaction.Created tc =        TransactionFactory.create(transactionService,       TRANSACTION_LEASE);       transact = tc.transaction;     } catch (Exception ex) {       ex.printStackTrace();       return false;     }     try {       SessionEntry tmpEntry = (SessionEntry) spaceService.take(         new SessionEntry(SESSION_KEY, null),         transact, JavaSpace.NO_WAIT);       if (tmpEntry == null) {         transact.abort();         return false;       }       spaceService.write(new SessionEntry(SESSION_KEY, sess),       transact, LONG_LEASE);       transact.commit();     } catch (Exception ex) {       ex.printStackTrace();       try {         transact.abort(); }       catch (Exception ex2) {         ex2.printStackTrace();       }       return false;     }     return true;   }

高影响力的Web层群集, 第二部分: 用JavaSpaces构建(4)

时间:2011-04-16 IBM Sing Li

在这段代码中,事务事件 take 和 write 组合成为原子(参阅侧栏“ 我们为什么使 用事务?”中的解释)。注意 write 操作不对从空间中取出的数据进行操作。相反,它 写

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