2017-08-04 56 views
1

我有一个JEE应用程序,它插入并读取oracle和缓存数据库。环境使用网络逻辑,spring和hibernate。我们使用hbm映射文件。一切工作正常:Spring v4.2.7和休眠4.3.10final和Web逻辑12.1.2和Java 8. 但是,升级到Spring v4.3.7和hibernate 5.2.9 final和web逻辑12.2.1.2后,插入失败在休眠状态下'没有正在进行的事务'异常。不知何故,Web逻辑JTA事务不会被Spring传播到Hibernate--它在Spring v4.3.7中被破坏了。 我尝试了org.springframework.orm.hibernate5.LocalSessionFactoryBean的hibernate属性中的一些设置,但没有帮助。当升级到Spring 4.3.7和休眠5.2.9时,数据库插入失败,没有事务错误

插入异常:javax.persistence.TransactionRequiredException:没有交易正在进行

你的帮助是高度赞赏。

以下是详细信息:

插入Oracle数据库数据,在Java中8 ENV使用这些应用程序运行良好: 的WebLogic v12.1.2, 春天4.2.7, 休眠4.3.10 , 休眠-公地注解4.0.5, 休眠-验证:4.1.0, ojdbc6, 的java 8

我升级这些和插入失败: weblogic到12.2.1.2 spring 4.3.7 hibernate 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

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

查看this GitHub repository了解如何使用基于Java的配置为JTA env做到这一点。