- 浏览: 39280 次
- 性别:
- 来自: 上海
最新评论
-
xinghaifeng2006:
首先配置二个连接池:mysqlpool1、mysqlpool2 ...
JTA -
Argun:
那是不是我的struts1都白学了?
Struts1.x和2.X的一些区别 -
魔力猫咪:
下载试用了一下,翻译的还是可以的。不过还是有很多地方没有翻译。 ...
Eclipse语言包下载地址 -
eric2002cn:
Java之static学习 -
eric2002cn:
...
Java之static学习
通过webwork+spring+hibernatep实现分布式事务(JTA),采用容器必须应用服务器(weblogic,webspere,jboss,jonas等)。实现JTA主要有三个步骤,1.设置数据源,2.配置srping,及hiberante相应配置文件,3.在程序中编写代码。测试时候采用二个数据库,全是采用mysql +weblogic4.0版本。
1.在weblogic设置数据源
首先配置二个连接池:mysqlpool1、mysqlpool2,分别对应二个两个数据库 test1,test2
然后配置二个txDataSource:ds1、ds2
配置如下:
<JDBCConnectionPool DriverName="org.gjt.mm.mysql.Driver"
Name=" mysqlpool1"
PasswordEncrypted="{3DES}9hRoxaA7+106d9AbXZ8e2g=="
Properties="user=root" Targets="myserver"
TestTableName="SQL SELECT 1" URL="jdbc:mysql://localhost:3306/test1"/>
<JDBCConnectionPool DriverName="org.gjt.mm.mysql.Driver"
Name=" mysqlpool2"
PasswordEncrypted="{3DES}9hRoxaA7+106d9AbXZ8e2g=="
Properties="user=root" Targets="myserver"
TestTableName="SQL SELECT 1" URL="jdbc:mysql://localhost:3306/test1"/>
<JDBCTxDataSource JNDIName="ds1" Name=" mysqlpool1"
PoolName="mysqlpool1" Targets="myserver"/>
<JDBCTxDataSource JNDIName="ds2" Name=" mysqlpool1"
PoolName="mysqlpool2" Targets="myserver"/>
2.配置srping,及hiberante相应配置文件
配置二个相对应的 hibernate.cfg..xml文件:Test1.cfg.xml、Test2.cfg.xml配置文件
主要是引用应用服务器的数据源及Mapping files相关配置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">
Ds1
</property>
<!-- following is c3p0 connection pool setting-->
<property name="hibernate.c3p0.min_size">
5
</property>
<property name="hibernate.c3p0.max_size">
500
</property>
<property name="hibernate.c3p0.timeout">
1800
</property>
<property name="hibernate.c3p0.max_statements">
50
</property>
<!--dialect-->
<property name="dialect">
net.sf.hibernate.dialect.MySQLDialect
</property>
<!-- show sql -->
<property name="hibernate.show_sql">
True
</property>
<!-- use out join-->
<property name="hibernate.use_outer_join">
True
</property>
<!--use cache-->
<property name="hibernate.cache.use_query_cache">
</property>
<!-- Transaction Manager Type, here use JDBC Transaction
<property name="hibernate.transaction.factory_class">
net.sf.hibernate.transaction.JDBCTransactionFactory
</property>
-->
<property name="transaction.factory_class">
net.sf.hibernate.transaction.JTATransactionFactory
</property>
<property name="jta.UserTransaction">
java:comp/UserTransaction
</property>
<!-- Mapping files -->
<mapping resource="com/eastsun/model/Test2.hbm.xml"/>
<mapping resource="com/eastsun/model/Test.hbm.xml"/>
</session-factory>
</hibernate-configuration>
另外一个配置文件就同基本上一样的。只修改hibernate.connection.datasource的属性值为ds2
Spring.xml配置文件
主要是配置二个数据源相对应的sessionFactory,再配置一个JTA(myTransactionManager),然后再配置bean。在两个Bean后引用对应的sessonFactory及JTA(myTransactionManager)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="sessionFactory1" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" singleton="true">
<property name="configLocation">
<value>classpath:spring1.cfg.xml</value>
</property>
</bean>
<bean id="sessionFactory2" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" singleton="true">
<property name="configLocation">
<value>classpath:spring2.cfg.xml</value>
</property>
</bean>
<bean id="myTransactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager" />
<bean id="entityDao1"
class="com.eastsun.common.persistence.EntityDaoImpl"
singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
</bean>
<bean id="entityDao2"
class="com.eastsun.common.persistence.EntityDaoImpl"
singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory2" />
</property>
</bean>
<bean id="spring1"
class="com.eastsun.businesslogic.test.Spring1Impl" singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
</bean>
<bean id="spring11"
class="com.eastsun.businesslogic.test.Spring11Impl" singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
</bean>
<bean id="spring2"
class="com.eastsun.businesslogic.test.Spring2Impl" singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory2" />
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
</bean>
</beans>
3. 在程序中编写代码
在第一数据库插入数据库能正常插入,在另外一个数据库插入的时候没有加设置主键ID,这样就会出异常,如果第一次插入的数据也能回滚,不会持久化到数据库,这样就说明JTA事务成功了。
public String insertData(String data){
Session session = null;
Transaction tx = null;
Test test = new Test();
try{
AppLog.message("...........insertData...............................");
session = getSession(true);
Spring2 spring2 =(Spring2)ServiceLocatorOfTest.getInstance("spring1.xml").getService("spring2");
spring2.insertData(UUIDGen.getUUID(),UUIDGen.getUUID());
tx = session.beginTransaction();
test.setTestId(UUIDGen.getUUID());
test.setName(data);
session.save(test);
tx.commit();
}catch(Exception e){
AppLog.message("...........insertData.....Exception..........................");
try{ if(tx!=null)tx.rollback();}catch(Exception ex){};
e.printStackTrace();
}finally{
try{
if(session!=null){
session.close();
}
}
catch(Exception e1){
e1.printStackTrace();
}
}
return "success";
}
1.在weblogic设置数据源
首先配置二个连接池:mysqlpool1、mysqlpool2,分别对应二个两个数据库 test1,test2
然后配置二个txDataSource:ds1、ds2
配置如下:
<JDBCConnectionPool DriverName="org.gjt.mm.mysql.Driver"
Name=" mysqlpool1"
PasswordEncrypted="{3DES}9hRoxaA7+106d9AbXZ8e2g=="
Properties="user=root" Targets="myserver"
TestTableName="SQL SELECT 1" URL="jdbc:mysql://localhost:3306/test1"/>
<JDBCConnectionPool DriverName="org.gjt.mm.mysql.Driver"
Name=" mysqlpool2"
PasswordEncrypted="{3DES}9hRoxaA7+106d9AbXZ8e2g=="
Properties="user=root" Targets="myserver"
TestTableName="SQL SELECT 1" URL="jdbc:mysql://localhost:3306/test1"/>
<JDBCTxDataSource JNDIName="ds1" Name=" mysqlpool1"
PoolName="mysqlpool1" Targets="myserver"/>
<JDBCTxDataSource JNDIName="ds2" Name=" mysqlpool1"
PoolName="mysqlpool2" Targets="myserver"/>
2.配置srping,及hiberante相应配置文件
配置二个相对应的 hibernate.cfg..xml文件:Test1.cfg.xml、Test2.cfg.xml配置文件
主要是引用应用服务器的数据源及Mapping files相关配置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">
Ds1
</property>
<!-- following is c3p0 connection pool setting-->
<property name="hibernate.c3p0.min_size">
5
</property>
<property name="hibernate.c3p0.max_size">
500
</property>
<property name="hibernate.c3p0.timeout">
1800
</property>
<property name="hibernate.c3p0.max_statements">
50
</property>
<!--dialect-->
<property name="dialect">
net.sf.hibernate.dialect.MySQLDialect
</property>
<!-- show sql -->
<property name="hibernate.show_sql">
True
</property>
<!-- use out join-->
<property name="hibernate.use_outer_join">
True
</property>
<!--use cache-->
<property name="hibernate.cache.use_query_cache">
</property>
<!-- Transaction Manager Type, here use JDBC Transaction
<property name="hibernate.transaction.factory_class">
net.sf.hibernate.transaction.JDBCTransactionFactory
</property>
-->
<property name="transaction.factory_class">
net.sf.hibernate.transaction.JTATransactionFactory
</property>
<property name="jta.UserTransaction">
java:comp/UserTransaction
</property>
<!-- Mapping files -->
<mapping resource="com/eastsun/model/Test2.hbm.xml"/>
<mapping resource="com/eastsun/model/Test.hbm.xml"/>
</session-factory>
</hibernate-configuration>
另外一个配置文件就同基本上一样的。只修改hibernate.connection.datasource的属性值为ds2
Spring.xml配置文件
主要是配置二个数据源相对应的sessionFactory,再配置一个JTA(myTransactionManager),然后再配置bean。在两个Bean后引用对应的sessonFactory及JTA(myTransactionManager)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="sessionFactory1" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" singleton="true">
<property name="configLocation">
<value>classpath:spring1.cfg.xml</value>
</property>
</bean>
<bean id="sessionFactory2" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" singleton="true">
<property name="configLocation">
<value>classpath:spring2.cfg.xml</value>
</property>
</bean>
<bean id="myTransactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager" />
<bean id="entityDao1"
class="com.eastsun.common.persistence.EntityDaoImpl"
singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
</bean>
<bean id="entityDao2"
class="com.eastsun.common.persistence.EntityDaoImpl"
singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory2" />
</property>
</bean>
<bean id="spring1"
class="com.eastsun.businesslogic.test.Spring1Impl" singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
</bean>
<bean id="spring11"
class="com.eastsun.businesslogic.test.Spring11Impl" singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory1" />
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
</bean>
<bean id="spring2"
class="com.eastsun.businesslogic.test.Spring2Impl" singleton="true">
<property name="sessionFactory">
<ref bean="sessionFactory2" />
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
</bean>
</beans>
3. 在程序中编写代码
在第一数据库插入数据库能正常插入,在另外一个数据库插入的时候没有加设置主键ID,这样就会出异常,如果第一次插入的数据也能回滚,不会持久化到数据库,这样就说明JTA事务成功了。
public String insertData(String data){
Session session = null;
Transaction tx = null;
Test test = new Test();
try{
AppLog.message("...........insertData...............................");
session = getSession(true);
Spring2 spring2 =(Spring2)ServiceLocatorOfTest.getInstance("spring1.xml").getService("spring2");
spring2.insertData(UUIDGen.getUUID(),UUIDGen.getUUID());
tx = session.beginTransaction();
test.setTestId(UUIDGen.getUUID());
test.setName(data);
session.save(test);
tx.commit();
}catch(Exception e){
AppLog.message("...........insertData.....Exception..........................");
try{ if(tx!=null)tx.rollback();}catch(Exception ex){};
e.printStackTrace();
}finally{
try{
if(session!=null){
session.close();
}
}
catch(Exception e1){
e1.printStackTrace();
}
}
return "success";
}
发表评论
-
Struts1.x和2.X的一些区别
2008-04-21 21:59 3093Struts 从1.1都升成2了, ... -
XML Schema 与 XML DTD的技术比较与分析
2008-04-21 21:59 1804XML DTD是目前使用最广泛 ... -
equals()和hashCode()
2008-04-21 21:57 902在Java语言中,equals()和hashCode()两个函 ... -
解析Servlet
2008-04-21 21:56 878最近一直在看《java与模式》这本书,虽然只是看了几个相对简单 ... -
Difference between Abstract & Interface
2008-04-20 23:00 1007Difference between Abstract &am ... -
Java线程
2008-04-18 00:05 882首先要理解线程首先需 ... -
httpSession的正确理解
2008-01-12 03:16 1055关于HttpSession的误解实在是太多了,本来是一个很简单 ... -
Java之static学习
2008-01-12 03:15 1989对于学习static我们先来 ... -
java序列化
2008-01-12 03:11 2168序列化是什么: 序列化就是将一个对象的状态(各个属性量)保存 ... -
JAVA语言的反射和内省
2008-01-02 02:48 653很多朋友在深入的接触 JAVA 语言后就会发现这样两个词:反射 ... -
Java中的内部类和匿名类
2008-01-02 02:37 1087Java中的内部类和匿名类 提起Java内部类(Inner ... -
Java中static、this、super、final用法
2008-01-02 02:33 659Java中static、this、super、 ... -
什么是JVM
2008-01-02 02:30 870在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一 ... -
类中的static块的用法
2007-12-30 18:43 2326类中的static块的用法public class YSF{ ... -
100以内素数
2007-12-25 02:11 1164public class Test { public sta ...
相关推荐
EJB中的JTA与JTS例子代码,JTA是一种高层的,与实现无关的,与协议无关的J2ee API,应用程序和应用服务器可以使用JTA来访问事务。JTS则规定了支持JTA的事务管理器的实现规范,在高层API之下实现了OMG Object ...
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta帮助文档jta使用手册,jta...
赠送jar包:geronimo-jta_1.1_spec-1.1.1.jar; 赠送原API文档:geronimo-jta_1.1_spec-1.1.1-javadoc.jar; 赠送源代码:geronimo-jta_1.1_spec-1.1.1-sources.jar; 赠送Maven依赖信息文件:geronimo-jta_1.1_spec...
最新的JTA规范.(英文版)学习ejb的必备手册
在Spring中使用JTA事务管理 1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM ...
1. 解压文件得到:jta-1_0_1B-classes.zip 2. cmd进入zip文件所在目录 3. 执行下面命令从本地安装: mvn install:install-file -Dfile=./jta-1_0_1B-classes.zip -DgroupId=javax.transaction -DartifactId=jta -...
jta.jar包;jta.jar包
springboot+jta+atomikos Springboot+atomikos+jta实现分布式事务统一管理
最近往javaEE项目中集成quartz2.2.1时,要用到jta的jar包,下载了最新版的jta-4.0.jar后,发现不能使用,于是又下载了1.1和1.3.1版本的jar包,比较了一下,发现4.0版本的jar包,包名跟以前版本的不一样。quartz2.2.1...
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
JTA1.1规范,包括jta-1_1-spec.pdf,jta-1_1-classes.zip,jta-1_1-doc.zip
jbarcode-0.2.8,jbarcodebean-1.2.0,jta-1.0.1B,jta-1.1我找了半天 现在分享出来
jta-api.jar
多数据源事务可采用jta+atomikos方式来解决事务问题。
jta.jarjta.jarjta.jarjta.jar
执行Quartz所需三个jar包 quartz-all-1.6.0.jar jta-1.1.jar commons-collections.jar
jta-1.0.1.jar
Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源,分别向两个不同的数据里面插入数据同时失败和成功,调用接口方式原理一样。
本资源包含了两个子项目,分别进行了springboot+jpa+jdbcTemplate的多数据源独立事务配置和jta分布式事务配置,并针对不同的情况编写了事务配置测试接口,还演示了JPA的domain一对多自动生成数据库表且不生成数据库...