1、Distributed Travel Reservation System(Part)任务描述n用JAVA建立一个分布式的应用程序以实现一个简单的旅行预订系统,分为三个阶段:n1.实现一个简单的资源管理器(Resource Manager,一个具有固定的表和操作集的非常简易的数据库系统),用来支持并发事务的ACID性质(原子性、一致性、独立性、持久性);n2.实现一个工作流程控制器(Workflow Controller)和一个事务管理器(Transaction Manager),用来在多个资源管理器(Resource Managers)之间实现分布式事务处理;n3.实现一些扩展功能。n本课程
2、只要求实现第一部分。简易的旅行资源管理器nRM支持并发事务的ACID性质。RM存储着关于航班,出租车,宾馆房间和客户的数据信息。多个客户端通过一个事务处理界面可同时访问这个RM以查询和更新数据。这个RM要保证这些并发事务的执行正确性,即符合ACID性质的要求。nRM存储着下列表:nFLIGHTS(String flightNum,int price,int numSeats,int numAvail)nHOTELS(String location,int price,int numRooms,int numAvail)nCARS(String location,int price,int nu
3、mCars,int numAvail)nCUSTOMERS(String custName)nRESERVATIONS(String custName,int resvType,String resvKey)简易的旅行资源管理器n我们提供了资源管理器(Resource Manager)的标准接口(详见ResourceManager API)。这个接口允许每一个在RM中存储的表中的行被添加、删除和修改。你的工作是为每一个我们提供的接口写出实现程序。事务处理nRM支持事务处理。一个事务调用RM的start()方法来获取一个唯一的事务标识(transaction id)。所有对RM的后续调用都要包括
4、这个事务标识。最后,事务调用commit()或abort()方法结束事务处理。并发控制n并发控制是通过两阶段锁(two-phase locking)来实现的。当一个客户端要求查询或更新信息时,你的RM要适当地给相应元组加锁,并在事务正常完成(commits)或异常中断(abort)时释放所有的锁。我们提供了一个锁管理器(lock manager)帮助你完成任务。文件说明npart1.tarnLockManager.javanLockManagerTest.javanClient.javanMakefilenmake.exe文件说明npart1.tar是源码(详见API),有两个文件夹:lock
5、mgr和transaction。nlockmgr实现了LockManager的功能,你不必修改这个包中的内容。ntransaction提供了一些基本的类以帮助你完成工作,它包含了ResourceManager的接口。请注意,你不要修改此文件,你的RM实现要基于名为ResourceManagerImpl的类(以及一些自己定义的新类),这个类提供了ResourceManager的接口。你必须自己编写接口实现代码,以替代目前提供的这个ResourceManagerImpl.java文件中的接口实现代码。文件说明n请注意:用请注意:用LockManager.java文件和文件和LockManagerT
6、est.java文件替换文件替换part1和和part2中的同名文件(因为中的同名文件(因为part1和和part2中的同名文件有错误!)中的同名文件有错误!)client.java是用来做最后测试的。是用来做最后测试的。文件说明nWindows下需要Make工具,即make.exe,需将make.exe放到javac.exe所在目录下。nWindows下需用我们提供的makefile文件替换part1.tar中的makefile文件。而Linux下则不用。基本框架结构(Part I):C/SResourceManagerFlights,Hotels,Cars,CustomersClient
7、1Client 2Client n1.运行环境n操作系统Solaris VM or Windows or Linux(Unix)n开发语言JAVA JDK1.2.2以上版本 (Windows下需要Make工具)1.运行环境nJAVA环境变量设置Set path=;C:j2sdk1.4.0_01binCLASSPATH=.;C:j2sdk1.4.0_01libtools.jar;C:j2sdk1.4.0_01libdt.jar;C:j2sdk1.4.0_01jrelibrt.jar;D:project 1.运行环境n怎样运行javac*.java 生成 *.class 文件make runreg
8、 注册端口号make runserver 运行Server端make runclient 运行Client端Ctrl+c to kill the server2.RMI与ThreadnRMI(Remote Method Invocation)rebind(name,obj)和 bind(name,obj)lookup(name)2.RMI与ThreadnThread run()定义线程体 sleep(long millis)睡眠millis毫秒 start()启动线程3.Lock Manager (lockmgr包)nlock(xid,thingBeingLocked,read|write)t
9、hrows DeadlockException;nunlockAll(xid)4.ITE和TAEnITE-InvalidTransactionException 注意:记录可用的事务号nTAE-TransactionAbortedException e.g.deadlock5.事务可以挂起吗?n挂起-不commit,也不abortn可以挂起,真正的RM用超时机制强制abort此类事务n程序中可以不考虑6.怎样实现多粒度锁?n粒度 tables和tuplesn意向锁(IS和IX)lm不直接提供,但可以实现:read S,S update S,X insert/delete X,X7.读/写磁盘n
10、readObject()nwriteObject(Object)e.g.public class FlightsItem implements java.io.Serializable 8.Customers和Reservations表可以合并吗?n可以合并nReservations不含主键,但通常按custName查询nReservations(String custName,List resv)nresv(int resvType,String resvKey)9.测试与异常n测试(Test)shutdown(),dieNow(),dieBeforePointerSwitch(),dieA
11、fterPointerSwitch()9.测试与异常n异常处理 InvalidTransactionException,TransactionAbortedException,DeadlockException IOException和RemoteException可以暂时不考虑10.原子性的实现10.原子性的实现nShadow思想成果提交n两实验分组相同n每一小组最后提交:n系统设计报告n程序演示报告n小组各成员的任务分工n源程序(需要详细注释,注明所使用的JDK版本)提交方式nftp:/202.38.79.95,“分布式数据库实验”目录下n用户名:addb 密码:addb06n该目录只有上传权限,请先在本地将所要提交的报告和程序放在一个目录中,目录使用小组成员学号命名,如SA06011001&002&003&004,然后上传该目录到FTP n各阶段成果和程序均在最后一起提交n提交截止日期:2007年1月20日参考文献n分布式数据库系统及其应用n数据库系统导论nJava2 API 大全nJava编程思想谢 谢!