尝试在我的 WAR 中运行 Spring @Transactional 服务方法时出现“事务未激活”

2023-12-02

我正在使用 Spring 3.1.1.RELEASE、Hibernate 4.1.0.Final 和 JBoss 7.1.1.Final。当我尝试运行一个已将该方法注释为 @Transactional 的服务方法时,事务完成后出现以下错误:

19:25:43,968 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http--127.0.0.1-8080-1) SQL Error: 0, SQLState: null
19:25:43,973 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/myprojectclient].[dispatcher]] (http--127.0.0.1-8080-1) Servlet.service() for servlet dispatcher threw exception: javax.resource.ResourceException:     IJ000459: Transaction is not active: tx=TransactionImple < ac, BasicAction: 0:ffffc0a80064:-6b6427d:5114500c:3bd status: ActionStatus.ABORT_ONLY >
    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:352)
    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)
    at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:129)
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:67) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:276) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at $Proxy169.prepareStatement(Unknown Source)   at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:147) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:166) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:145) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1739) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:828) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2463) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2449) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2279) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2274) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1115) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:280) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getSingleResult(CriteriaQueryCompiler.java:264) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.mainco.subco.core.repo.AbstractHibernateDAO.findByUniqueConstraint(AbstractHibernateDAO.java:100) [core-0.0.1-SNAPSHOT.jar:]
    at org.mainco.subco.user.repo.RoleDaoImpl.findRoleByName(RoleDaoImpl.java:17) [user-0.0.1-SNAPSHOT.jar:]
    at org.mainco.subco.myproject.service.TrainingSessionServiceImpl.addUserLinks(TrainingSessionServiceImpl.java:222) [pd-0.0.1-SNAPSHOT.jar:]
    at org.mainco.subco.myproject.service.TrainingSessionServiceImpl.createOrUpdateTrainingSessionFromOrder(TrainingSessionServiceImpl.java:141) [pd-0.0.1-SNAPSHOT.jar:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [classes.jar:1.6.0_37]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [classes.jar:1.6.0_37]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [classes.jar:1.6.0_37]
    at java.lang.reflect.Method.invoke(Method.java:597) [classes.jar:1.6.0_37]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) [spring-tx-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at $Proxy132.createOrUpdateTrainingSessionFromOrder(Unknown Source) at org.mainco.subco.myproject.quartz.ProcessPDWorker.createTrainingSessions(ProcessPDWorker.java:106) [classes:]
    at org.mainco.subco.myproject.quartz.ProcessPDWorker.createOrUpdateTrainingSessions(ProcessPDWorker.java:85) [classes:]
    at org.mainco.subco.myproject.quartz.ProcessPDWorker.work(ProcessPDWorker.java:67) [classes:]
    at org.mainco.subco.myproject.controller.IndexController.execute(IndexController.java:66) [classes:]
    at org.mainco.subco.myproject.controller.IndexController.refreshPD(IndexController.java:38) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [classes.jar:1.6.0_37]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [classes.jar:1.6.0_37]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [classes.jar:1.6.0_37]
    at java.lang.reflect.Method.invoke(Method.java:597) [classes.jar:1.6.0_37]
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) [spring-webmvc-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_37]

这是我正在使用的 persistence.xml ...

<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="myprojectclientunit" transaction-type="JTA">
        <!-- <provider>org.hibernate.ejb.HibernatePersistence</provider> -->
        <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
        <class>org.mainco.subco.ecom.domain.Product</class>
        <class>org.mainco.subco.ebook.domain.TableOfContentsItem</class>
        <class>org.mainco.subco.ebook.domain.Resource</class>
        <class>org.mainco.subco.ebook.domain.Ebook</class>
        <class>org.mainco.subco.ebook.domain.Part</class>
        <class>org.mainco.subco.ebook.domain.Content</class>
        <class>org.mainco.subco.ebook.domain.ContentTopic</class>
        <class>org.mainco.subco.standards.domain.AbTopic</class>
        <class>org.mainco.subco.standards.domain.AbStandard</class>
        <class>org.mainco.subco.standards.domain.AbMss</class>
        <class>org.mainco.subco.standards.domain.CorrelationType</class>
        <class>org.mainco.subco.core.domain.Grade</class>
        <class>org.mainco.subco.core.domain.Subject</class>
        <class>org.mainco.subco.ecom.domain.Contract</class>
        <class>org.mainco.subco.organization.domain.Country</class>
        <class>org.mainco.subco.organization.domain.State</class>
        <class>org.mainco.subco.organization.domain.Address</class>
        <class>org.mainco.subco.organization.domain.OrganizationType</class>
        <class>org.mainco.subco.organization.domain.Organization</class>
        <class>org.mainco.subco.user.domain.User</class>
        <class>org.mainco.subco.user.domain.UserContract</class>
        <class>org.mainco.subco.user.domain.Role</class>
        <class>org.mainco.subco.pd.domain.AccessCode</class>
        <class>org.mainco.subco.pd.domain.Link</class>
        <class>org.mainco.subco.pd.domain.LinkType</class>
        <class>org.mainco.subco.pd.domain.TrainingSession</class>
        <class>org.mainco.subco.pd.domain.TrainingSessionTrainer</class>
        <class>org.mainco.subco.pd.domain.TrainingSessionMaterial</class>
        <class>org.mainco.subco.pd.domain.TrainingSessionTeacher</class>
        <class>org.mainco.subco.pd.domain.SBTrainer</class>
        <properties>
            <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml" />
            <property name="jboss.entity.manager.factory.jndi.name"
                value="java:jboss/subco/myprojectpersistence" />
        </properties>
    </persistence-unit>
