小弟最近在看hibernate书籍的时候发现书本提及了jta分布式的事务处理,于是想尝试一下。我下了jboss5.1,在我机子上D:\java_data\jboss\jboss-5.1.0.GA\server\default\deploy下有一文件mysql-xa-ds.xml,内容如下
- XML code
<?xml version="1.0" encoding="UTF-8"?><datasources><xa-datasource><jndi-name>MySqlXADS</jndi-name><xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class><xa-datasource-property name="Url">jdbc:mysql://127.0.0.1:3306/test</xa-datasource-property><xa-datasource-property name="User">root</xa-datasource-property><xa-datasource-property name="Password">123</xa-datasource-property><exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name><metadata> <type-mapping>mySQL</type-mapping></metadata></xa-datasource></datasources>
然后建了个工程,在src下的hibernate.cfg.xml配置如下
- XML code
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory name="jboss_first"> <property name="show_sql">true</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.connection.datasource">java:/MySqlXADS</property> <mapping resource="com/jboss/domain/Student.hbm.xml"/> <mapping resource="com/jboss/domain/Teacher.hbm.xml"/> </session-factory></hibernate-configuration>
然后,写了个jsp测试一下
- HTML code
<%@page contentType="text/html;charset=utf-8"%><%@page import="java.util.*,javax.naming.*,javax.sql.DataSource,java.sql.*,org.hibernate.*"%><%@page import="org.hibernate.cfg.Configuration"%><%@page import="com.jboss.domain.*" %><%SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();Session session1 = null;try{session1 = sessionFactory.openSession();session1.getTransaction().begin();Teacher teacher = new Teacher();teacher.setName("利利");session1.save(teacher);session1.getTransaction().commit();}catch(Exception e){session1.getTransaction().rollback();System.out.println(e);}finally{session1.close();}%>
部署到jboss,然后运行一下,结果成功保存了teacher的信息。
好了,这是用原生hibernate api进行的操作,而且这跟平时我们用普通的数据源都差不多的,现在,我想
利用jta进行编码,于是我把src下的 hibernate.cfg.xml配置文件修改了一下,变成
- XML code
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory name="jboss_first"> <property name="show_sql">true</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property> <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property> <property name="hibernate.connection.datasource">java:/MySqlXADS</property> <mapping resource="com/jboss/domain/Student.hbm.xml"/> <mapping resource="com/jboss/domain/Teacher.hbm.xml"/> </session-factory></hibernate-configuration>