UPGRADED到Spring 4.3.7和Hibernate 5.2.9时,数据库插入失败,没有任何事务错误

时间:2017-08-04 18:39:30

标签: spring hibernate weblogic

我有一个JEE应用程序,可以在oracle和cache数据库中进行插入和读取。环境使用web逻辑,spring和hibernate。我们使用hbm映射文件。一切都运行良好:Spring v4.2.7和hibernate 4.3.10final和Web逻辑12.1.2和java 8。 但是在升级到spring v4.3.7和hibernate 5.2.9 final和web logic 12.2.1.2之后,插入失败,并且没有正在进行的事务' hibernate中的异常。不知何故,Web逻辑JTA事务没有被Spring传播到Hibernate - 它在Spring v4.3.7中被破解了。 我在org.springframework.orm.hibernate5.LocalSessionFactoryBean的hibernate属性中尝试了一些设置但没有帮助。

插入异常:javax.persistence.TransactionRequiredException:没有正在进行的事务

非常感谢您的帮助。

以下是详细信息:

在Oracle数据库中插入数据在Java 8环境中使用这些数据的应用程序中运行良好: weblogic v12.1.2, 春天4.2.7, 休眠4.3.10, hibernate-commons-annotations 4.0.5, hibernate-validator:4.1.0, ojdbc6, java 8

我升级了这些并且插入失败了: weblogic到12.2.1.2 春天4.3.7 休眠5.2.9 hibernate-commons-annotations 5.01。 ojdbc7

弹簧自动接线详情                   

<aop:config>
    <aop:pointcut id="writeTxMethods" expression="execution(* xx.transaction.TransactionManagerInterface.*(..))" />
    <aop:advisor advice-ref="writeTxAdvice" pointcut-ref="writeTxMethods" order="1" />
</aop:config>

<tx:advice id="writeTxAdvice" transaction-manager="xxTransactionManager">
    <tx:attributes>
        <tx:method name="createData" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" />
    </tx:attributes>
</tx:advice>

<bean abstract="true" id="xxHibernatePropertiesPojo" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <!-- <property name="jtaTransactionManager" ref="xxTransactionManager" /> -->
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.jdbc.batch_size">100</prop>
            <!--  <prop key="hibernate.order_inserts">true</prop> -->
            <prop key="hibernate.query.plan_cache_max_strong_references">${hibernate.query.plan_cache_max_strong_references.size}</prop>
            <prop key="hibernate.query.plan_cache_max_soft_references">${hibernate.query.plan_cache_max_soft_references.size}</prop>
            <prop key="hibernate.statement_cache.size">${hibernate.statement_cache.size}</prop>
            <prop key="hibernate.prepare_sql">${hibernate.prepare_sql}</prop>
            <prop key="hibernate.connection.release_mode">after_statement</prop>
            <!-- <prop key="hibernate.transaction.flush_before_completion">true</prop>-->   
            <prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform</prop>       
        </props>
    </property>
    <property name="dataSource" ref="orclDataSource" />
    <property name="mappingResources">
        <list>
            <value>xx/Create.hbm.xml</value>    
        </list>
    </property>
</bean>

异常堆栈跟踪:

javax.persistence.TransactionRequiredException: no transaction is in progress
org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3450),
org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1418),
org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1414),
XX.persistence.hibernate.WriteableManager.create(WriteableManager.java:103),
XX.transaction.xxTxManager.create(xxTxManager.java:800),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
java.lang.reflect.Method.invoke(Method.java:498),
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333),
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190),
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157),
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99),
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282),
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96),
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179),
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92),
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179),
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213),
com.sun.proxy.$Proxy584.create(Unknown Source),
xx.ejb.xxSynchronousSession.create(XXSynchronousSession.java:400),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
java.lang.reflect.Method.invoke(Method.java:498),
com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310),
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182),
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149),
com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed(MethodInvocationInvocationContext.java:101),
com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(JeeInterceptorInterceptor.java:101),
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171),
com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed(MethodInvocationInvocationContext.java:101),
com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(JeeInterceptorInterceptor.java:101),
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171),
com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed(MethodInvocationInvocationContext.java:101),
org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:73),
org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52),
sun.reflect.GeneratedMethodAccessor288.invoke(Unknown Source),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
java.lang.reflect.Method.invoke(Method.java:498),
com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(JeeInterceptorInterceptor.java:94),
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171),
com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131),
com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119),
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171),
com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215),
com.sun.proxy.$Proxy576.create(Unknown Source),
XX.ejb.XXSynchronousSession_ejtj10_ELOImpl.__WL_invoke(Unknown Source),
weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:33),
XX.ejb.XXSynchronousSession_ejtj10_ELOImpl.create(Unknown Source),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
java.lang.reflect.Method.invoke(Method.java:498),
org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invokeInContext(LocalSlsbInvokerInterceptor.java:75),
org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.invoke(AbstractSlsbInvokerInterceptor.java:189),
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179),
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213),
com.sun.proxy.$Proxy556.create(Unknown Source),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
java.lang.reflect.Method.invoke(Method.java:498),
org.apache.cxf.service.invoker.AbstractInvoker.createInvocation(AbstractInvoker.java:180),
org.apache.cxf.jaxws.JAXWSMethodInvoker.createInvocation(JAXWSMethodInvoker.java:66),
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96),
org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:232),
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:85),
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:74),
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59),
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511),
java.util.concurrent.FutureTask.run(FutureTask.java:266),
org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126),
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37),
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131),
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308),
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121),
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251),
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234),
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208),
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160),
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171),
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293),
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212),
javax.servlet.http.HttpServlet.service(HttpServlet.java:707),
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268),
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286),
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260),
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137),
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350),
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:247),
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3679),
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3649),
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326),
weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197),
weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203),
weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71),
weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433),
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281),
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259),
weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691),
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651),
weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270),
weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348),
weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333),
weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54),
weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41),
weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640),
weblogic.work.ExecuteThread.execute(ExecuteThread.java:406),
weblogic.work.ExecuteThread.run(ExecuteThread.java:346)

1 个答案:

答案 0 :(得分:1)

最有可能的是,这是Spring中一个错误的JTA事务配置。为什么使用Spring 2.5事务处理与XML和AOP配置。

查看this GitHub repository以了解如何使用基于Java的JTA环境配置。