</persistence>

以下是我在 Spring 应用程序上下文中设置数据源/实体管理器的方法:

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

    <!-- JNDI name for EntityManagerFactory is defined in src/main/resources/META-INF/persistence.xml -->
    <jee:jndi-lookup jndi-name="java:jboss/subco/myprojectpersistence"
        id="entityManagerFactory" expected-type="javax.persistence.EntityManagerFactory" />

    <bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <!-- Application properties -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:application.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>

    <jee:jndi-lookup jndi-name="java:jboss/datasources/MySqlDS" id="dataSource" expected-type="javax.sql.DataSource"/>

    <tx:jta-transaction-manager />

</beans>

我的 $JBOSS_HOME/standalone/configuration/standalone.xml 文件中的 datasources 元素如下所示......

        <datasources>
            <datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true">
                <connection-url>jdbc:mysql://localhost:3306/mydb</connection-url>
                <driver>mysql</driver>
                <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                <pool>
                    <min-pool-size>10</min-pool-size>
                    <max-pool-size>100</max-pool-size>
                    <prefill>true</prefill>
                </pool>
                <security>
                    <user-name>username</user-name>
                    <password>password</password>
                </security>
                <statement>
                    <prepared-statement-cache-size>32</prepared-statement-cache-size>
                    <share-prepared-statements>true</share-prepared-statements>
                </statement>
            </datasource>
            <drivers>
                <driver name="mysql" module="com.mysql"/>
            </drivers>
        </datasources>

我有什么想法如何攻击这个吗?

Edit:添加我标记为@Transactional 的方法...

@Service("trainingSessionService")
@Transactional
public class TrainingSessionServiceImpl implements TrainingSessionService
{
    …
    public TrainingSession createOrUpdateTrainingSessionFromOrder(final Order order)
    {
        TrainingSession trSession = m_trainingSessionDao.findByOrderNumber(order.getId());

        LOG.info("Creating/updating training session associated with order #" + order.getId() + " associated with account " + (order.getAccount() != null ? order.getAccount().getAccountName() : "unknown"));;
        if (trSession == null)
        {
            trSession = new TrainingSession();
        } // if
        // Update training session fields from the order from which it
        // originated.
        trSession.setDescription("");
        trSession.setOrderNum(order.getId());
        final Set<Organization> implementingSchools = getImplementingSchools(order);
        trSession.setImplementingSchools(implementingSchools);
        final java.util.Date startDate = order.getDay1() != null ? order.getDay1() : Calendar.getInstance().getTime();
        trSession.setStartDate(startDate);
        trSession.setEndDate(order.getLastDay());
        trSession.setSubject(order.getInstituteSubject());
        trSession.setStatus(order.getStatus());
        addImplementationManager(trSession, order);
        m_trainingSessionDao.save(trSession);
        LOG.info("Finished saving training session with order id " + order.getId());
        // Adds SB coordinator and teacher links if they didn't already
        // exist before.
        addUserLinks(trSession);
        return trSession;
    }   // createOrUpdateTrainingSessionFromOrder  

K,找到了这个问题的答案。我使用的方法是调用其中的服务方法,该方法抛出异常。看来异常正在取消事务,因此当方法返回时,会报告我提到的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试在我的 WAR 中运行 Spring @Transactional 服务方法时出现“事务未激活” 的相关文章

随机推荐

  • 使用有限的操作对双端队列进行排序?

    您好 我在 Robert Sedgewick 的 算法第四版 中遇到了一个问题 出队排序 解释如何对一副牌进行排序 但唯一允许的操作是查看最上面两张牌的值 交换最上面两张牌以及将最上面的牌移动到这副牌的底部 我希望有人能解释一下这是如何完成
  • SQLite 是最适合用于嵌入式数据库的东西吗? [复制]

    这个问题在这里已经有答案了 我需要构建一个将安装在 Linux 服务器上的 Java 应用程序 当人们安装时 他们只需要安装这个应用程序 启动它 仅此而已 但我们有一些数据需要保存 我对MySQL说不 因为它需要服务器 我对 XML 说不
  • 编写/实现 API:可测试性与信息隐藏

    很多时候 我在参与 API 的设计 实现时都面临着这样的困境 我是一个非常坚定的支持者信息隐藏并尝试为此使用各种技术 包括但不限于内部类 私有方法 包私有限定符等 这些技术的问题在于它们往往会妨碍良好的可测试性 虽然其中一些技术可以解决 例
  • Android 可用内存

