从Spring 4.1.6升级到4.2.4,突然获得TransactionRequiredException

从Spring 4.1.6升级到4.2.4,突然获得TransactionRequiredException,spring,hibernate,spring-ws,spring-transactions,Spring,Hibernate,Spring Ws,Spring Transactions,我已经升级到了最新的Spring版本,从4.1.6.Release升级到4.2.4.Release,突然之间,所有以前运行顺利的功能都出现了以下异常 javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call at org.springfr

我已经升级到了最新的Spring版本,从4.1.6.Release升级到4.2.4.Release,突然之间,所有以前运行顺利的功能都出现了以下异常

 javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:277) ~[na:4.2.4.RELEASE]
at com.sun.proxy.$Proxy51.persist(Unknown Source) ~[na:na]
拦截器类

public class MessageInterceptor implements EndpointInterceptor {

    @Resource
    private SaveMessageDO saveMessageDO;

    @Override
    public boolean handleRequest(MessageContext messageContext, Object endpoint) {
     saveMessageDO.addMessage(messageContext.getRequest()));        
     return true;
    }

    @Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint) {
        return false;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint) {
        return false;
    }

    @Override
    public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) {

    }
}


SaveMessageDO.class
    /**
     * The entity manager.
     */
    @PersistenceContext(unitName = "xxxHibernatePersistenceUnit")
    private EntityManager entityManager;


    /**
     * Adds the message.
     *
     * @param message the message
     */
    @Transactional(value = "xyzTxManager", propagation = Propagation.REQUIRED)
    public void addMessage(final Message message) {
        entityManager.persist(message);
    }
SharedIdentityManagerCreator.java中发生异常

else if (transactionRequiringMethods.contains(method.getName())) {
                    // We need a transactional target now, according to the JPA spec.
                    // Otherwise, the operation would get accepted but remain unflushed...
                    if (target == null || !TransactionSynchronizationManager.isActualTransactionActive()) {
                        throw new TransactionRequiredException("No EntityManager with actual transaction available " +
                                "for current thread - cannot reliably process '" + method.getName() + "' call");
                    }
                }
该方法用@Transaction注释标记,当我调用switch返回到较旧的spring版本时,它可以正常工作,没有任何问题


位代码背景,从Spring Webservices拦截器调用以在数据库中存储SOAP消息。

尝试将您的版本升级到4.2.4,如下所示:

4.2.4解决了4.2.x行中的一些回归,包括许多 修复和增强,没有立即遗留的问题。4.2.4是一个 建议所有4.x用户立即升级

我认为您遇到的问题可能与这个问题有关:以及这个bug报告

无论如何,如果不是新版本,它仍然可以解决您的问题,因为许多问题和回归都已修复


当遇到可能归因于框架的意外问题时,最好检查是否有任何修复版本,并检查其错误管理系统,例如。

我认为我们需要更多的背景知识。:)@Basco,我们希望在发布队列之前将消息保存在数据库中,并保存在我们编写的截取器中,以截取消息并存储在数据库中。添加了更多代码以便于理解您需要在
applicationContext.xml
中包含事务的配置,以及您正在使用的服务器(即JBoss(又名WildFly)),谢谢您的回答。更新为最新的Spring版本4.2.4.0。这没用。我想已经有人发布了:。我想我的问题也与此有关。Spring承诺在4.2中修复此问题。5@SathishMurugesan很高兴听到正在进行。如果问题在4.2.5中得到解决,请让我们知道并自行回答?:)