这几天在整合struts2+spring2.5+hibernate3 
遇到个配置事务的问题:
//开头部分省略
<!-- SessionFactory -->
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean> <!-- 配置事务管理器bean,使用HibernateTransactionManager事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 为事务管理器注入sessionFactory" -->
<property name="sessionFactory" ref="SessionFactory" />
</bean>
<!-- 配置事务拦截器Bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 为事务拦截器bean注入一个事物管理器 -->
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<!-- 定义事务传播属性 -->
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="change*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定满足哪些bean自动生成业务代理 -->
<property name="beanNames">
<!-- 需要自动创建事务代理的bean -->
<list>
<value>UserDAO</value>
</list>
<!-- 其它需要自动创建事务代理的bean -->
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 可增加其它的interceptor -->
</list>
</property>
</bean>
<bean id="UserDAO" class="com.dao.UserDAO">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
//省略
如上配置,启动tomcate时,初始化错误:
2008-09-08 11:01:54,453 ERROR [org.springframework.web.context.ContextLoader] - Context initializati
on failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFacto
ry' defined in ServletContext resource [/WEB-INF/classes/applicationContext/applicationContext.xml]:
 Instantiation of bean failed; nested exception is java.lang.AbstractMethodError: org.springframewor
k.aop.framework.autoproxy.BeanNameAutoProxyCreator.determineConstructor(Ljava/lang/Class;Ljava/lang/
String;)Ljava/lang/reflect/Constructor;
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(A
bstractAutowireCapableBeanFactory.java:451)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFac
tory.java:251)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(Defau
ltSingletonBeanRegistry.java:156)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory
.java:248)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory
.java:160)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingle
tons(DefaultListableBeanFactory.java:284)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicatio
nContext.java:352)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.j
ava:244)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.jav
a:187)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderLis
tener.java:49)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at org.apache.catalina.core.StandardService.start(StandardService.java:516)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.AbstractMethodError: org.springframework.aop.framework.autoproxy.BeanNameAutoPr
oxyCreator.determineConstructor(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Constructor;
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineCon
structorFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:743)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanIn
stance(AbstractAutowireCapableBeanFactory.java:716)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(A
bstractAutowireCapableBeanFactory.java:387)
        ... 24 more
2008-9-8 11:01:54 org.apache.catalina.core.StandardContext start
严重: Error listenerStart什么原因呀,去掉事务配置就没问题了,可没有事务配置不提交
关键是不会配置事务!?
急盼指点!谢谢!~

解决方案 »

  1.   

    我的事务配置希望对楼主有用。
    <?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: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.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
    default-autowire="byName">
      
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation"
    value="classpath:hibernate.cfg.xml">
    </property>
    </bean>
    <!-- TransactionManager  -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
    <ref local="sessionFactory"/>
    </property>
    </bean>

    <!-- 面向切面编程 -->
    <aop:config>
        <!-- 切入点 -->
            <aop:advisor pointcut="execution(* com.zhaosoft.game.service..*(..))" advice-ref="txAdvice"/>
        </aop:config>
        
        <!-- 创建一个切面 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <!-- 只要方法名 add***** -->
                <tx:method name="add*" />  
                <tx:method name="delete*"/>
                <tx:method name="update*"/>
                </tx:attributes>
        </tx:advice>
    <bean id="productDao" class="com.zhaosoft.game.dao.impl.ProductsDAOImpl"/>
    <bean id="productsService" class="com.zhaosoft.game.service.impl.ProductsServiceImpl"/>
    </beans>
      

  2.   

    spring与Hibernate包冲突问题:
    Spring的AOP编程时,会用到这几个lib:
    asm-2.2.3.jar
    asm-commons-2.2.3.jar
    asm-util-2.2.3.jar
    cglib-nodep-2.1_3.jar
    Hibernate也包含类似的包lib:
    asm.jar
    asm-attrs.jar
    cglib-2.1.3.jar
    而导致的包冲突。
    只要将hibernate用到的三个包都删掉就应该没有问题了,可是正常情况下这样是解决不了问题的,因为tomcat下已经放在webapps文件夹下的包却还没有删除,所以我们要手工删除它,找到C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\目录下,你的项目,WEB-INF文件夹,lib文件夹,将三个包删除就ok了
    还得在项目右键->Build path->Configur Build path...->左Java Build path->右Libraries
    下面找到Hibernate那三个包,删除重新编译一下项目应该就没问题了
    引用他人的但是能解决问题,谢谢原著.