您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 实验六 Jboss的数据源配置以及事务处理
实验六:Jboss的数据源配置以及事务处理一、实验目的:学习并掌握运用JBoss的JTA机制实现分布式数据库事务处理;二、实验内容:JTA简介:JavaTransactionAPI,JTATransaction是指由J2EETransactionmanager去管理的事务。通过调用UserTransaction接口的begin,commit和rollback方法来完成事务范围的界定,提交和回滚。实现同一事务对应多个的数据库。JBoss简介:JBoss是一个基于J2EE的开放源代码的应用服务器,JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。分布式事务:“分布式事务”是指在多个进程中运行或者涉及到多个物理数据库连接的事务。两阶段提交协议:分布式事务使用两阶段提交协议使不同进程或者不同数据库服务器执行的相关工作同步。该协议保证所有进程成功完成工作或根本不执行工作。对数据的修改须共同提交或共同回滚。两阶段提交协议包含两个阶段:准备阶段和解决阶段。准备阶段:协调者将向事务中的每个进程发送一条信息,要求每个进程准备提交。当某进程准备时,它保证可以提交事务并为自己的工作生成一条永久记录。在保证可以提交之后,它不能再单方面决定回滚事务。如果该进程不能准备(也就是说,如果它不能保证自己可以提交事务),那么它必须回滚事务。解决阶段:协调者记录响应。如果所有参与者都准备提交,则提交事务;否则回滚事务。无论哪种情况,协调员将会把结果通知所有参与者。如果结果为提交,参与者须确认它们已经提交。只要你在事务中调用了多个数据库连接,就需要JTA。只要你在事务中调用了多个数据库服务器,就需要两阶段提交。应用程序中使用JTA:分七个步骤(1)建立事务:实现过程的第一步是建立UserTransaction类的一个实例,可以在JNDI中查找这个类。例:Contextctx=GetInitialContext();UserTransactiontx=(UserTransaction)ctx.lookup(UserTransaction);(2)启动事务:只要调用UserTransaction对象的begin方法即可。例:tx.begin();(3)定位数据源:定位事务中所涉及到的数据源。例:javax.sql.DataSourceds=(javax.sql.DataSource)ctx.lookup(“datasource-name”);(4)建立数据库连接例:java.sql.ConnectionmyConn=ds.getConnection();(5)执行资源操作:执行数据库的相关操作:如插入,查询,删除等。(6)关闭连接例:stmt.close();myConn.close();(7)完成事务例:try{tx.commit();stmt.close();}catch(Exceptiontxe){try{tx.rollback();}catch(javax.transaction.SystemExceptionse){}}finally{...}三、实验步骤:1)软件安装:安装MySql数据库:本次实验连接的数据库是MySQL,检查机子上有没有安装MySQL程序,如果没有则要安装,双击tools文件夹里面的mysql-5.5.16-win32.msi,按步骤要求进行安装,务必记住设定的密码。安装完成后,开始所有程序,找到输入刚设定的密码,创建数据库:进入bin目录,运行run.bat,看是否启动正常。浏览器打开访问将MySQL的数据库驱动程序:mysql-connector-java-5.0.4-bin.jar,拷贝到%JBOSS_HOME%/server/defalut/lib。2)数据源配置:参考%JBOSS-HOME%/docs/examples/jca/XXX-ds.xml的范本。其中有mysql-ds.xml数据源配置文件,把它复制到%JBOSS_HOME%/server/defalut/deploy,并修改里面的项:修改%JBOSS-HOME%/server/default/conf下的standardjbosscmp-jdbc.xml文件,找到datasource,将该行改为datasourceMySqlDS/datasource,(与jndi-name对应),完成后会自动加载出现下列信息。3)下面提供两种获取JBoss上下文的方法,不过在该实验中,我们采用第二种方法。1.配置JNDI的一个方法是通过属性文件\server\minimal\conf\jndi.properties。在这个文件中使用正确的值,并且把它所在的路径包含到classpath中,它比较容易获得正确初始化上下文。jndi.properties文件的内容如下:java.naming.factory.initial=org.jboss.naming.NamingContextFactoryjava.naming.provider.url=jnp://localhost:1099java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces把该文件放置的路径成为你的classpath的一部分。如果你使用这种方法,在初始化上下文时,代码比较简单:Contextcontext=newIntialContext();。当程序是通过外部访问JBoss才需要jndi.properties文件,如果程序在JBoss服务器中运行,如:Servlet或jsp,则只要newInitialContext()。2.在某些情景下,可能需要手工配置JNDI;例如当运行的类文件中环境已经配置了一个初始化上下文,但不是你想用的上下文时,需要手工来配置一个上下文:Stringurl=jnp://localhost:1099;Propertiesp=newProperties();p.setProperty(java.naming.factory.initial,org.jboss.naming.NamingContextFactory);p.setProperty(java.naming.factory.url.pkgs,org.jboss.naming:org.jnp.interfaces);p.setProperty(java.naming.provider.url,url);ctx=newInitialContext(p);JBoss与JTA:获取JTA对象UserTransaction:UserTransactiontx=null;tx=(javax.transaction.UserTransaction)ctx.lookup(UserTransaction);开始事务:tx.begin();提交事务:tx.commit();事务回滚:tx.rollback();4)检查JTA配置是否成功:代码文件在JTA文件夹中,根据自己机子的配置路径修改setEnv.cmd文件中信息:运行JBoss:JBoss目录下bin\run.bat(已经运行则不必再开启)。若出现错可能是配置有问题。编译:执行compile.cmd文件,生成JTAtest.class文件。执行:点击runJTAtest.cmd,将会看到查询数据库的结果,表示连接成功。关闭run.bat来关闭JBOSS服务器。5)Eclipse上JBoss部署JTA的servlet:为了让JBoss的JTA正常运行,在servlet中运行JTA,让JTA在JBoss服务器的虚拟机上运行。打开toolseclipseeclipse.exe,输入工程目录关闭欢迎界面,进入workbench1.服务器配置在正下方的视图窗口中,点击Servers,开始创建一个JBOSS服务器:选择JBOSSCommunity下的JBOSSAS6.x,进入下一步,然后再HomeDirectory找到刚才解压缩的Jboss目录,然后finish,配置完成。如下图:2.在左边view右键NewDynaicWebProject,创建一个网页工程lab6,在JavaResources目录下的src,右键,新建Newclass,创建一个servlet,包名com.servlet,servlet取名为JTAservlet,如下图:将lab6\代码\JTA-Servlet\com\servlet文件夹中的JTAservlet.java全部代码拷贝到eclipse上刚创建的servlet。3.双击lab6/WebContent/WEB-INF下的web.xml文件(如果没有则自己创建),点击Source切换到代码视图,输入如下配置servlet信息?xmlversion=1.0encoding=ISO-8859-1?!DOCTYPEweb-appPUBLIC-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN在WebContent下直接新建一个jsp文件,命名为index.jsp,从提供你们的代码中的index.jsp复制过来,启动服务器后默认打开地址是,会直接调用此文件。5.在工程lab6上右键RunAsRunonServer,选择刚刚的JBOSS服务器,finish。(eclipse中启动JBOSS,稍慢,耐心等待)。在弹出的浏览窗口输入:,查看运行结果。6.事务回滚当提取的现金的额度大于现有的额度,则会撤销提取的操作,将事务进行回滚到操作之前的状态。打开MySQL命令行,输入命令:uselab9;select*fromjbossaccounts;将查看到jbossaccounts中的信息。同上面的JTAservlet.java创建相同,在src上右键Newclass,创建一个java类,包名为空,类取名为JTAsqlRollback。将D:\lab6\代码\JTA-RollBack文件夹中的JTAsqlRollback.java全部代码拷贝到eclipse上刚创建的java类。在JTAsqlRollback.java的代码编辑区右键RunAsJavaApplication,查看运行效果。四、实验要求:在eclipse上运用JBoss的JTA机制实现分布式数据库事务处理;五、实验小结:自己编!!!!!!!!!!!!!!!!!!!!!!!!!!!什么都想靠爸爸,以后进社会了怎么办?!!!!!!!!
本文标题:实验六 Jboss的数据源配置以及事务处理
链接地址:https://www.777doc.com/doc-3228181 .html