    每个应用程序有多少 RAM 可供使用 我在某处读到每个应用程序最多只能使用 16 MB 但系统总内存要高得多 每个应用程序的 Java 堆空间限制为 16MB 至少对于具有 普通 类屏幕的设备而言是如此 对于具有 大 级屏幕的设备 该限制显
  • 如何启动/强制下载 PHP 或其他语言的外部文件?

    如果您有驻留在外部的图像或其他文件 当用户单击它时如何强制浏览器下载链接 使用 内容处置 附件 header 可以做到这一点 但它不适用于驻留在外部的文件而不在本地读取和导入文件 您必须首先在服务器上加载资源 您可能还想做一些缓存
  • 如何在python中实现这个算法? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 这是某种类型的笛卡尔积 它是从初始固定长度的整数系列中生成的 使用指示该符号的符号所规定的规则生成附加系列n必须遵循的附加系列的数量 例如 生产额外 1 个系列 生产额外 3 个系列
  • 如何为另一个域设置 cookie

    假设我有一个名为a com 当加载该网站的特定页面 例如页面链接 时 我喜欢为另一个名为的网站设置一个 cookieb com 然后将用户重定向到b com 我的意思是 负载a com link我想设置一个cookieb com并将用户重定
  • 来自标记导出的 html 的可折叠标题/手风琴

    我正在尝试实现一个网页 其中每个 h2 都充当手风琴的项目 单击时 标题下的内容应展开 隐藏后 我已经完成了很多教程 但他们通常使用特定的 html 使用链接或按钮 但我的 html 是从标记语言 orgmode 导出的 所以不能以这种方式
  • 计算两个 CLLocationCooperative2D 之间的方位角

    非常 简单 的问题 给定两个 CLLocationCooperative2D 如何获得从第一个到第二个的方位角 以弧度表示 我对此做了很多研究 包括一般问题和 Objective C Cocoa Touch iOS 具体问题 这是我的实现
  • AWS Lambda(Node.js,v.8.10)和 Mongoose:MongoNetworkError 与数据库的连接超时

    Env AWS Lambda Node js v 8 10 waitForEmptyEventLoop false MongoDB 阿特拉斯 Mongoose 问题 有时 随机 我会收到下一个错误 MongoNetworkError con
  • Scala 中 == 和 .equals 有什么区别?

    有什么区别 and equals 在 Scala 中 什么时候使用哪个 实现和Java一样吗 编辑 相关问题讨论了具体案例AnyVal 更一般的情况是Any 你通常使用 它路由到equals 除了它对待null正确 引用相等 很少使用 是e
  • 使用解构为已定义的变量赋值

    根据 javascript info 下面的代码应该可以工作 https javascript info destructuring assignment object destructuring 在我的项目中 我已经定义了一些变量 现在我
  • 如何在页面加载之前触发JS页面重定向

    我使用以下脚本在第一次访问时将页面的访问者重定向到另一个页面 但它首先加载 index html 页面 然后触发重定向 谁能指出我如何在页面加载之前触发此脚本
  • .Net Core 1.1 HttpClient 与 DI

    以下是我正在使用的代码 namespace MySite Api using System Collections Specialized using System Linq using System Net using System Ne
  • Android - 模拟器处于横向模式,屏幕不旋转

    When I switch to landscape mode NUMPAD 7 or CTRL F11 the emulator rotates the screen to landscape orientation but the An
  • 如何分析 Closure Compiler 包大小

    我有一个 ClojureScript 中的应用程序 它使用 Google 的 Closure Compiler 作为编译器后端 使用高级优化得到的捆绑包似乎太大了 我责怪依赖项 但如何找出哪些模块占用输出包中最多的字节 我扫描了所有闭包编译
  • Fedora 12 上的 phpredis

    我正在尝试安装 phpredis 来使用我的 php 但问题是 每次我尝试让它工作时 我的 error log 都会发送以下错误 code PHP 致命错误 在 var www html testme php 第 5 行中找不到类 Redi
  • System V 中 x86_64 的 C 浮点值调用约定是什么?

    我目前正在深入研究汇编领域 主要是从 x86 64 C 和 System V AMD64 的角度 通常针对 Linux 通过按顺序使用以下寄存器 整数 以及隐含的指针 值的调用约定非常简单 RDI RSI RDX RCX R8 R9 XMM
  • 在 Python 中将函数传递给 re.sub

    我的字符串中某处包含一个数字 我试图用它们的文字符号替换这个数字 即 3 gt 3 我有一个函数可以做到这一点 现在的问题是找到字符串中的数字 同时保持字符串的其余部分完好无损 为此 我选择使用re sub函数 它可以接受 可调用 然而 传
  • 尝试在我的 WAR 中运行 Spring @Transactional 服务方法时出现“事务未激活”

    我正在使用 Spring 3 1 1 RELEASE Hibernate 4 1 0 Final 和 JBoss 7 1 1 Final 当我尝试运行一个已将该方法注释为 Transactional 的服务方法时 事务完成后出现以下错误 1