- 浏览: 258737 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
小清新雪仔_:
报错The import org.springframewor ...
Spring Security oAuth学习之Hello World -
hrybird:
http://www.dolit.cn/portfolios/ ...
LightVOD P2P点播系统完全开源 -
xiaoxiao_qiang:
感谢,正在学习oAuth,有机会一起交流
Spring Security oAuth学习之Hello World -
thinkgem:
你好,lightvodcode.zip现在不能下了,能否发我一 ...
LightVOD P2P点播系统完全开源 -
gdw520:
<div style="text-al ...
如何实现javascript截图 jQuery插件imgAreaSelect使用详解
最近项目中涉及到了两个Oracle数据库的操作。需要用到分布式事务,研究之后贴出代码供大家参考。
1.dao-core.xml(核心事务配置XML)
2.persistence.xml
3.persistenceWoniu.xml
4.MyTest-context.xml
5.IJTATestService.java接口
6.JTATestService.java类
7. MyTest.java
8.通过EntityManagerFactory得到sessionFactory
9.特别说明
在项目测试的过程中,有一个错误困扰了我很久,总会报这样的错误
Hibernate: select SN_WONIU.SYS_COMPANY_SQ.nextval from dual
java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin:@192.168.6.80:1521:C2SServer : 调用中无效的参数
Google了一大圈有不少人碰到这个问题,后来偶是在http://forum.springsource.org/archive/index.php/t-28145.html找到了答案,就是在配置数据源的时候,StandardXAPoolDataSource中要配置user和password,StandardXADataSource中也要配置user和password。 不明白为啥,希望高人不吝赐教。
1.dao-core.xml(核心事务配置XML)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 支持注解 --> <context:annotation-config /> <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" /> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction" ref="jotm" /> </bean> <!--两个数据源--> <bean id="cmcDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@192.168.6.80:1521:C2SServer"/> <property name="user" value="d1xn_cmc"/> <property name="password" value="d1xn_cmc"/> </bean> </property> <property name="user" value="d1xn_cmc"/> <property name="password" value="d1xn_cmc"/> </bean> <bean id="woniuDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@192.168.6.80:1521:C2SServer"/> <property name="user" value="sn_woniu"/> <property name="password" value="sn_woniu"/> </bean> </property> <property name="user" value="sn_woniu"/> <property name="password" value="sn_woniu"/> </bean> <!-- =================== 事务管理AOP配置 =================== --> <bean id="cmcEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation" value="classpath:com/d1xn/commercial/dao/config/persistence.xml"/> <property name="persistenceUnitName" value="CMC_PU"/> <property name="dataSource" ref="cmcDataSource"/> <property name="loadTimeWeaver"> <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> </property> <property name="jpaPropertyMap"> <map> <entry key="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JOTMTransactionManagerLookup" /> <entry key="hibernate.transaction.flush_before_completion" value="true" /> <entry key="hibernate.transaction.auto_close_session" value="true" /> <entry key="hibernate.current_session_context_class" value="jta" /> <entry key="hibernate.connection.release_mode" value="auto" /> </map> </property> </bean> <bean id="woniuEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation" value="classpath:com/d1xn/commercial/dao/config/persistenceWoniu.xml"/> <property name="persistenceUnitName" value="WONIU_PU"/> <property name="dataSource" ref="woniuDataSource"/> <property name="loadTimeWeaver"> <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> </property> <property name="jpaPropertyMap"> <map> <entry key="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JOTMTransactionManagerLookup" /> <entry key="hibernate.transaction.flush_before_completion" value="true" /> <entry key="hibernate.transaction.auto_close_session" value="true" /> <entry key="hibernate.current_session_context_class" value="jta" /> <entry key="hibernate.connection.release_mode" value="auto" /> </map> </property> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="save*" rollback-for="Excepiton"/> <tx:method name="delete*" rollback-for="Excepiton"/> <tx:method name="update*" rollback-for="Excepiton"/> <tx:method name="find*" read-only="true"/> <tx:method name="*" rollback-for="java.lang.Exception"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="userOperation" expression="execution(public * com.d1xn.commercial.dao.imp.*Service*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="userOperation"/> </aop:config> <!-- ===================== AOP事务配置结束 ====================== --> <!-- 业务类 --> <bean id="cmcDaoHelper" class="com.d1xn.dao.core.DAOHelper" init-method="init"> <property name="entityManagerHelper"> <bean class="com.d1xn.commercial.dao.cmc.CmcEntityManagerHelper"/> </property> </bean> <bean id="woniuDaoHelper" class="com.d1xn.dao.core.DAOHelper" init-method="init"> <property name="entityManagerHelper"> <bean class="com.woniu.system.dao.WoniuEntityManagerHelper"/> </property> </bean> <bean id="jtaTestService" class="com.d1xn.commercial.dao.imp.JTATestService"> <property name="cmcDaoHelper" ref="cmcDaoHelper"/> <property name="woniuDaoHelper" ref="woniuDaoHelper"/> </bean> </beans>
2.persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="CMC_PU" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.d1xn.commercial.pojo.cmc.entity.GameGoodsType</class> <class>com.d1xn.commercial.pojo.cmc.entity.ThreeRole</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" /> <property name="hibernate.show_sql" value="true" /> <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size" value="20"/> <!-- 最小连接数 --> <property name="hibernate.c3p0.min_size" value="5"/> <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --> <property name="hibernate.c3p0.timeout" value="120"/> <!-- 最大的PreparedStatement的数量 --> <property name="hibernate.c3p0.max_statements" value="100"/> <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒--> <property name="hibernate.c3p0.idle_test_period" value="120"/> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <property name="hibernate.c3p0.acquire_increment" value="2"/> <!-- 每次都验证连接是否可用 --> <property name="hibernate.c3p0.validate" value="true"/> </properties> </persistence-unit> </persistence>
3.persistenceWoniu.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="WONIU_PU" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.woniu.system.pojo.SysCompany</class> <class>com.woniu.system.pojo.SysUserRole</class> <class>com.woniu.system.pojo.SysUserRoleId</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" /> <property name="hibernate.show_sql" value="true" /> <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size" value="20"/> <!-- 最小连接数 --> <property name="hibernate.c3p0.min_size" value="5"/> <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --> <property name="hibernate.c3p0.timeout" value="120"/> <!-- 最大的PreparedStatement的数量 --> <property name="hibernate.c3p0.max_statements" value="100"/> <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒--> <property name="hibernate.c3p0.idle_test_period" value="120"/> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <property name="hibernate.c3p0.acquire_increment" value="2"/> <!-- 每次都验证连接是否可用 --> <property name="hibernate.c3p0.validate" value="true"/> </properties> </persistence-unit> </persistence>
4.MyTest-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <import resource="classpath:com/d1xn/commercial/dao/config/dao-core.xml"/> </beans>
5.IJTATestService.java接口
public interface IJTATestService { public boolean saveEntity(IEntity woniu, IEntity cmc); }
6.JTATestService.java类
public class JTATestService implements IJTATestService { private DAOHelper woniuDaoHelper; private DAOHelper cmcDaoHelper; public boolean saveEntity(IEntity woniu, IEntity cmc) { woniuDaoHelper.persist(woniu); cmcDaoHelper.persist(cmc); return false; } public void setWoniuDaoHelper(DAOHelper woniuDaoHelper) { this.woniuDaoHelper = woniuDaoHelper; } public void setCmcDaoHelper(DAOHelper cmcDaoHelper) { this.cmcDaoHelper = cmcDaoHelper; } }
7. MyTest.java
@ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) public class MyTest { @Autowired private IJTATestService service; @org.junit.Test public void test() { SysCompany sysCompany = new SysCompany(); sysCompany.setSName("sss"); sysCompany.setSState("0"); SysUserRole role = new SysUserRole(); SysUserRoleId id = new SysUserRoleId(); id.setNRoleId(2L); id.setNUserId(1L); role.setId(id); GameGoodsType type = new GameGoodsType(); type.setSNo("aaa"); type.setSName("222"); type.setSState("1"); service.saveEntity(sysCompany, type); } }
8.通过EntityManagerFactory得到sessionFactory
EntityManager entityManager=this.getCmsEntityManagerFactory().createEntityManager(); Session session=(Session)entityManager.getDelegate(); SessionFactory sessionFactory=session.getSessionFactory();
9.特别说明
在项目测试的过程中,有一个错误困扰了我很久,总会报这样的错误
Hibernate: select SN_WONIU.SYS_COMPANY_SQ.nextval from dual
java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin:@192.168.6.80:1521:C2SServer : 调用中无效的参数
Google了一大圈有不少人碰到这个问题,后来偶是在http://forum.springsource.org/archive/index.php/t-28145.html找到了答案,就是在配置数据源的时候,StandardXAPoolDataSource中要配置user和password,StandardXADataSource中也要配置user和password。 不明白为啥,希望高人不吝赐教。
发表评论
-
Spring Security oAuth学习之Hello World
2012-10-08 13:20 4721OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的 ... -
Spring 使用Spring注解方式管理事务与传播行为
2012-05-09 17:06 3767// 业务方法需要在一个事物中运行,如果方法运行时,已 ... -
SpringMvc多视图整合(jsp、velocity、freemarker)
2011-12-05 10:45 2440说明一下目录结构 Spring配置文件 <? ... -
Spring MVC注解Demo
2011-04-14 10:06 1441Spring MVC注解Demo 说明:在Spri ... -
Proxool数据库连接配置问题
2011-02-16 17:37 1276web.xml 配置信息 <?xml version= ... -
spring配置quartz 多任务
2010-12-30 10:56 3878这是我的一个测试,我配的2个任务。 spring 的配置: ... -
MySQL 数据库常用命令 超级实用版分享
2010-11-18 08:44 7671、MySQL常用命令 create database n ... -
mysql创建触发器、存储过程、函数等实例
2010-11-18 08:39 1381############# 本blog可以直接在mysql客户 ... -
MySQL数据库的23个特别注意事项
2010-11-18 08:36 736使用MySQL,安全问题不能不注意。以下是MySQL提示的23 ... -
完全卸载SQL Server 2005的实现方法
2010-11-18 08:35 1370彻底卸载SQL 2005的方法很多人都在问,下面就教您一个完全 ... -
MySQL的10件事—它们也许和你预想的不一样
2010-11-18 08:32 711#10. 搜索一个“NULL”值 ... -
spring对java远程调用的简化(二)之Hessian,Burlap
2009-11-30 17:24 1463Hessian,Burlap是Caucho提供的两种基于Htt ... -
spring对java远程调用的简化(一)之RMI
2009-11-30 17:23 2532Java开发者可以利用的远程技术有以下几种: 1.远程方法调用 ...
相关推荐
使用JOTM完成多数据源事务管理 在上一篇文档《Spring事务学习文档 》中,在最后我们说到了有两种方法来解决分布式事务,接下来,我们就简单说一下如何使用JOTM来管理分布式事务。
spring + JTA + JOTM实现分布式事务, 高大上的技术
简单易懂的JOTM实现分布式事务控制,此代码是maven项目,如果需要jar可以邮件给我,我发给你。
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
NULL 博文链接:https://myrl1023.iteye.com/blog/1140128
代码下载下来,想要了解更多相关内容可以看http://www.cnblogs.com/shamo89/p/7307961.html
JOTM Spring分布式事务处理(多数据源) demo配置 JOTM Spring分布式事务处理(多数据源) demo配置
spring+jotm 多数据源事务管理(二)hibernate 使用hibernate关联jotm也很方便,先看一个没有使用jotm的例子:
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
Java分布式开发spring+jta+jotm,可用 Java分布式开发spring+jta+jotm,可用
Spring+iBatis+JOTM实现JTA事务 spring ibatis jotm 分布 事务 多数据源
NULL 博文链接:https://jackyin5918.iteye.com/blog/1922379
JOTM使用包 博文链接:https://log-cd.iteye.com/blog/807607
1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM 1.5. 在Spring中运行测试 2 ...
Spring多数据源配置_分布式数据 Tomcat服务器下的多数据源配置详情 一、环境及框架 Tomcat+spring+hibernate+jotm,还有就是struts、Oracle等 二、需求说明 系统里有2套不同网域的oracle数据库,之间的数据需要进行...
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 (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且资源开放的独立的事务管理器。 它提供了 JAVA 应用程序的事务支持,而且与 JTA( JAVA 事务 API)兼容。您可以在JOTM home page 了解到更...