- 浏览: 197539 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wentry:
java中字符带有斜杠时,比如\\x00\\x00\\x00\ ...
java中调用js脚本 -
chenzheng8975:
...
ajax -
蓝色飞扬:
有用,也碰到这个问题了,多谢!
java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion -
刘宇斌:
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发 -
moxiaomomo:
同样的疑问啊...对tomcat缓存仍然一知半解...
tomcat 缓存
在我们的项目中我们可以使用spring的事务机制来处理,以此来节省工作量,一下就例子来讨论下:
实例:
采用spring2.x版本:hibenate3.x
首先:
看sessionfactory的配置,我们使用hibenate的sessionfactory配置:
<?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-2.0.xsd" default-autowire="byName" default-lazy-init="true"> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">----//在此由于我使用的是annoation形式的po 如果配置其他将不能持久化 <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> </bean>></beans>
当然也可以使用spring的datasource来配置,也就是使用:org.springframework.jdbc.datasource.DriverManagerDataSource,自我感觉这样分开比较好
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="connection.url"> jdbc:mysql://localhost:3306/hbman </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="hibernate.show_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <property name="cache.use_second_level_cache">false</property> <property name="cache.use_query_cache">false</property> <property name="connection.isolation">2</property> <mapping class="com.po.A" /> </session-factory> </hibernate-configuration>
我们的po类class A(使用hibenate anoation)
package com.po; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Version; @Entity public class A { private int id; private int anum; private String aname; private int version; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; } @Version public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } ....get set.. }
dao:
public class Dao extends HibernateDaoSupport { public Serializable save(Object entity){ return getHibernateTemplate().save(entity); } }
测试server:我们在两个需要事物处理的调用之间抛出异常:
public class TestSH { private Dao dao; public void save() throws MyE{ A a = new A(); a.setAname("aname"); a.setAnum(1); dao.save(a); if(true){ throw new MyE("************异常*************"); } A a1 = new A(); a1.setAname("aname1"); a1.setAnum(1); dao.save(a1); }..get set...
在这说明需要抛出RuntimeException(或者子类)或者Exception的子类,如果抛出Exception将spring将不能对他进行自动回滚,需要我们在文件中配置,如下:
<tx:.... rollback-for="java.lang.Exception"/>//也就是spring所谓的 Winning rollback rule
事务配置:
<tx:advice id="txAdviceService" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="load*" read-only="true"/> <tx:method name="find*" read-only="true"/> <tx:method name="list*" read-only="true"/> <tx:method name="check*" read-only="true"/> <tx:method name="browse*" read-only="true"/> <tx:method name="search*" read-only="true"/> <tx:method name="*" read-only="false" rollback-for="java.lang.Exception"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="actionMethods" expression="execution(* com.action.*.*(..))"/> <aop:advisor advice-ref="txAdviceService" pointcut-ref="actionMethods"/> </aop:config> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean>
测试配置如下:
<bean id="dao" class="com.server.Dao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="test" class="com.action.TestSH"> <property name="dao" ref="dao"></property> </bean>
说明: 需要自动事务的类必须是spring可加载的也就是需要在文件中配,否则就会出现事务不起作用的情况 具体的讨论文章可见javaeye上
测试类:
public class Test { private static TestSH testsh; static{ System.out.println("init....."); ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext-*.xml","applicationContext.xml"}); testsh = (TestSH) ctx.getBean("test"); } public static void main(String[] args) { try { testsh.save(); } catch (MyE e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
最终控制台信息:
09-08-31 16:52:06,187 DEBUG (org.springframework.transaction.interceptor.TransactionInterceptor:282) - Getting transaction for [com.action.TestSH.save] 2009-08-31 16:52:06,187 DEBUG (org.springframework.transaction.support.TransactionSynchronizationManager:140) - Retrieved value [org.springframework.orm.hibernate3.SessionHolder@191e4c] for key [org.hibernate.impl.SessionFactoryImpl@11415c8] bound to thread [main] 2009-08-31 16:52:06,187 DEBUG (org.springframework.transaction.support.TransactionSynchronizationManager:140) - Retrieved value [org.springframework.orm.hibernate3.SessionHolder@191e4c] for key [org.hibernate.impl.SessionFactoryImpl@11415c8] bound to thread [main] 2009-08-31 16:52:06,187 DEBUG (org.springframework.orm.hibernate3.HibernateTemplate:364) - Found thread-bound Session for HibernateTemplate Hibernate: insert into A (aname, anum, version) values (?, ?, ?) 2009-08-31 16:52:06,234 DEBUG (org.springframework.orm.hibernate3.HibernateTemplate:388) - Not closing pre-bound Hibernate Session after HibernateTemplate 2009-08-31 16:52:16,234 DEBUG (org.springframework.transaction.interceptor.TransactionInterceptor:327) - Completing transaction for [com.action.TestSH.save] after exception: com.exc.MyE: ************异常************* 2009-08-31 16:52:16,234 DEBUG (org.springframework.transaction.interceptor.RuleBasedTransactionAttribute:130) - Applying rules to determine whether transaction should rollback on com.exc.MyE: ************异常************* 2009-08-31 16:52:16,234 DEBUG (org.springframework.transaction.interceptor.RuleBasedTransactionAttribute:148) - Winning rollback rule is: RollbackRuleAttribute with pattern [java.lang.Exception] 2009-08-31 16:52:16,234 DEBUG (org.springframework.orm.hibernate3.HibernateTransactionManager:846) - Triggering beforeCompletion synchronization 2009-08-31 16:52:16,234 DEBUG (org.springframework.orm.hibernate3.HibernateTransactionManager:751) - Initiating transaction rollback 2009-08-31 16:52:16,234 DEBUG (org.springframework.orm.hibernate3.HibernateTransactionManager:593) - Rolling back Hibernate transaction on Session [org.hibernate.impl.SessionImpl@4298e] 2009-08-31 16:52:16,265 DEBUG (org.springframework.orm.hibernate3.HibernateTransactionManager:875) - Triggering afterCompletion synchronization 2009-08-31 16:52:16,265 DEBUG (org.springframework.transaction.support.TransactionSynchronizationManager:276) - Clearing transaction synchronization 2009-08-31 16:52:16,265 DEBUG (org.springframework.transaction.support.TransactionSynchronizationManager:193) - Removed value [org.springframework.orm.hibernate3.SessionHolder@191e4c] for key [org.hibernate.impl.SessionFactoryImpl@11415c8] from thread [main] 2009-08-31 16:52:16,265 DEBUG (org.springframework.orm.hibernate3.HibernateTransactionManager:653) - Closing Hibernate Session [org.hibernate.impl.SessionImpl@4298e] after transaction 2009-08-31 16:52:16,265 DEBUG (org.springframework.orm.hibernate3.SessionFactoryUtils:771) - Closing Hibernate Session com.exc.MyE: ************异常************* at com.action.TestSH.save(TestSH.java:29)
另外针对事务配置可以在最外层的业务层设置,防止嵌套获取事务的情况(当然不会出现实务问题)。
评论
发表评论
-
hibernate 事务 annoation
2009-08-31 10:11 2073事务隔离 使用封锁技术,事务对申请的资源加锁,但是会影响 ... -
hibernate (十一 缓存Ehcache 采用annoation)
2009-08-24 17:08 2087从hibernate2.1开始ehcache已经作为hiber ... -
hibernate annoation (十 映射查询)
2009-08-20 17:26 1734在类级别上配置: @Entity @NamedQuer ... -
hibernate annoation 转载
2009-08-20 16:56 1285本文的主要内容如下: 详细解释了下面9个批注的含义及其批注所 ... -
hibernate annoation (九 cascading)
2009-08-20 16:02 10781,cascade=CascadeType.PERSIST ... -
hibernate annoation (八 关联映射)
2009-08-19 14:50 941onetoone:单向 1,主键关联: 在关联放使用@O ... -
hibernate annoation (七 继承映射)
2009-08-19 10:31 1664Table per Class Strategy: the & ... -
hibernate annoation (六 复合主键)
2009-08-18 18:05 1229主键类:定义为@Embeddable @Embeddable ... -
hibernate annoation (五 组件)
2009-08-18 17:54 851例如:有三个类 A B C 最终要持久化的类是A 而 B C ... -
hibernate annoation (四 lob)
2009-08-18 16:58 1546hiberante sql映射对应 Java数据 ... -
hibernate annoation (三 id生成器)
2009-08-18 16:28 1297id生成:hibernate内不可使用的id生成器可见代码 ... -
hibernate annoation (二创建表)
2009-08-18 14:56 1072为了追踪hibernate的信息 <property n ... -
hibernate annoation (一加载)
2009-08-18 13:55 1046转载请说明地址和作者 一,配置文件加载 1,Con ...
相关推荐
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
本教程将深入探讨如何在Spring框架中利用`TransactionInterceptor`进行声明式事务管理,与Hibernate集成实现高效的数据库事务控制。 首先,了解事务管理是至关重要的。事务是一组数据库操作,这些操作要么全部成功...
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml...这两个项目下来,关于spring事务这一块基本上明了,绝对对得起这个分数
在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...
在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...
本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...
总结起来,Spring和Hibernate的事务处理涉及了Spring的声明式事务管理、事务的传播行为、隔离级别以及回滚规则等概念。通过整合这两者,我们可以构建高效、健壮的企业级应用程序,确保数据的完整性和一致性。了解并...
本实例将深入探讨如何结合Spring的注解声明式事务管理与Hibernate的数据访问技术,构建一个完整的事务处理系统。 Spring框架以其灵活的依赖注入(DI)和面向切面编程(AOP)闻名,它允许开发者将事务管理从业务逻辑...
在IT行业中,数据库事务是确保数据一致性的重要机制,特别是在分布式系统和多层架构中,如Spring、Hibernate和MySQL的组合。本实例将深入探讨如何在这样的环境中实现事务管理。 Spring框架以其强大的依赖注入和AOP...
本主题将深入探讨Hibernate的编程式事务管理和Spring AOP的声明式事务管理,以及两者如何在实际项目中集成使用。 **Hibernate编程式事务管理** Hibernate作为流行的ORM(对象关系映射)框架,提供了对JDBC事务的...
首先,我们需要理解Spring事务管理的两种基本模式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式调用开始、提交、回滚等事务操作,而声明式事务管理则通过在XML或注解中声明事务边界,让Spring...
在整合中,Spring可以帮助管理Hibernate的SessionFactory和Session,通过配置可以实现事务的统一管理,提高代码的健壮性。例如,你可以使用Spring的PlatformTransactionManager接口来定义事务边界,确保数据操作的...
在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...
4. AOP集成:Spring的AOP可以与Hibernate的事务管理结合,提供更灵活的事务策略。 四、整合步骤 1. 引入依赖:在项目中添加Spring和Hibernate的依赖库。 2. 配置Hibernate:创建Hibernate的配置文件(如hibernate....
1. **Spring事务管理**: Spring提供了PlatformTransactionManager接口,它定义了事务管理的核心操作。在Spring MVC中,我们可以使用DataSourceTransactionManager,它依赖于JDBC的数据源来管理事务。在配置文件中,...
struts+hibernate+spring事务配置
同时,Spring还可以整合Struts和Hibernate,提供数据源配置、事务管理等功能,使得三大框架能够无缝协作。 4. 集成开发:这三个框架的集成通常是为了创建一个更加健壮和灵活的应用架构。Spring作为“胶水”,可以...
Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...