当前位置: 代码迷 >> JBoss >> hibernate使用jboss5下的xa数据源出现类型转换错误
  详细解决方案

hibernate使用jboss5下的xa数据源出现类型转换错误

热度:8014   发布时间:2013-02-26 00:00:00.0
hibernate使用jboss5下的xa数据源出现类型转换异常
小弟最近在看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>
  相关解决方案