Hi,
I've recently started using/learning Spring for one of my new project. I intend to persist POJOs using Hibernate3 and Spring2. For transactional boundary I'm using Spring's AOP declarative Tx methodology. As I'm using Weblogic app server I've used Spring's Weblogic specific TxManager (WebLogicJtaTransactionManager). I've enabled "Emulate Two-Phase Commit for non-XA Driver" for the datasource as I'm using a non-XA DB driver. I get the exception mentioned below only when I use MultipleHiLoPerTableGenerator (as it tried to initiate a new Tx within a Tx).
Spring config for the application is as follows -Code:2007-07-11 10:33:43.056 Z020 SEVERE Cannot call Connection.commit in distrib uted transaction. Transaction Manager will commit the resource manager when the distributed transaction is committed. org.hibernate.util.JDBCExceptionReporter <Jul 11, 2007 10:33:43 AM CDT> <Warning> <JDBC> <BEA-001074> <A JDBC pool connec tion leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool. The following stack t race at create shows where the leaked connection was created. Stack trace at co nnection create: at weblogic.jdbc.wrapper.JTSConnection.initCopy(JTSConnection.java:201) at weblogic.jdbc.jts.Driver.copyConnection(Driver.java:277) at weblogic.jdbc.jts.Driver.copyLocalConnection(Driver.java:257) at weblogic.jdbc.jts.Driver.connect(Driver.java:147) at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSour ce.java:329) at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider. getConnection(LocalDataSourceConnectionProvider.java:81) at org.hibernate.jdbc.AbstractBatcher.openConnection(AbstractBatcher.jav a:495) at org.hibernate.engine.transaction.Isolater$JdbcDelegate.delegateWork(I solater.java:147) at org.hibernate.engine.transaction.Isolater.doIsolatedWork(Isolater.jav a:38) at org.hibernate.engine.TransactionHelper.doWorkInNewTransaction(Transac tionHelper.java:51) at org.hibernate.id.MultipleHiLoPerTableGenerator.generate(MultipleHiLoP erTableGenerator.java:183) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId (AbstractSaveEventListener.java:91) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGene ratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrR equestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTran sient(DefaultSaveOrUpdateEventListener.java:175) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate( DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpda te(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514) at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate (HibernateTemplate.java:635) at org.springframework.orm.hibernate3.HibernateTemplate.execute(Hibernat eTemplate.java:372) at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTe mplate.java:632) at mypkg.mytrade.persistance.TradeDAOImpl.insertTrade(TradeDAOIm pl.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti on(AopUtils.java:296) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJo inpoint(ReflectiveMethodInvocation.java:177) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:144) at org.springframework.transaction.interceptor.TransactionInterceptor.in voke(TransactionInterceptor.java:107) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:166) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami cAopProxy.java:204) at $Proxy9.insertTrade(Unknown Source) at mypkg.mytrade.persistance.TradeManager.handleTrade(TradeManag er.java:38) at mypkg.mytrade.processor.TradeProcessorImpl.handleTradePersist ance(TradeProcessorImpl.java:56) at mypkg.mytrade.listener.TradeListener.processMessage(TradeList ener.java:90) at mypkg.mytrade.listener.TradeListener.onMessage(TradeListener. java:77) at weblogic.ejb20.internal.MDListener.execute(MDListener.java:400) at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener. java:333) at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:298) at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2686) at weblogic.jms.client.JMSSession.execute(JMSSession.java:2598) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
Hibernate properties -Code:<jee:jndi-lookup id="myTradeDataSource" jndi-name="sybaseDS"/> <bean id="jtaTransactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"> </bean> <bean id="myHibernateTradeDAO" class="mypkg.mytrade.persistance.TradeDAOImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="myTradeDataSource"/> <property name="hibernateProperties"> <util:properties location="classpath:hbm/hibernate.properties"/> </property> <property name="mappingResources"> <list> <value>hbm/myTrade.hbm.xml</value> </list> </property> </bean> <tx:advice id="txAdvice" transaction-manager="jtaTransactionManager"> <tx:attributes> <tx:method name="fetchTrade" read-only="true"/> <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" timeout="480" rollback-for="mypkg.mytrade.exception.SystemException"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="hibernateTradeDAOOperation" expression="execution(* mypkg.mytrade.persistance.TradeDAO.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="hibernateTradeDAOOperation"/> </aop:config>
MDB's transactional attribute is "Required".Code:hibernate.dialect=org.hibernate.dialect.Sybase11Dialect hibernate.show_sql=true hibernate.connection.autocommit=false
Thanks in advance,
Ashok


Reply With Quote