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

关于Spring + ibatis事务配置,以及出错分析

 
阅读更多

1.最近在忙于做一个项目,用到EXTJS4.0 + spring + ibatis,在事务回滚的时候出现了问题?搞了一天才解决

 

解析步骤:

(1)由于ibatis引擎有多个,有的支持事务,有的不支持,查询如下:


只有InnoDB引擎支持事务控制,所以需要修改数据库引擎,有两种方法:

A、我们在mysql的初始化文件my.ini里设置mysql数据库默认引擎;my.ini文件中,在[mysqld]下加上
default-storage-engine=InnoDB // 设置默认引擎为InnoDB。

 

B、直接在表后面加上 ENGINE=InnoDB也可以,如下:

DROP TABLE IF EXISTS `forgetwork`;

CREATE TABLE `forgetwork` (
  `forgetID` int(11) NOT NULL AUTO_INCREMENT,
  `employeeID` int(11) NOT NULL,
  `forgetDate` date NOT NULL,
  PRIMARY KEY (`forgetID`),
  UNIQUE KEY `employeeID_Date` (`employeeID`,`forgetDate`)
) ENGINE=InnoDB AUTO_INCREMENT=353 DEFAULT CHARSET=utf8;

 

(2)结果修改以后还不行,于是怀疑是配置的问题,加过发现切入点少配置了一层:

修改前:

<aop:config>
		<aop:pointcut id="servicesPointcut"
			expression="execution(* com.ml.org.*.service.impl.*


(..))"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="servicesPointcut" />
	</aop:config>

 修改后:

<aop:config>
		<aop:pointcut id="servicesPointcut"
			expression="execution(* com.ml.org.*.service.impl.*.*


(..))"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="servicesPointcut" />
	</aop:config>

 

(3)结果还是不行,不过这次是报错了,事务已经启动了,如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'workManageService' defined in ServletContext resource [/WEB-INF/classes/spring/applicationContext-service.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:478)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4681)
	at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5184)
	at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5179)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)

 

这个错误比较明显,缺少CGLIB包,于是下载了个:cglib-2.2.jar。

 

(4)结果还是报错,如下:

 

 org.objectweb.asm下面的类找不到ClassNotFound



   asm-2.2.2.jar

   asm-commons-2.2.2.jar
   asm-util-2.2.2.jar

 

在这里得到一个消息:(转)

在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
Hibernate使用如果lib:
asm.jar
asm-attrs.jar
其中asm-2.2.2.jar与asm.jar存在类上的冲突!!!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。
解决办法是:
1.去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
2.加入Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar

 

(5)下载后,添加到classpath下,还是报错,如下:

 

Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm 

 

原因:是cglib的版本出现问题。

使用 cglib-nodep-2.2.jar 替换掉 cglib-2.2.jar 这个文件。
 
(6)终于解决问题了。
 
 注意:默认Spring仅支持RuntimeException回滚操作;
           在后续的项目中发现不管怎么抛出自定义异常(继承Exception)都不会滚,无奈只能使自定义异常
           继承RuntimeException,才得到解决。

 

我的事务配置文件内容如下:

 

<?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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:jdbc.properties</value>
			</list>
		</property>
	</bean>

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<bean id="clientFactory" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
		<property name="configLocation">
			<value>classpath:ibatis/config.xml</value>
		</property>
	</bean>

	<!-- 配置事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 管理事务操作 -->

	<aop:config>
		<aop:pointcut id="servicesPointcut"
			expression="execution(* com.ml.org.*.service.impl.*.*(..))"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="servicesPointcut" />
	</aop:config>
	<!-- 事务控制 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!--  
			<tx:method name="create*" propagation="REQUIRED"/>
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="mod*" propagation="REQUIRED" />
			<tx:method name="update" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
		    -->
			<tx:method name="get*" read-only="true" />
			<tx:method name="query*" read-only="true" />
			<tx:method name="*" rollback-for="BMSException"/>



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

 

 

 

  • 大小: 48.1 KB
0
0
分享到:
评论
1 楼 myali88 2012-02-20  
能把你项目的截个图看看吗?

