`
liushu1234
  • 浏览: 10466 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

spring+hibernate+atomokis配置多数据源与事务

 
阅读更多
俺今天无法淡定了,先列个标题,把这几天烦人的东西都整理一遍,免得以后忘记鸟。AIX,我恨你。

   spring+hibernate配置多数据源并统一管理事物,首先确定的是必须使用JTA管理事物,在spring的HibernateTransactionManager类API中已经详细说明了两种transactionManager的不同,quote:JTA (usually through JtaTransactionManager) is necessary for accessing multiple transactional resources within the same transaction. The DataSource that Hibernate uses needs to be JTA-enabled in such a scenario (see container setup)。必须引用JTA,而且数据源必须是支持JTA的XAdatasource。quote百度百科:如果计划使用JTA来划分事务,你将需要一个实现了javax.sql.XADataSource,javax.sql.XAConnection和javax.sql.XAResource接口JDBC的驱动。好了,如果你还是坚持用HibernateTransactionManager的话,可以确定的是,事务不一定会回滚。
   现在在tomcat下用Atomikos实现JTA分布式事务管理,但是数据源只能用免费版的com.atomikos.jdbc.SimpleDataSourceBean,不能用收费版的com.atomikos.jdbc.AtomikosDataSourceBean。但是这个数据源和tomcat使用的时候关闭服务器时有可能引发内存溢出。tomcat6以上会强制解除那个实例,但是会提示你,因为tomcat已经强制移除了,所以除了日志也没啥关系,可以手动去掉那段监听
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
attempts to log objects that have failed to be unregistered by webapps it hosts when they are stopped, and were forcibly unregistered by Tomcat.
   我想说这个数据源貌似使用起来问题蛮多的,日志文件有时候不自动删,内存老溢出,杂七杂八的,反正我现在还在改。程序也有问题哈,内存占用很变态,AIX服务器也很变态,总之都很变态,哥哥我也快变态了。总之想找一个好的实现了XADataSource的数据源,换个JBOSS去试试。
   然后复制一下spring的配置文件,如下
<bean id="pdmDataSource" class="com.atomikos.jdbc.SimpleDataSourceBean">
		<property name="uniqueResourceName">
			<value>pdmDataSource</value>
		</property>
		<property name="xaDataSourceClassName">
			<value>${pdm.jdbc.xaDataSourceClassName}</value>
		</property>
		<property name="xaDataSourceProperties">
			<value>user=${pdm.jdbc.username};password=${pdm.jdbc.password};URL=${pdm.jdbc.url}</value>
		</property>
		<property name="exclusiveConnectionMode">
			<value>true</value>
		</property>   
  		<property name="connectionPoolSize">
  			<value>15</value>
  		</property>   
  		<property name="validatingQuery">
  			<value>SELECT 1</value>
  		</property>
	</bean>
	<bean id="pdmSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref local="pdmDataSource"/>
		</property>
		<property name="mappingDirectoryLocations">
			<list>
			</list>
		</property>
		<property name="mappingResources">
			<list>
				<value>com/ccac/mes/materialmanagement/entity/TSfcMove.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/PubProduct.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/InvdepotDetail.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/Invindepot.hbm.xml</value>
			</list> 
		</property>
		<property name="hibernateProperties">
			<props>   
				<prop key="hibernate.dialect">${pdm.dialect}</prop>   
				<prop key="hibernate.show_sql">false</prop>   
				<prop key="hibernate.hbm2ddl.auto">none</prop>
				<prop key="hibernate.format_sql">false</prop>   
			</props>   
		</property>
	</bean>
	 
	<bean id="dataSource" class="com.atomikos.jdbc.SimpleDataSourceBean">
		<property name="uniqueResourceName">
			<value>dataSource</value>
		</property>
		<property name="xaDataSourceClassName">
			<value>${jdbc.xaDataSourceClassName}</value>
		</property>
		<property name="xaDataSourceProperties">
			<value>user=${jdbc.username};password=${jdbc.password};URL=${jdbc.url}</value>
		</property>
		<property name="exclusiveConnectionMode">
			<value>true</value>
		</property>   
  		<property name="connectionPoolSize">
  			<value>15</value>
  		</property>   
  		<property name="validatingQuery">
  			<value>SELECT 1</value>
  		</property>
	</bean>
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref local="dataSource"/>
		</property>
		<property name="mappingDirectoryLocations">
			<list>
				<!-- 项目计划模块 -->
				<value>classpath:com/ccac/mes/projectplan/entity</value>
				<!-- 工程数据模块 -->
				<value>classpath:com/ccac/mes/projectdata/entity</value>
				<!-- 生产资源模块 -->
				<value>classpath:com/ccac/mes/productionresource/entity</value>
				<!-- 自定义用户权限模块 -->
				<value>classpath:com/ccac/mes/factorymodel/entity</value>
				<!-- 物料管理模块 
					<value>classpath:com/ccac/mes/materialmanagement/entity</value>
					-->
				<!-- 生产监控模块 -->
				<value>classpath:com/ccac/mes/productmonitor/entity</value>
				<!-- 生产计划模块 -->
				<value>classpath:com/ccac/mes/productionplan/entity</value>
				<!-- 工作流模块 -->
				<value>classpath:com/ccac/mes/process/entity</value>
				<!-- OA管理模块-->
				<value>classpath:com/ccac/mes/OAmanagement/entity</value>
			</list>
		</property>
		<property name="mappingResources">
			<list>
				<!-- 工作流自带表模块 -->
				<value>jbpm.repository.hbm.xml</value>
				<value>jbpm.execution.hbm.xml</value>
				<value>jbpm.history.hbm.xml</value>
				<value>jbpm.task.hbm.xml</value>
				
				<!-- 物料管理模块 -->
				<value>com/ccac/mes/materialmanagement/entity/InputRecordEffectivity.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/InventoryInputRecord.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/InventoryInputSheet.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/InventoryOutputRecord.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/InventoryOutputSheet.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/Warehouse.hbm.xml</value>
				<value>com/ccac/mes/materialmanagement/entity/WarehousePosition.hbm.xml</value>
			</list> 
		</property>
		<!-- herbernate properties -->
		<property name="hibernateProperties">   
			<props>   
				<prop key="hibernate.dialect">${dialect}</prop>   
				<prop key="hibernate.show_sql">false</prop>   
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.format_sql">false</prop>   
			</props>   
		</property>
	</bean>
	<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> 
  		<property name="forceShutdown">
  			<value>true</value>
  		</property> 
	</bean>
	<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> 
  		<property name="transactionTimeout">
  			<value>300</value>
  		</property> 
	</bean> 
	<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager">
			<ref local="atomikosTransactionManager"/>
		</property>
		<property name="userTransaction">
			<ref local="atomikosUserTransaction"/>
		</property>
	</bean>
	
     
	[b]<!--这个不能用了啊[/b]
		<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
			<property name="sessionFactory" ref="sessionFactory" />
		</bean>
		-->
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager" ref="transactionManager"/>
		<property name="transactionAttributes">
			<props>
				<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="del*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="revise*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="submit*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="start*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="end*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="change*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="re*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="edit*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="copy*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="input*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="output*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="instance*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="import*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="close*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="operate*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="move*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="workaround*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="rollback*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="cancel*">PROPAGATION_REQUIRED,-Exception</prop>
				
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="authenticate*">PROPAGATION_REQUIRED,readOnly</prop>				
			</props>
		</property>
	</bean>
	
	
	<!-- 定义BeanNameAutoProxyCreator-->
	<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="beanNames">
			<list>
				<value>*Service</value>
			</list>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value> 
			</list>
		</property>     
	</bean>


忘了properties的东西
jdbc.xaDataSourceClassName=oracle.jdbc.xa.client.OracleXADataSource
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=ccacmes
jdbc.password=ccacmes
dialect=org.hibernate.dialect.Oracle10gDialect
分享到:
评论

相关推荐

    简单struts+spring+hibernate搭建,配置

    简单struts+spring+hibernate搭建,配置,适合初学者

    spring3+springmvc+jpa+hibernate多数据源

    "spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...

    springmvc+spring+hibernate

    3. **配置Spring**:在src/main/resources下创建applicationContext.xml文件,配置Spring的核心容器,包括Bean定义、数据源、事务管理器等。例如,使用DataSource来连接Oracle数据库,使用...

    jsp+Spring+hibernate 博客系统

    这个"jsp+Spring+hibernate"博客系统展示了如何利用现代Java技术栈构建一个功能完善的Web应用。通过结合JSP的视图呈现、Spring的控制层管理和Hibernate的数据持久化,开发者能够快速、高效地开发出具有复杂业务逻辑...

    struts2+spring+hibernate 配置文件

    struts2+spring+hibernate 配置文件struts2+spring+hibernate 配置文件

    spring mvc + spring + hibernate 全注解整合开发视频教程 11

    此外,教程可能还会涵盖事务管理的配置,以及如何使用Spring Data JPA进一步简化数据访问层的代码。 整合这三大框架,可以实现高效、灵活且易于维护的Java Web应用。通过注解,开发者可以减少XML配置,提高代码的...

    gwt+spring+hibernate

    - **Hibernate配置**: 配置Hibernate实体类,映射到数据库表,并设置数据源、SessionFactory等。 - **MyEclipse集成**: MyEclipse是一款强大的Java EE集成开发环境,支持GWT插件,使得开发者可以直接在IDE中调试和...

    flex+Spring+Hibernate整合配置详解

    Flex+Spring+Hibernate 整合是企业级应用开发中常见的一种技术栈组合,它结合了Flex前端的富互联网应用程序(RIA)开发能力、Spring框架的依赖注入和事务管理功能,以及Hibernate持久化框架的数据库操作便捷性。...

    idea工具创建的Spring+SpringMVC+Hibernate+maven项目

    标题中的"idea工具创建的Spring+SpringMVC+Hibernate+maven项目"指的是使用IntelliJ IDEA这个集成开发环境(IDE)构建的一个Java Web项目,该项目整合了四个关键的技术框架:Spring、SpringMVC、Hibernate以及Maven...

    spring+hibernate+webwork相关配置

    对于Hibernate,需要配置SessionFactory,可能还包括数据源、事务管理器等。 3. **配置Hibernate**:配置Hibernate的`hibernate.cfg.xml`文件,指定数据库连接参数,实体映射文件的位置,以及缓存策略。还需要在...

    基于J2EE农业网 struts 2 +spring+ hibernate

    农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts ...

    图书管理系统spring+struts+hibernate

    《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...

    spring mvc + spring + hibernate 全注解整合开发视频教程 04

    Spring还提供了数据源配置、事务配置以及对Hibernate SessionFactory的管理,通过`@EnableTransactionManagement`开启事务管理。 在实际开发中,我们还会用到Spring的其他功能,比如Spring MVC的拦截器...

    struts+spring+hibernate实现图书修改和删除

    此外,Spring还可以与Hibernate集成,实现数据访问层的事务管理。 **Hibernate** Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象和数据库记录进行映射,使得开发者可以使用面向对象的...

    JSF+Spring+Hibernate小例子

    在JSF+Spring+Hibernate的组合中,Hibernate作为数据访问层,负责将Java对象映射到数据库中的表,处理SQL查询和更新操作。开发者可以通过配置Hibernate的实体类和映射文件,实现数据的CRUD(创建、读取、更新、删除...

    Spring+hibernate整合源代码

    3. **数据源配置**:配置数据源是整合的起点。你需要在 Spring 配置文件中定义数据源 Bean,如使用 DriverManagerDataSource 或者 DataSourceProxy,提供连接数据库所需的 JDBC 配置信息。 4. **SessionFactory ...

    Spring+Hibernate多数据源

    接着,描述中的"Spring+Hibernate多数据源的整合实现demo"意味着这是一个实际操作的示例,它可能包含了一个或多个配置文件和Java代码,展示了如何在Spring Boot或者传统的Spring环境下配置和使用多数据源。...

    用Maven搭建Spring+Spring MVC+Hibernate框架

    对于Spring+Spring MVC+Hibernate的项目,你需要引入以下关键依赖: 1. Spring的核心库,提供依赖注入和AOP支持。 2. Spring MVC,用于处理HTTP请求和响应,实现Web应用的前端控制器。 3. Hibernate,作为ORM框架,...

    struts+spring+hibernate三大框架整合

    Spring管理SessionFactory,通常在ApplicationContext.xml中配置,通过`&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"&gt;`指定数据源、映射文件、hibernate配置等。...

    疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发(part01)

    《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...

Global site tag (gtag.js) - Google Analytics