《分布式数据库实验》由会员分享,可在线阅读,更多相关《分布式数据库实验(29页珍藏版)》请在金锄头文库上搜索。
1、Distributed Travel Reservation System,(Part ),任务描述,用JAVA建立一个分布式的应用程序以实现一个简单的旅行预订系统,分为三个阶段:1. 实现一个简单的资源管理器(Resource Manager,一个具有固定的表和操作集的非常简易的数据库系统),用来支持并发事务的ACID性质(原子性、一致性、独立性、持久性);2. 实现一个工作流程控制器(Workflow Controller)和一个事务管理器(Transaction Manager),用来在多个资源管理器(Resource Managers)之间实现分布式事务处理;3. 实现一些扩展功能。本
2、课程只要求实现第一部分。,简易的旅行资源管理器,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
3、, int numCars, int numAvail)CUSTOMERS(String custName)RESERVATIONS(String custName, int resvType, String resvKey),简易的旅行资源管理器,我们提供了资源管理器(Resource Manager)的标准接口(详见ResourceManager API)。这个接口允许每一个在RM中存储的表中的行被添加、删除和修改。你的工作是为每一个我们提供的接口写出实现程序。,事务处理,RM支持事务处理。一个事务调用RM的start( )方法来获取一个唯一的事务标识(transaction id)。所有
4、对RM的后续调用都要包括这个事务标识。最后,事务调用commit( )或abort( )方法结束事务处理。,并发控制,并发控制是通过两阶段锁(two-phase locking)来实现的。当一个客户端要求查询或更新信息时,你的RM要适当地给相应元组加锁,并在事务正常完成(commits)或异常中断(abort)时释放所有的锁。我们提供了一个锁管理器(lock manager)帮助你完成任务。,文件说明,part1.tarLockManager.javaLockManagerTest.javaClient.javaMakefilemake.exe,文件说明,part1.tar是源码(详见API)
5、,有两个文件夹:lockmgr和transaction。lockmgr实现了LockManager的功能,你不必修改这个包中的内容。transaction提供了一些基本的类以帮助你完成工作,它包含了ResourceManager的接口。请注意,你不要修改此文件,你的RM实现要基于名为ResourceManagerImpl的类(以及一些自己定义的新类),这个类提供了ResourceManager的接口。你必须自己编写接口实现代码,以替代目前提供的这个ResourceManagerImpl.java文件中的接口实现代码。,文件说明,请注意:用LockManager.java文件和LockManag
6、erTest.java文件替换part1和part2中的同名文件(因为part1和part2中的同名文件有错误!)client.java是用来做最后测试的。,文件说明,Windows下需要Make工具,即make.exe,需将make.exe放到javac.exe所在目录下。Windows下需用我们提供的makefile文件替换part1.tar中的makefile文件。而Linux下则不用。,基本框架结构(Part I) :C/S,Flights, Hotels, Cars, Customers,1.运行环境,操作系统Solaris VM or Windows or Linux (Unix)
7、开发语言JAVA JDK1.2.2以上版本 (Windows下需要Make工具),1.运行环境,JAVA环境变量设置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.运行环境,怎样运行javac *.java 生成 *.class 文件make runreg 注册端口号make runserver 运行Server端make runclient 运行Client端Ctrl
8、+ c to kill the server,2.RMI与Thread,RMI (Remote Method Invocation) rebind(name, obj) 和 bind(name, obj) lookup(name),2.RMI与Thread,Thread run() 定义线程体 sleep(long millis) 睡眠millis毫秒 start() 启动线程,3.Lock Manager (lockmgr包),lock(xid, thingBeingLocked, read|write) throws DeadlockException ;unlockAll(xid),4.
9、ITE和TAE,ITE - InvalidTransactionException 注意:记录可用的事务号TAE - TransactionAbortedException e.g. deadlock,5.事务可以挂起吗?,挂起 - 不commit,也不abort可以挂起,真正的RM用超时机制强制abort此类事务程序中可以不考虑,6.怎样实现多粒度锁?,粒度 tables和tuples意向锁(IS和IX) lm不直接提供,但可以实现: read S,S update S,X insert/delete X,X,7.读/写磁盘,readObject() writeObject(Object)
10、e.g. public class FlightsItem implements java.io.Serializable ,8.Customers和Reservations表可以合并吗?,可以合并Reservations不含主键,但通常按custName查询Reservations(String custName, List resv)resv(int resvType, String resvKey),9.测试与异常,测试(Test) shutdown(), dieNow(), dieBeforePointerSwitch(), dieAfterPointerSwitch(),9.测试与异
11、常,异常处理 InvalidTransactionException, TransactionAbortedException, DeadlockException IOException和RemoteException可以暂时不考虑,10.原子性的实现,10.原子性的实现Shadow思想,成果提交,两实验分组相同每一小组最后提交:系统设计报告程序演示报告小组各成员的任务分工源程序(需要详细注释,注明所使用的JDK版本),提交方式,ftp:/202.38.79.95 ,“分布式数据库实验”目录下用户名:addb 密码:addb06该目录只有上传权限,请先在本地将所要提交的报告和程序放在一个目录中,目录使用小组成员学号命名,如SA06011001&002&003&004,然后上传该目录到FTP 各阶段成果和程序均在最后一起提交提交截止日期:2007年1月20日,参考文献,分布式数据库系统及其应用数据库系统导论Java2 API 大全Java编程思想,谢 谢!,