Java Spring是否真的启动了一个新事务?

Java Spring是否真的启动了一个新事务?,java,jboss,spring-transactions,spring-jms,Java,Jboss,Spring Transactions,Spring Jms,我的spring(4.1.1)应用程序部署在JBoss-6.10-final实例上,因此它使用基于容器的事务管理器和数据源。对于消息传递,我使用带有XA队列连接工厂设置的TIBCO EMS 8.1。Java版本是1.8.0_20。所有这些都在我的Ubuntu 14.04笔记本电脑上运行 我需要通过JMS发送请求,然后等待回复。我从中调用的bean将事务传播设置为propagation.REQUIRED,因此我需要在新事务中发送请求,然后等待回复。这意味着请求在单独的bean中发送,事务传播设置为

我的spring(4.1.1)应用程序部署在JBoss-6.10-final实例上,因此它使用基于容器的事务管理器和数据源。对于消息传递,我使用带有XA队列连接工厂设置的TIBCO EMS 8.1。Java版本是1.8.0_20。所有这些都在我的Ubuntu 14.04笔记本电脑上运行

我需要通过JMS发送请求,然后等待回复。我从中调用的bean将事务传播设置为propagation.REQUIRED,因此我需要在新事务中发送请求,然后等待回复。这意味着请求在单独的bean中发送,事务传播设置为propagation.REQUIRES\u NEW。 它是有效的,但我从JBoss得到了一个令人担忧的警告:

14-10-02 12:06:12902警告 [org.jboss.tm.usertx.UserTransactionRegistry](http-0.0.0-8080-1) 通知侦听器时出错 org.jboss.resource.connectionmanager。CachedConnectionManager@1917b4de userTransactionStarted的:java.lang.IllegalStateException:正在尝试 更改事务处理简单in 入伍在 org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.list(TxConnectionManager.java:690) 在 org.jboss.resource.connectionmanager.TxConnectionManager.transactionStarted(TxConnectionManager.java:427) 在 org.jboss.resource.connectionmanager.CachedConnectionManager.userTransactionStarted(CachedConnectionManager.java:350) 在 org.jboss.tm.usertx.UserTransactionRegistry.userTransactionStarted(UserTransactionRegistry.java:119) 在 org.jboss.tm.usertx.client.ServerVMClientUserTransaction.begin(ServerVMClientUserTransaction.java:141) 在 org.springframework.transaction.jta.JtaTransactionManager.doJtaBegin(JtaTransactionManager.java:875) 在 org.springframework.transaction.jta.JtaTransactionManager.doBegin(JtaTransactionManager.java:832) 在 org.springframework.transaction.support.AbstractPlatformTransactionManager.handleExistingTransaction(AbstractPlatformTransactionManager.java:425) 在 org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:349) 在 org.springframework.transaction.interceptor.TransactionSpectSupport.createTransactionIfEssential(TransactionSpectSupport.java:438) 在 org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:261) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 在com.sun.proxy.$Proxy234.request(未知源)处 com.izazi.ioriginate.framework.spring.jms.AbstractRequestReply.request(AbstractRequestReply.java:58) 在 com.izazi.ioriginate.service.addressvalidation.AddressValidationServiceImpl.validate(AddressValidationServiceImpl.java:34) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:483) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157) 在 org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 在 org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:266) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 位于com.sun.proxy.$Proxy235.validate(未知源) com.izazi.ioriginate.services.dwr.AddressValidation.validate(AddressValidation.java:40) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:483) org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34) 在 org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) 在 org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431) 在 org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283) 在 org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52) 在 org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101) 在 org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:754) http.HttpServlet.service(HttpServlet.java:847)位于 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 在 org.springf
if (definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRES_NEW) {
    if (debugEnabled) {
        logger.debug("Suspending current transaction, creating new transaction with name [" +
                definition.getName() + "]");
    }
    SuspendedResourcesHolder suspendedResources = suspend(transaction);
    try {
        boolean newSynchronization = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
        DefaultTransactionStatus status = newTransactionStatus(
                definition, transaction, true, newSynchronization, debugEnabled, suspendedResources);
        doBegin(transaction, definition);
        prepareSynchronization(status, definition);
        return status;
    }
    catch (RuntimeException beginEx) {
        resumeAfterBeginException(transaction, suspendedResources, beginEx);
        throw beginEx;
    }
    catch (Error beginErr) {
        resumeAfterBeginException(transaction, suspendedResources, beginErr);
        throw beginErr;
    }
}