`

JBoss+Oracle+JTA配置分布式事务

阅读更多
首先讲一下我的配置:
   JBoss是JBoss-4.2.2.GA
   Oracle是Oracle10g
(1)(假如我的JBoss装在D盘)把JBoss路径中(D:\jboss-4.2.2.GA\docs\examples\jca)oracle-xa-ds.xml文件复制一份放到JBoss路径D:\jboss-4.2.2.GA\server\default\deploy下面,然后打开可以看到这个XML文件是一个配置数据库信息模板如:
<datasources>
  <xa-datasource>
    <jndi-name>XAOracleDS</jndi-name>
    <isSameRM-override-value>false</isSameRM-override-value>
    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
    <xa-datasource-property name="URL">jdbc:oracle:thin:@localhost:1521:hong</xa-datasource-property>
    <xa-datasource-property name="User">hong</xa-datasource-property>
    <xa-datasource-property name="Password">hong</xa-datasource-property> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
    <no-tx-separate-pools/>
      <metadata>
         <type-mapping>Oracle10g</type-mapping>
      </metadata>
  </xa-datasource>
  <mbean code="org.jboss.resource.adapter.jdbc.vendor.OracleXAExceptionFormatter" 
         name="jboss.jca:service=OracleXAExceptionFormatter">
    <depends optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends>
  </mbean>
</datasources>

其中需要修改的是<xa-datasource-class>节点如果是Oracl数据库一般都是(oracle.jdbc.xa.client.OracleXADataSource)如果是其他数据库就需要修改成相应的数据库驱动类。
还要修改<xa-datasource-property name="URL">jdbc:oracle:thin:@IP地址:Oracle的端口号:SID
修改<xa-datasource-property name="User">节点为自己的数据库用户名。
修改<xa-datasource-property name="Password">节点为自己数据库的密码。
修改<type-mapping>节点为相应的数据库产品如:9i,10g,11g.
(2)编写测试类:
package myjta.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;

import myjta.util.MyException;

public class DataBase {
	//事务管理对象
	private UserTransaction ut = null;
	//数据库连接对象
	private Connection conn = null;
	//(Context)上下文对象
	private Context context = null;
	//本身的对象
	private static DataBase dataBase = null;
	//操作数据库对象
	private PreparedStatement pstmt = null;
	//数据集对象
	public ResultSet res = null;
	private DataBase(){
		try {
			context = new InitialContext();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 返回自己本身的对象。
	 * @return 返回DataBase对象
	 */
	public static DataBase getDataBase(){
		if(dataBase==null){
			dataBase = new DataBase();
		}
		return dataBase;
	}
	/**
	 * 创建事务管理对象UserTransaction
	 * @return 返回事务管理对象UserTransaction
	 */
	public UserTransaction getUserTransaction(){
		try{
//java:comp/UserTransaction是固定写法。
			ut = (UserTransaction)context.lookup("java:comp/UserTransaction");
			System.out.println("ut = "+ut);
		}catch(Exception ex){
			ex.printStackTrace();
			System.out.println("创建UserTransaction"+ex.getMessage());
		}
		return ut;
	}
	/**
	 * 创建数据库连接
	 */
	public void getConn(){
		try{
//其中java:/是前缀XAoracleDs是上面配置的oracle-ax-ds.xml中<jndi-name>节点的名称。
			DataSource ds =  (DataSource)context.lookup("java:/XAOracleDS");
			conn = ds.getConnection();
		}catch(Exception ex){
			ex.printStackTrace();
			System.out.println("创建数据库连接失败~!"+ex.getMessage());
		}
	}
	
	/**
	 * 对数据进行增删改操作的方法
	 * @param sql 要执行的SQL语句
	 * @param arrgs 需要想SQL语句中绑定的数据
	 * @return 返回受影响行数
	 */
	public int excuteUpdate(String sql,String[] arrgs){
		this.getConn();
		int result = 0;
		try {
			pstmt = conn.prepareStatement(sql);
			if(arrgs!=null && arrgs.length>0){
				for(int i=0;i<arrgs.length;i++){
					pstmt.setString(i+1, arrgs[i]);
				}
			}
			result = pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new MyException("增加删除修改数据错误!"+e.getMessage(),e);
		}finally{
			this.closePstmt();
			this.closeConn();
		}
		return result;
	}
	/**
	 * 查询数据库数据的方法
	 * @param sql 要执行查询的SQL语句
	 * @param arrgs 要该SQL语句绑定的数据
	 * @return 返回结果集ResultSet
	 */
	public ResultSet excuteQuery(String sql,String[] arrgs){
		try {
			pstmt = conn.prepareStatement(sql);
			if(arrgs!=null && arrgs.length>0){
				for(int i=0;i<arrgs.length;i++){
					pstmt.setString(i+1, arrgs[i]);
				}
			}
			res = pstmt.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new MyException("查询数据错误"+e.getMessage(),e);
		}
		return res;
	}
	/**
	 * 关闭数据库连接
	 */
	public void closeConn(){
		try{
			if(conn!=null){
				conn.close();
				conn = null;
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	/**
	 * 关闭PreparedStatement对象
	 */
	public void closePstmt(){
		try {
			if(pstmt!=null){
				pstmt.close();
				pstmt=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 关闭ResultSet对象
	 */
	public void closeRes(){
		try {
			if(res!=null){
				res.close();
				res=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

  这样在JBoss中配置Oracle数据库的JTA就完成了。希望能给广大java学习者提供一些帮助。
2
0
分享到:
评论

相关推荐

    springmvc3注解+mybatis+JTA+jboss7.1下多个数据源配置(一)

    这个配置对于那些需要处理多个数据库或者分布式事务的项目来说至关重要。 首先,Spring MVC 3是Spring框架的一个组件,专门用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构模式,使得开发者可以更轻松地...

    JavaEE5学习笔记01-JTA和数据库事务

    - 配置JTA资源,如在JBOSS服务器中配置`oracle1`数据源,通过XML文件指定JNDI名称、连接池大小等参数。 #### 四、JTA与数据库事务的深度整合 为了在JavaEE5应用中使用JTA管理数据库事务,开发者需要: - 正确配置...

    基于 JBoss 4.x的 J2EE 1.4 应用 开发指南

    4. **事务管理**:学习如何利用JTA进行分布式事务处理,确保数据一致性。 5. **JMS和集群**:掌握Java消息服务的使用,以及如何通过JBoss实现高可用性和负载均衡的集群配置。 6. **安全机制**:了解JBoss的安全...

    oracle最新驱动

    此外,Oracle JDBC驱动还支持分布式事务、XA事务、JMS和JTA集成,使得在分布式环境中的数据库操作更加灵活和可靠。同时,通过Oracle的LOB(Large Object)支持,可以高效地处理大对象,如BLOB(Binary Large Object...

    jboss as 3

    5. **JTA事务管理**:JBoss AS 3提供了JTA事务管理,确保了跨多个数据库和资源的原子性操作。 6. **JNDI服务**:Java Naming and Directory Interface(JNDI)提供了一个查找和绑定对象的命名系统,使得组件可以...

    基于J2EE在分布式环境下的底层结构(+文献综述).zip

    EJB容器(如JBoss或WebLogic)提供了服务,如安全性、事务管理、生命周期管理和远程方法调用,使EJB能在分布式环境中运行。 3. **应用程序服务器**:如IBM WebSphere、Oracle WebLogic Server,它们是J2EE平台的...

    j2ee体系帮助文档大全

    5. **JTA与事务管理**:介绍JTA在分布式事务中的作用,包括本地事务和全局事务的管理,以及XA事务的原理。 6. **JPA与Hibernate**:讨论Java Persistence API(JPA)作为ORM(对象关系映射)工具的使用,以及...

    J2EE企业级培训教程

    5. **JTA(Java Transaction API)**: JTA为分布式事务处理提供了统一的API,确保在多资源操作中数据的一致性。 **J2EE应用架构** 典型的J2EE应用通常包括以下层次: - 客户端层:用户界面,可以是浏览器、桌面...

    J2EE.rar_企业培训

    5. **Java Transaction API (JTA)**:JTA为分布式事务处理提供了一种标准接口,确保多资源事务的一致性和完整性。 6. **Java Naming and Directory Interface (JNDI)**:JNDI为应用程序提供查找和管理资源的统一...

    基于J2EE和UML技术的网上书店购物系统

    6. 事务管理:利用JTA进行分布式事务处理,保证数据的一致性。 7. 异步处理:通过JMS进行消息队列处理,实现并发和高可用性。 8. 部署与运行环境:J2EE应用服务器如Tomcat、WebLogic或JBoss,提供运行和部署平台。...

    ppt课件-第一章 J2EE概述.zip

    7. **JTA(Java Transaction API)**:JTA处理分布式事务,确保在多组件环境中的一致性和可靠性。它定义了如何管理事务的开始、提交、回滚和参与者的协调。 8. **JNDI(Java Naming and Directory Interface)**:...

    J2ee基础到精通

    JMS允许应用程序异步发送和接收消息,而JTA则处理分布式环境中的事务。理解和使用这些服务,可以构建更健壮、容错性更强的应用。 7. **部署与运行环境** 了解如何配置和使用应用服务器,如Tomcat、WebLogic、...

    hibernatelib的很多jar包自己打包的

    5. jta:对于分布式事务处理,需要包含JTA的实现,如jboss-transaction-api_1.2_spec。 6. jdbc驱动:根据所使用的数据库(如MySQL, Oracle, PostgreSQL等),需要相应的JDBC驱动来连接数据库。 此外,如果与Spring...

    配置Hibernate所需的jar包

    4. **jta.jar**: Java Transaction API,用于处理分布式事务。在需要跨多个资源(如数据库和消息队列)进行一致性的操作时,这个库是必需的。 5. **ejb3-persistence.jar**: EJB 3.0持久化库,虽然现在通常使用JPA...

    hibernate3

    6. **jta.jar** 或 **jboss-transaction-api_1.1_spec.jar**:Java Transaction API,用于分布式事务管理。 7. **数据库驱动jar**:根据你的项目中使用的具体数据库(如mysql-connector.jar for MySQL,ojdbc.jar ...

    搭建hibernate所需jar包

    - `jta.jar`或`jboss-jta.jar`:用于处理分布式事务,确保数据的一致性和完整性。 4. **Jakarta Commons Logging**: - `commons-logging.jar`:提供一个抽象层,允许使用多种日志框架,如Log4j或Java内置的日志...

    例释JAVA2企业版(J2EE)程序设计

    6. **Java Transaction API (JTA)** 和 **Java Transaction Service (JTS)**:JTA是Java平台上的事务处理API,定义了管理分布式事务的标准接口。JTS是Oracle提供的JTA实现,提供跨越多个资源的事务协调。 7. **Java...

    经典javaee

    EJB是JavaEE中的核心组件,它可以提供分布式计算、事务管理、安全性以及资源管理等功能,使得开发者能够构建可扩展、健壮的企业级服务。 结合JSF和JBoss,开发者可以利用JSF创建用户友好的Web界面,同时在JBoss应用...

    j2ee架构师手册

    6. **Java Transaction API(JTA)**:JTA提供了分布式事务管理,确保在多资源环境下的数据一致性。这对于处理跨越多个数据库或EJB的复杂业务逻辑至关重要。 7. **Java Naming and Directory Interface(JNDI)**:...

Global site tag (gtag.js) - Google Analytics