相关推荐

    spring+ibatis所需要的jar包

    这样,我们可以在Spring的配置文件中定义数据源、事务管理器、SqlSessionFactoryBean等,然后通过@Autowired注解注入到需要使用iBatis的Service层或DAO层。 在"spring+ibatis整合jar包"中,通常包含以下组件的jar...

    Struts2+Spring+ibatis框架搭建

    3. **整合iBatis**:导入iBatis的库,配置`mybatis-config.xml`,包括数据源、事务管理器以及Mapper配置。在Spring配置文件中,定义SqlSessionFactoryBean和SqlSessionTemplate,用于创建SqlSession实例。 4. **配置...

    SPRING JAVA IBATIS文档

    同时,iBATIS支持事务管理,可以在Spring的事务管理器中进行配置,实现事务的统一管理。 文件"Spring 2.5 Reference.pdf"是Spring 2.5版本的官方参考文档,包含了Spring框架的详细介绍和使用指南,对理解Spring的...

    ibatis 开发指南+操作过程+核心配置文件

    关于`spring+ibatis`的集成,Spring是一个强大的企业级应用框架,它提供依赖注入和事务管理等功能。通过Spring,我们可以方便地管理和配置`ibatis`,实现DAO(数据访问对象)的声明式事务管理。在Spring中配置`...

    Ibatis的应用和配置

    下面,我们将详细探讨Ibatis的配置文件、映射文件以及其在实际应用中的使用。 一、Ibatis配置文件 Ibatis的主要配置文件是`mybatis-config.xml`,它是整个系统的全局配置文件。这个文件中包含了数据源、事务管理器...

    struts spring ibatis extjs 实例

    例如,Struts处理用户请求,Spring管理对象生命周期和事务,iBatis负责数据库交互,而ExtJS则构建了前端的交互界面。这个实例对于学习者来说是一个很好的实践平台,能帮助理解这些框架的协同工作方式,并且可以从中...

    ibatis_spring整合Demo

    在IT行业中,集成框架的使用是提升...首先,我们需要在Spring的配置文件中定义SqlSessionFactoryBean,它是Spring对Ibatis SqlSessionFactory的封装,通常会配置数据源、MyBatis的配置文件路径等参数。例如: ```xml ...

    配置ibatis3.0时,发生的小错误

    10. **Spring整合**:如果项目使用Spring,确保已经配置了事务管理器,例如`PlatformTransactionManager`,并为相关操作启用了事务。 以上是配置iBatis3.0时可能出现的一些常见错误及其解决方案。当遇到问题时,...

    ibatis开发指南(中文版)

    在实际开发中,iBatis支持多种数据源类型,包括JDBC、Oracle、MySQL等,且能与Spring等框架无缝集成,方便进行事务管理。此外,iBatis还提供了缓存机制,能够提高数据访问速度,但需谨慎使用,以免引发数据一致性...

    xml配置文件自动提示(Spring2.5,Hibernate3.0,Struts2,Ibatis3) Dtd 文件及操作

    XML配置文件在IT行业中扮演着至关重要的角色,特别是在Spring、Hibernate、Struts2和Ibatis这些流行的Java框架中。DTD(Document Type Definition)是XML的一个关键组成部分,它定义了XML文档结构的规则,帮助开发者...

    mybatis和ibatis代码生成工具

    本压缩包提供了针对MyBatis和iBatis的代码生成工具,帮助开发者快速构建SSM(Spring、SpringMVC、MyBatis)或SSI(Spring、SpringMVC、iBatis)项目。 1. MyBatis和iBatis概述: MyBatis是由Google Code托管,后...

    springMVC-ibatis2

    查看源码有助于理解Spring MVC和iBatis如何协同工作,以及如何配置和使用它们。通过阅读源码,我们可以学习到如何定制拦截器、AOP切面、异常处理等高级特性。 标签 "工具" 指出这可能涉及到一些辅助工具或者最佳...

    Spring框架

    这个"springMvc-spring3+hibernate3+ibatis2.3"的项目可能包含了上述所有组件的示例代码。通过学习和理解这个案例,开发者可以更好地掌握Spring和Hibernate的整合,以及如何利用它们构建数据驱动的Web应用。在实际...

    赖加才老师的ibatis教程源代码以及完整开发包

    6. **事务管理**:Ibatis可以和Spring等框架集成,进行声明式事务管理。 赖加才老师的教程很可能还会涉及Ibatis的高级特性,如缓存、结果集自动映射、一对一和一对多的关联映射、自定义插件等。通过学习这些源代码...

    inkface4ibatis

    它通常与Spring框架结合使用,通过Spring的依赖注入,可以方便地将inkface4ibatis的组件注入到项目中。同时,inkface4ibatis提供了丰富的API和文档,帮助开发者快速上手并深入理解其设计理念和使用方法。 总的来说...

    iBATIS-SqlMaps-2_cn.pdf

    1. **SQL Map Configuration File**:这是整个SQL Maps的核心,它包含了所有SQL映射文件的引用,以及数据源和事务管理器的配置。 2. **SQL ID**:每个SQL语句都有一个唯一的ID,这使得在代码中调用SQL时更加方便和...

    ibatis和mybatis的前世今生.txt

    2. **Spring集成配置**:ibatis也可以与Spring框架结合使用,以实现更高效的依赖注入和事务管理。 ```xml &lt;bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"&gt; &lt;value&gt;...

    跟我学spring3(8-13).pdf

    《跟我学Spring3》这本书是针对Spring 3版本的一份详细教程,涵盖了Spring框架的核心特性以及与其他技术的集成。以下是对书中的主要内容的详细解析: 1. **IoC(Inversion of Control)与DI(Dependency Injection...

    iBatis 课件 源码 资源文件.rar

    4. **事务管理**:iBatis提供了简单的事务控制,可以在Java代码中手动管理,也可以结合Spring等框架实现声明式事务。 5. **缓存机制**:内置了本地缓存和二级缓存,可以提高数据读取速度,减少对数据库的压力。...

    iBATIS SQL Maps

    3. 配置SqlMapClient:在Spring等框架中配置iBATIS的SqlMapClient,注入到Service层。 4. 调用方法:在业务逻辑中,通过`UserMapper`接口调用`selectUserById`方法,传入用户ID,iBATIS会执行对应的SQL语句并返回...

Global site tag (gtag.js) - Google Analytics