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的版本出现问题。
我的事务配置文件内容如下:
<?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>
相关推荐
这样,我们可以在Spring的配置文件中定义数据源、事务管理器、SqlSessionFactoryBean等,然后通过@Autowired注解注入到需要使用iBatis的Service层或DAO层。 在"spring+ibatis整合jar包"中,通常包含以下组件的jar...
3. **整合iBatis**:导入iBatis的库,配置`mybatis-config.xml`,包括数据源、事务管理器以及Mapper配置。在Spring配置文件中,定义SqlSessionFactoryBean和SqlSessionTemplate,用于创建SqlSession实例。 4. **配置...
同时,iBATIS支持事务管理,可以在Spring的事务管理器中进行配置,实现事务的统一管理。 文件"Spring 2.5 Reference.pdf"是Spring 2.5版本的官方参考文档,包含了Spring框架的详细介绍和使用指南,对理解Spring的...
关于`spring+ibatis`的集成,Spring是一个强大的企业级应用框架,它提供依赖注入和事务管理等功能。通过Spring,我们可以方便地管理和配置`ibatis`,实现DAO(数据访问对象)的声明式事务管理。在Spring中配置`...
下面,我们将详细探讨Ibatis的配置文件、映射文件以及其在实际应用中的使用。 一、Ibatis配置文件 Ibatis的主要配置文件是`mybatis-config.xml`,它是整个系统的全局配置文件。这个文件中包含了数据源、事务管理器...
例如,Struts处理用户请求,Spring管理对象生命周期和事务,iBatis负责数据库交互,而ExtJS则构建了前端的交互界面。这个实例对于学习者来说是一个很好的实践平台,能帮助理解这些框架的协同工作方式,并且可以从中...
在IT行业中,集成框架的使用是提升...首先,我们需要在Spring的配置文件中定义SqlSessionFactoryBean,它是Spring对Ibatis SqlSessionFactory的封装,通常会配置数据源、MyBatis的配置文件路径等参数。例如: ```xml ...
10. **Spring整合**:如果项目使用Spring,确保已经配置了事务管理器,例如`PlatformTransactionManager`,并为相关操作启用了事务。 以上是配置iBatis3.0时可能出现的一些常见错误及其解决方案。当遇到问题时,...
在实际开发中,iBatis支持多种数据源类型,包括JDBC、Oracle、MySQL等,且能与Spring等框架无缝集成,方便进行事务管理。此外,iBatis还提供了缓存机制,能够提高数据访问速度,但需谨慎使用,以免引发数据一致性...
XML配置文件在IT行业中扮演着至关重要的角色,特别是在Spring、Hibernate、Struts2和Ibatis这些流行的Java框架中。DTD(Document Type Definition)是XML的一个关键组成部分,它定义了XML文档结构的规则,帮助开发者...
本压缩包提供了针对MyBatis和iBatis的代码生成工具,帮助开发者快速构建SSM(Spring、SpringMVC、MyBatis)或SSI(Spring、SpringMVC、iBatis)项目。 1. MyBatis和iBatis概述: MyBatis是由Google Code托管,后...
查看源码有助于理解Spring MVC和iBatis如何协同工作,以及如何配置和使用它们。通过阅读源码,我们可以学习到如何定制拦截器、AOP切面、异常处理等高级特性。 标签 "工具" 指出这可能涉及到一些辅助工具或者最佳...
这个"springMvc-spring3+hibernate3+ibatis2.3"的项目可能包含了上述所有组件的示例代码。通过学习和理解这个案例,开发者可以更好地掌握Spring和Hibernate的整合,以及如何利用它们构建数据驱动的Web应用。在实际...
6. **事务管理**:Ibatis可以和Spring等框架集成,进行声明式事务管理。 赖加才老师的教程很可能还会涉及Ibatis的高级特性,如缓存、结果集自动映射、一对一和一对多的关联映射、自定义插件等。通过学习这些源代码...
它通常与Spring框架结合使用,通过Spring的依赖注入,可以方便地将inkface4ibatis的组件注入到项目中。同时,inkface4ibatis提供了丰富的API和文档,帮助开发者快速上手并深入理解其设计理念和使用方法。 总的来说...
1. **SQL Map Configuration File**:这是整个SQL Maps的核心,它包含了所有SQL映射文件的引用,以及数据源和事务管理器的配置。 2. **SQL ID**:每个SQL语句都有一个唯一的ID,这使得在代码中调用SQL时更加方便和...
2. **Spring集成配置**:ibatis也可以与Spring框架结合使用,以实现更高效的依赖注入和事务管理。 ```xml <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <value>...
《跟我学Spring3》这本书是针对Spring 3版本的一份详细教程,涵盖了Spring框架的核心特性以及与其他技术的集成。以下是对书中的主要内容的详细解析: 1. **IoC(Inversion of Control)与DI(Dependency Injection...
4. **事务管理**:iBatis提供了简单的事务控制,可以在Java代码中手动管理,也可以结合Spring等框架实现声明式事务。 5. **缓存机制**:内置了本地缓存和二级缓存,可以提高数据读取速度,减少对数据库的压力。...
3. 配置SqlMapClient:在Spring等框架中配置iBATIS的SqlMapClient,注入到Service层。 4. 调用方法:在业务逻辑中,通过`UserMapper`接口调用`selectUserById`方法,传入用户ID,iBATIS会执行对应的SQL语句并返回...