【问题标题】:How to configure Spring for using TransactionManager如何配置 Spring 以使用 TransactionManager
【发布时间】:2014-11-12 10:58:41
【问题描述】:

我正在尝试了解如何使用 Spring DataSourceTransactionManager

我正在尝试关注这个example。 但是,当我从 Eclipse 启动 Tomcat 时,我得到了这个错误:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getDeclaredMethods(Unknown Source)
    at org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:159)
    at org.springframework.context.annotation.ConfigurationClassUtils.isLiteConfigurationCandidate(ConfigurationClassUtils.java:106)
    at org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:87)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:257)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:227)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:623)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:388)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 23 more

这是DispatcherServlet.xml的相关代码

   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">          
             <property name="dataSource" ref="dataSource"/>
         </bean>    

        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="create" />
            </tx:attributes>
        </tx:advice>

        <aop:config>
            <aop:pointcut id="userDaoTxPointcut" expression="execution(* com.springgestioneerrori.DAO.UtenteDAO.salvaUtente(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="userDaoTxPointcut" />
        </aop:config>   

salvaUtente() 是我将处理多个 inserts 的方法(现在仍然是 exmpty)。

【问题讨论】:

  • 如果它带有@Transactional 注释,那么到底为什么你有基于 xml 的 tx 配置?删除 tx:adviceaop:config 并添加 tx:annotation-driven。该错误与您的类路径缺少依赖项有关(可能是 aspectjrt.jar 或 aspectjweaver.jar)
  • 对不起,我正在编辑另一个帖子,我忘了删除那句话,我实际上没有注释。无论如何,我将 aspectj-1.6.9 添加到我的类路径中,我得到了同样的错误。

标签: java spring hibernate spring-mvc


【解决方案1】:

您的类路径中缺少一个 jar:

<dependency>    
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>${aspectjweaver.version}</version>    
</dependency>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-10-09
  • 2010-09-12
  • 2019-07-29
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多