俺今天无法淡定了,先列个标题,把这几天烦人的东西都整理一遍,免得以后忘记鸟。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搭建,配置,适合初学者
"spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...
3. **配置Spring**:在src/main/resources下创建applicationContext.xml文件,配置Spring的核心容器,包括Bean定义、数据源、事务管理器等。例如,使用DataSource来连接Oracle数据库,使用...
这个"jsp+Spring+hibernate"博客系统展示了如何利用现代Java技术栈构建一个功能完善的Web应用。通过结合JSP的视图呈现、Spring的控制层管理和Hibernate的数据持久化,开发者能够快速、高效地开发出具有复杂业务逻辑...
struts2+spring+hibernate 配置文件struts2+spring+hibernate 配置文件
此外,教程可能还会涵盖事务管理的配置,以及如何使用Spring Data JPA进一步简化数据访问层的代码。 整合这三大框架,可以实现高效、灵活且易于维护的Java Web应用。通过注解,开发者可以减少XML配置,提高代码的...
- **Hibernate配置**: 配置Hibernate实体类,映射到数据库表,并设置数据源、SessionFactory等。 - **MyEclipse集成**: MyEclipse是一款强大的Java EE集成开发环境,支持GWT插件,使得开发者可以直接在IDE中调试和...
Flex+Spring+Hibernate 整合是企业级应用开发中常见的一种技术栈组合,它结合了Flex前端的富互联网应用程序(RIA)开发能力、Spring框架的依赖注入和事务管理功能,以及Hibernate持久化框架的数据库操作便捷性。...
标题中的"idea工具创建的Spring+SpringMVC+Hibernate+maven项目"指的是使用IntelliJ IDEA这个集成开发环境(IDE)构建的一个Java Web项目,该项目整合了四个关键的技术框架:Spring、SpringMVC、Hibernate以及Maven...
对于Hibernate,需要配置SessionFactory,可能还包括数据源、事务管理器等。 3. **配置Hibernate**:配置Hibernate的`hibernate.cfg.xml`文件,指定数据库连接参数,实体映射文件的位置,以及缓存策略。还需要在...
农业网站 (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》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...
Spring还提供了数据源配置、事务配置以及对Hibernate SessionFactory的管理,通过`@EnableTransactionManagement`开启事务管理。 在实际开发中,我们还会用到Spring的其他功能,比如Spring MVC的拦截器...
此外,Spring还可以与Hibernate集成,实现数据访问层的事务管理。 **Hibernate** Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象和数据库记录进行映射,使得开发者可以使用面向对象的...
在JSF+Spring+Hibernate的组合中,Hibernate作为数据访问层,负责将Java对象映射到数据库中的表,处理SQL查询和更新操作。开发者可以通过配置Hibernate的实体类和映射文件,实现数据的CRUD(创建、读取、更新、删除...
3. **数据源配置**:配置数据源是整合的起点。你需要在 Spring 配置文件中定义数据源 Bean,如使用 DriverManagerDataSource 或者 DataSourceProxy,提供连接数据库所需的 JDBC 配置信息。 4. **SessionFactory ...
接着,描述中的"Spring+Hibernate多数据源的整合实现demo"意味着这是一个实际操作的示例,它可能包含了一个或多个配置文件和Java代码,展示了如何在Spring Boot或者传统的Spring环境下配置和使用多数据源。...
对于Spring+Spring MVC+Hibernate的项目,你需要引入以下关键依赖: 1. Spring的核心库,提供依赖注入和AOP支持。 2. Spring MVC,用于处理HTTP请求和响应,实现Web应用的前端控制器。 3. Hibernate,作为ORM框架,...
Spring管理SessionFactory,通常在ApplicationContext.xml中配置,通过`<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">`指定数据源、映射文件、hibernate配置等。...
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...