- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式旅行预定系统
项目表述:
项目目标是用java或VC组建一个分布式应用系统,它用来实施一个简单的旅行预定系统。
要求有两个阶段来实施系统:
PART 1:做一个简单的资源管理器(RM)(例如:一个简单的数据库系统包括一组固定的表和操作集合)支持具有ACID属性的并发事务。
PART 2:实现一个工作流管理器(WC)和一个事务管理器(TM),能在各个资源管理者(RM)之间实现分布式事务处理。
PART 3:实现这些基础项目的外部增设功能。
PART 1:简单旅行预定资源管理器
实现一个简单的资源管理器(RM),支持具有ACID属性的并发交互事务。特别的,资源管理器储存关于:飞机票,租车,旅馆房间和旅客的数据。多客户机通过接口界面并发访问资源管理器来查询和更新数据。要求资源管理器保证这些并发事务执行的正确性,例如,在有ACID要求的事务中。
概念上,资源管理器要储存下列的表:
FLIGHTS (String flightNum, int price, int numSeats, int numAvail)HOTELS (String location, int price, int numRooms, int numAvail)CARS (String location, int price, int numCars, int numAvail)CUSTOMERS (String custName)RESERVATIONS(String custName, int resvType, String resvKey)
为了更简单,我们给出了下列假设:
只有一个航班,并且在给定的航班上所有的座位都是相同的价钱;flightnum是FLIGHTS的主键。
所有的旅馆房间在同一个地方的都是相同的价钱:location是HOTELS的主键。
custNum是CUSTOMERS的主键。
RESERVATIONS表包括一个对应的项目表,这张表由用户对航班,汽车,旅馆的预定信息组成,如下:(1代表航班,2代表旅馆房间,3代表汽车),并且resvKey是这张保留项目表的主键。
在FLIGHTS表中,numAvail是一个给定航班可以预定到的座位号。对一个给定的flightNum,数据库的一个一致性情况是:预订表中一个航班的总的预定数加上空闲的座位数,必须等于航班上的座位总数。对于汽车和旅馆房间表也是一样的情况。
我们要提供资源管理器的应用程序界面(Resource Manager API).在其他的事情中,界面要允许每个资源管理器储存的表进行属性的添加,删除,和更改操作。
我们的工作是要写我们提供的界面的应用程序。
资源管理器支持交互事务。一个事务通过调用资源管理器的start()程序来从中获取一个唯一的事务id。所有对RM的子调用都将包含这个事务id。最后,事务调用commit()或者abort()。
一个典型的用户事务可能如下:
当然在现实中我们会检验返回值并且发现一些例外,同样可以将Client.java看作一个简单的例子。
Int xid=rm.start();//如果足够便宜并且有剩余的座位
If(rm.queryFlightPrice(xid,”347”)300 rm.queryFlight(xid,”347”)0)
{
Rm.reserveFlight(xid,”John”,”347”);
}
Rmit(xid);
并发控制是基于两阶段锁协议的。特别的,当一个用户请求查询或更新信息时,资源管理器要保证适当的加锁,并且当一事务提交或者撤销后要释放掉所有的锁。我们提供了LockManager来帮助完成这项任务。这个LockManager支持下面的应用程序界面:
Lock(xid,thingBeingLocked,read/write)Lock(xid,foo,read);//读 foo
Lock(xid,foo,write)
应用程序界面提供的程序库,要包含两个包:lockmgr和transaction.lockmgr包要提供基本的lockMananger类.我们不需要更改这个包里的值。在事务包中有基本的类,用来启动应用程序。它包括资源管理器的界面。提醒一下,我们也不必去更改这个文件。我们的资源管理器的应用程序文件要放在名叫ResourceManagerImpl的一个类中。这个类中还可以放我们必要时定义的新类。这个现有的ResourceManagerImpl.java中还有一些没有用的应用程序我们要先删除。
事务的说明中还有一个用户的简单的Client.java。在我们的系统中,我们要写更多的更成熟的用户来测试我们的资源管理器,但是我们并不要求把他们包含到系统中。事实上,我们可以用程序
文档评论(0)