`
tianshui0
  • 浏览: 88700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Sping +hibernate+JTA 注解配置

 
阅读更多

    随着业务的不断扩展数据库的压力越来越大,为了减少数据库的压力我们要从多方面考虑分析,并提出多个解决数据库压力大的问题,比如说根据业务分表、分库、增加缓存机制等等。如果是分库,如何做分布式呢?我就做分布式的库来讨论一下如何使用jta事务。

    什么是jta网上有很多很详细的解释,我不在这里介绍。为了开发效率现在的传统行业的大部分中小企业还是采用SSH架构,那我们就从SSH+JTA的架构说一下如何使用jta

    使用JTA一般的需要容器的支持,如何摆脱容器的绑定呢?目前网上有两个开源的软件:AtomikosJTOM。两个都是非常优秀的JTA两阶段提交事务的实现。查看JTOM的官网发现其最近的更新时间是2005年,并且spring3的已经放弃了对JTOM的集成。Atomikos的最近更新时间是2010年,并不是说他们的更新时间越晚越好好,实际上他们两个对事务的支持已经相当稳定。

     下面我们就Atomikos来说明一下如何配置SSH+JTA

首先下载Atomikos http://www.atomikos.com/ 

我下载的版本是:AtomiosTransactionEssentials-3.8.0

Spring 3.0.4

Hibernate 3.5.5

 

Struts  2

 

配置数据源

使用JTA要使用XA的数据源,流程的数据库都提供了XA的数据源的实现,比如我们使用mysql数据源,mysqlXA数据源:com.mysql.jdbc.jdbc2.optional.MysqlXADataSource

DB2XA数据源:com.ibm.db2.jcc.DB2XADataSource

 

我们需要在Springxml配置文件配置数据的多个数据源如下所示

 

<!—mysql数据源--->
<bean id=”mysqlDataSource” class=”com.atomikos.jdbc.AtommikosDataSourceBean” init-method=”init” destroy-method=”close”>
	<property name=”uniqueResourceName”>
		<value> mysqlDataSource </value>
	</property>
<property name=”xaDataSourceClassName”>
		<value> com.mysql.jdbc.jdbc2.optional.MysqlXADataSource </value>
	</property>
<property name=”xa properties”>
		<props>
<prop key=”URL”>jdbc:mysql://192.168.1.45:3306/dbname?userUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true</prop>
			<prop key=”user”>root</prop>
<prop key=”password”>root</prop>
<prop key=”pinGlobalTxToPhysicalConnetion”>true</prop>
		</props>
	</property>
</bean>

<!—DB2数据源--->
<bean id=”db2DataSource” class=”com.atomikos.jdbc.AtommikosDataSourceBean” init-method=”init” destroy-method=”close”>
	<property name=”uniqueResourceName”>
		<value> db2DataSource </value>
	</property>
<property name=”xaDataSourceClassName”>
		<value> com.ibm.db2.jcc.DB2XADataSource </value>
	</property>
<property name=”xa properties”>
		<props>
<prop key=”serverName”> 192.168.1.45 </prop>
<prop key=”portNumber”>50000 </prop>
<prop key=”databseName”>dbname</prop>
			<prop key=”user”>root</prop>
<prop key=”password”>root</prop>
<prop key=”driverType”>4</prop>
		</props>
	</property>
</bean>

对应的sessionFactory配置(Hibernate的):
<bean id=”mysqlSessionFactory” class=“org.springframework.org.hibernate3.annotation.AnnotationSessionFactoryBean”>
	<!---采用注解扫描实体-->
     <property name=”packagesToScan” value=”com.zohan”/>
	 <property name=”dataSource” ref=”mysqlDataSource”/>
	 <property name=”jtaTransactionManager” ref=”atomikosTransactionManager”/>
	<!---hibernate 实体对应配置文件--->
	<property name=”mapppingResources”>
		<list>
			<value>xxx.xml</value>
		</list>
	</property>
<!—hibernate 配置属性,可以参考Hibernate帮助文档这里只罗列和jta相关的配置-->
<property name=”hibernateProperties”>
	<props>
		<prop key=”hibernate.current_session_context_class”>jta</prop>
<prop key=”hibernate.transaction.factory_class”>
	Com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory
</prop>
<prop key=”hibernate.transcation.manager_lookup_class”>
	com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup
</prop>
<prop key=”hibernate.connection.release_mode”>after_statement</prop>

	</props>
</property>
</bean>
Db2的session配置基本上和mysql的相同知识数据源的引用,这里就不列出了,下面我们进行jta的配置
<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=”240”/>
</bean>

<bean id=”transactionManager” class=“org.springframework.transaction.jta.JtaTransactionManager”>
	<property name=”transactionManager” ref=”atomikosTransactionManager”/>
	<property name=”userTransaction” ref=”atomikosUserTransaction”/>
	<property name=”allowCustomIsolationLevels” value=”true” />
</bean>
<!---->
<aop:aspect-autoproxy proxy-target-class=”true”/>
<!—扫描jar包中注解bean-->
<context:component-scan base-package=”com.zohan.base”/>
<!—事务的切入点配置--->
<aop:config proxy-target-calss=”true”>
	<aop:advisor pointcut=”execution(* com.zohan..*ServiceImpl.*(..))” advice-ref=”txAdvice”/>
</aop:config>

<tx:annotation-driven proxy-target-class=”true” transaction-manager=”transactionManager”/>

<tx:advice id=”txAdvice” transaction-manager=” transactionManager”>
	<tx:attributes>
		<tx:method name=”save*” />
		<tx:method name=”get*” read-only=”true” />

	</tx:attributes>
</ tx:advice>

     dao层使用sessionFactory, 为实现dao层的读写分离,把dao层分离出读和写的方法抽象成不同的接口和实现类,分别注入不同的sessionFactory

     如何在dao层使用自定义的sessionFactory?这样的场景一般是特定的业务需要特定的数据库,可能是一是一个service层调用不同的dao方法。那这样的我们可以在dao层实现不同的数据库操作,一般的实现方式是在dao层注入sessionFactorydao实现类继承HibernateDaoSupport,并实现initDao方法,在initDao方法使用使用setSessionFactory方法实现HibernateDaoSupportsessionFactory的设置。

          配置OpenSessionInViewFilter,在web.xml中针对每个sessionFactory配置OpenSessionInViewFilter

 

    总结:在传统业务中如果单纯的为了减少数据的压力而采读写分离,而采用分布式事务管理其实是不合适的。采用分布式事务管理因采用两阶段提交,增加了响应时间,无形的增加了应用的压力,因此鄙人认为这并不是一个好的减少数据库压力的解决方案。我们可以从其他方式来解决数据库的压力,比如缓存。

分享到:
评论

相关推荐

    第二部分spring+hibernate+jta 分布式事务Demo

    Spring、Hibernate和JTA(Java Transaction API)是Java开发者在构建分布式事务解决方案时常用的三大技术。本示例“第二部分spring+hibernate+jta 分布式事务Demo”将帮助我们理解如何在这三个框架之间协同工作,...

    spring+hibernate+jta demo

    《Spring、Hibernate与JTA在MyEclipse中的整合实践》 在现代企业级应用开发中,Spring、Hibernate和Java Transaction API(JTA)是常见的技术组合。Spring作为轻量级的IoC(Inversion of Control)和AOP(Aspect ...

    JTA-demo:spring+hibernate+jta+mysql

    5. **配置文件**: 项目可能包含`applicationContext.xml`(Spring配置文件)、`persistence.xml`(Hibernate配置文件)和其他数据库连接配置,这些文件详细说明了如何配置Spring、Hibernate和JTA。 6. **事务管理...

    struts1+spring+hibernate所需jar包

    配置文件(如`struts-config.xml`、`spring-servlet.xml`、`hibernate.cfg.xml`)也需要正确设置,以定义应用程序的行为和组件间的交互。 总的来说,"struts1+spring+hibernate所需jar包"是Java Web开发中的基础...

    spring+hibernate+struts架包

    1. **依赖注入**:通过配置文件或注解,Spring可以自动管理对象的创建和依赖关系,降低了对象间的耦合度。 2. **AOP**:面向切面编程允许开发者定义“切面”,即关注点的模块化,例如日志、事务管理等,从而提高代码...

    Jboss4.2.2+Spring2.5.6+hibernate+JTA事务的实现

    3. **配置Hibernate**:配置Hibernate的`hibernate.cfg.xml`,设置JTA数据源,并指定使用Spring的事务管理。 4. **编写业务逻辑**:在你的服务类中,你可以利用Spring的@Autowired注解注入需要的bean,然后在方法上...

    Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源(可运行)

    本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...

    Spring boot+Atomikos+JTA+Hibernate+mybatis+MySQL实现分布式事务+多数据源

    本案例主要探讨如何利用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate以及MyBatis,结合MySQL数据库,实现一个跨数据源的分布式事务解决方案。 首先,Spring Boot是一个基于Spring框架的快速开发...

    Spring+hibernate参考书

    《Spring+Hibernate参考书》是一本专注于整合Spring框架与Hibernate持久化库的指南,旨在帮助开发者深入了解和熟练掌握这两种在Java开发中广泛使用的开源技术。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)...

    spring+hibernate需要的包

    同时,还需要配置Hibernate的实体类、映射文件(.hbm.xml)或者使用注解进行对象关系映射。 总之,Spring和Hibernate的集成涉及到多个库的协同工作,理解和配置这些库是成功构建一个基于这两者的企业级应用的基础。...

    Spring+Hibernate.zip ppt

    1. **依赖注入(Dependency Injection,DI)**:Spring 通过 DI 提供了松散耦合的组件,使得对象之间的依赖关系可以通过配置文件或注解来管理,而不是硬编码。 2. **面向切面编程(Aspect-Oriented Programming,...

    spring+hibernate代码实例集

    2.2 Hibernate默认支持JTA(Java Transaction API)事务,Spring可以配置JtaTransactionManager,配合Hibernate实现全局事务管理。在测试环境中,通常使用PlatformTransactionManager,如...

    spring+hibernate+atomikos多数据源

    Spring、Hibernate和Atomikos的组合就是一种强大的解决方案,它们可以协同工作以支持多数据源的分布式事务处理。接下来,我们将深入探讨这些技术以及如何配置它们来实现多数据源。 1. **Spring**: Spring是一个...

    spring+hibernate+jtom demo

    在本文中,我们将深入探讨如何使用Spring、Hibernate和JOTM进行分布式事务管理,以实现在一个Service方法中同时操作两个不同数据源的数据,并确保任何错误都能导致所有操作回滚。首先,我们需要了解这些技术的基本...

    Spring+Hibernate+Struts2整合(包含Demo)

    3. **配置文件**:编写Spring的bean配置文件、Hibernate的实体映射文件、Struts2的配置文件。 4. **实体类**:创建与数据库表对应的Java类,并用Hibernate的注解进行映射。 5. **DAO层**:创建数据访问对象,利用...

    Eclipse下Spring+SpringMVC+Hibernate框架环境搭建demo

    创建实体类,使用Hibernate注解或配置文件映射到数据库表。 7. **创建Controller**: 在`src/main/java`目录下创建`com.yourpackage.controller`包,编写SpringMVC的Controller类,处理HTTP请求。 8. **创建视图*...

    spring+hibernate

    1. **配置 Hibernate SessionFactory**:Spring 提供 LocalSessionFactoryBean,用于配置 Hibernate 的 SessionFactory。 2. **使用 HibernateTemplate 或 SessionFactory 代理**:Spring 提供了 HibernateTemplate...

    Struts2+Spring2+Hibernate3+Annotation所需JAR包

    ### Struts2+Spring2+Hibernate3+Annotation所需JAR包详解 在Java Web开发领域,Struts2、Spring2和Hibernate3是三个非常重要的框架,它们分别负责Web层、业务逻辑层和服务持久化层的功能实现。为了更好地整合这三...

    基于注解的Spring MVC+Hibernate简单入门

    ### 基于注解的Spring MVC+Hibernate简单入门 #### 概述 本文主要介绍如何使用基于注解的方式构建Spring MVC与Hibernate相结合的应用程序。这种方式不仅简化了配置过程,而且提高了开发效率。我们将通过一个具体的...

Global site tag (gtag.js) - Google Analytics