小弟最近在看hibernate书籍的时候发现书本提及了jta分布式的事务处理,于是想尝试一下。我下了jboss5.1,在我机子上D:\java_data\jboss\jboss-5.1.0.GA\server\default\deploy下有一文件mysql-xa-ds.xml,内容如下
<?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配置如下
<!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测试一下
<%@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配置文件修改了一下,变成
<!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"/>