最近单位有一个网站的数据库负载过重,考虑进行数据库拆分,问题就来了,拆分以后数据库的事务处理咋办?因为以前写的java程序没有考虑到分布式事务。正好前两天接触了JOTM,这是个好东西。废话少说,马上开工。
网上查了好多关于3者的整合,但大都是Spring+Hibernate+JTOM的,很少有直接Hibernate+JOTM的(有,但很少),还是自己动手吧。
一.所需组件
二.JOTM2.0安装
1.
解压
jotm-2.0.10.tgz\jotm-2.0.10\lib
下所有
jar
包到
$TOMCAT5_HOME\common\lib
下
2.
重新编译
carol
,覆盖
$TOMCAT_HOME\common\lib
下的
ow_carol.jar
文件(和
jdk
有关系,所以要自己重新编译一下)
3.
在
$TOMCAT_HOME\common\classes\
下建立
carol.properties
文件,内容如下(我测试的时候此文件不建立也可以)
# lmi stands for
Local Method Invocation (it's a "fake" RMI)
carol.protocols=lmi
# do not use
CAROL JNDI wrapper
carol.start.jndi=false
# do not start a
name server
carol.start.ns=false
4
.
JOTM
安装完成。
三.在Tomcat下建立两个数据源和一个事务处理
<Resource
name="zhang/jta1"
auth="Container"
description="DB Connection jat1"
factory="org.objectweb.jndi.DataSourceFactory"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jta1?autoReconnect=true"
username="root"
password=""
/>
<Resource
name="zhang/jta2"
auth="Container"
description="DB Connection jat2"
factory="org.objectweb.jndi.DataSourceFactory"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jta2?autoReconnect=true"
username="root"
password=""
/>
<Resource name="UserTransaction" auth="Container"
type="javax.transaction.UserTransaction"
factory = "org.objectweb.jotm.UserTransactionFactory"
jotm.timeout = "60"/>
网上的事务部分一般采用<Transaction>…..</Transaction>配置,但是我测了一下,就是不成,也不知是哪里出了问题,所以改用数据源的形式,效果一样.
注意:
上面配置数据源的时候参数名字一定要写对,开始的时候我的配置文件里面是
c3p0
的配置,当时没注意,就直接把
factory
后面类名改了一下,别的参数都没动,结果调了一天半也没弄好,后来,将
driverClass
改成
driverClassName
,
jdbcUrl
改成
url
,
user
改成
username
搞定,郁闷坏了
……
四.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<resource-ref>
<description>jta1</description>
<res-ref-name>zhang/jta1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>jt2</description>
<res-ref-name>zhang/jta2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>UserTransaction description</description>
<res-ref-name>UserTransaction</res-ref-name>
<res-type>javax.transaction.UserTransaction</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
五.数据源配好了,下面改Hibernate了
因为是多数据库操作,需要建立两个HibernateSessionFactory和两个Hibernate配置文件。工厂部分代码直接拷贝一份,修改一下其中的CONFIG_FILE_LOCATION就可以了
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory
</property>
<property name="connection.datasource">java:comp/env/zhang/jta1</property>
<property name="jta.UserTransaction">java:comp/env/UserTransaction</property>
<property name="transaction.manager_lookup_class">org.hibernate.transaction.JOTMTransactionManagerLookup</property>
<property name="show_sql">
true
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<mapping resource="com/zhang/pojos/Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
hibernate2.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory
</property>
<property name="connection.datasource">java:comp/env/zhang/jta2</property>
<property name="jta.UserTransaction">java:comp/env/UserTransaction</property>
<property name="show_sql">
true
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<mapping resource="com/zhang/pojos/Address.hbm.xml"/>
</session-factory>
</hibernate-configuration>
六.测试代码
package com.zhang.test;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.hibernate.Session;
import com.zhang.factory.HibernateSessionFactory;
import com.zhang.factory.HibernateSessionFactory2;
import com.zhang.pojos.Address;
import com.zhang.pojos.Users;
public class Test {
public void insertinto() {
UserTransaction tx = null;
try {
tx = (UserTransaction) new InitialContext().lookup("java:comp/env/UserTransaction");
} catch (NamingException e1) {
e1.printStackTrace();
}
try {
tx.begin();
Session session = HibernateSessionFactory.getSession();
//
Users user = new Users();
user.setUsername("SSSSS");
user.setPassword("123");
session.save(user);
Session session2 = HibernateSessionFactory2.getSession();
Address address = new Address();
address.setUsersId(1);
address.setAddress("XXXXXXX");
session2.save(address);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
try {
tx.rollback();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (SystemException e1) {
e1.printStackTrace();
}
}
}
}
以上配置本家调试通过,如果有什么问题希望大家留言~共同进步~~
CSDN本人原创.今搬家至ITEYE.版权所有@Robot_G
分享到:
相关推荐
简介: struts + spring + hibernate + velocity + ajax + jotm + acegi ================================================================================================ 本资料共包含以下附件: 1161...
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
Java分布式开发spring+jta+jotm,可用 Java分布式开发spring+jta+jotm,可用
NULL 博文链接:https://huihai.iteye.com/blog/1204238
spring+jotm 多数据源事务管理(二)hibernate 使用hibernate关联jotm也很方便,先看一个没有使用jotm的例子:
Spring+iBatis+JOTM实现JTA事务 spring ibatis jotm 分布 事务 多数据源
spring + JTA + JOTM实现分布式事务, 高大上的技术
spring+jotm 多数据源事务管理(三)JNDI+Tomcat 首先需要将jotm相关jar包加入到tomcat中,如下: o jotm.jar o jotm_jrmp_stubs.jar o ow_carol.jar o jta.jar o jta-spec1_0_1.jar o jts1_0.jar o objectweb-...
jotm,源码jotm,源码jotm,源码jotm,源码
JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且资源开放的独立的事务管理器。 它提供了 JAVA 应用程序的事务支持,而且与 JTA( JAVA 事务 API)兼容。您可以在JOTM home page 了解到更...
简单易懂的JOTM实现分布式事务控制,此代码是maven项目,如果需要jar可以邮件给我,我发给你。
代码下载下来,想要了解更多相关内容可以看http://www.cnblogs.com/shamo89/p/7307961.html
NULL 博文链接:https://fenglingcorp.iteye.com/blog/957952
Tomcat+spring+hibernate+jotm,还有就是struts、Oracle等 二、需求说明 系统里有2套不同网域的oracle数据库,之间的数据需要进行交互。 三、Dao配置 1、定义jtom Bean xml 代码 1. <bean id="jotm" class="org....
内含jotm文件,使用时需要将spring和hibernate的jar包河jotm的jar包全部导入到工程中
4 用TOMCAT+SSH+JOTM+MYSQL+JBPM移植DEMO 14 4.1 环境准备 14 4.1.1 安装JDK 14 4.1.2 安装Ant 14 4.1.3 安装Eclipse 15 4.1.4 安装Tomcat 15 4.1.5 安装MySql 15 4.1.6 下载Jotm 15 4.2 移植Human task Service ...