- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式旅行预订系统.doc
分布式旅行预订系统
??必备知识
具备数据库系统原理或与之相当的知识是完成本课程作业的前提。假定每一个学生都已经了解了数据库系统的基本实现技术,包括对事务功能性的一个基本了解(例如,ACID性质)。
此项课程作业,建议每个学生都具备一些用JAVA语言编程的经验,并且对并发程序的抽象概念,比如线程、互斥很熟悉。此项作业要求学生具备JAVA线程编程(JAVA THREADS)和JAVA 远程方法调用(JAVA RMI)的知识,但并不要求对JAVA语言的其他方面,比如图形用户界面工具箱(GUI TOOLKITS)、基于JAVA的数据库互连(JDBC)、服务器端嵌入程序(SEVLETS)及网页内嵌小程序(APPLETS)等知识很了解。
?课程作业简介
作业是由几个步骤组织起来的,这些步骤递归地增加程序的成分和系统结构。我们给每个成分都提供了通用的接口,此外,我们还提供了一个基本的检测代码用来检测基本的功能。我们还将提供若干基本的已建好的模块,比如锁管理器(LOCK MANAGER)。
实验评分将大体根据学生提交的自动进行的测试程序,一个演示程序以及一个具体的设计文档来评定。
?任务描述
这个任务的目标是用JAVA建立一个分布式的应用程序以实现一个简单的旅行预订系统。为了完成此任务,你将要经历三个阶段:
阶段一 实现一个简单的资源管理器(Resource Manager,一个具有固定的表和操作集的非常简易的数据库系统),用来支持并发事务的ACID性质(原子性、一致性、独立性、持久性);
阶段二 实现一个工作流程控制器(Workflow Controller)和一个事务管理器(Transaction Manager),用来在多个资源管理器(Resource Managers)之间实现分布式事务处理;
??简易的旅行资源管理器(Simple Travel Resource Manager)
实现一个简单的资源管理器(Resource Manager or RM),用来支持并发事务的ACID性质(原子性、一致性、独立性、持久性)。具体的说,这个RM存储着关于航班,出租车,宾馆房间和客户的数据信息。多个客户端通过一个事务处理界面可同时访问这个RM以查询和更新数据。这个RM要保证这些并发事务的执行正确性,即符合ACID性质的要求。
从概念上讲,这个RM存储着下列表:
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的一个主键(primary key)。
假定在同一个地方的所有的宾馆房间价格也一样;location是表HOTELS的一个主键。
假定在同一个地方的所有的出租车价格也一样;location是表 CARS的一个主键。
custName是表CUSTOMERS的一个主键。
表RESERVATIONS包含那些和客户预订的航班、出租车或宾馆房间相应的条目,具体的说,resvType指预订的类型(1为预订航班,2为预订宾馆房间,3为预订出租车),而resvKey是表RESERVATIONS的一个主键。
在表FLIGHTS中,numAvail表示指定航班上未被预订的座位数。对于一个给定的航班(flightNum),数据库一致性的条件之一是,表RESERVATIONS中所有预订该航班的条目数加上该航班的剩余座位数必须等于该航班上总的座位数。这个条件对于表CARS和表HOTELS同样适用。
资源管理器(Resource Manager)的标准接口(详见ResourceManager API)。这个接口允许每一个在RM中存储的表中的行被添加、删除和修改。你的工作是为每一个我们提供的接口写出实现程序。
RM支持事务处理。一个事务调用RM的start( )方法来获取一个唯一的事务标识(transaction id)。所有对RM的后续调用都要包括这个事务标识。最后,事务调用commit( )或abort( )方法结束事务处理。一个典型的客户端事务可能象以下这样:(当然,在现实中,你要检查返回值及获取异常。你也可以查看Client.ja
文档评论(0)