-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Spring/Hibernate with WebLogic and JTA - help needed.
PostPosted: Tue Apr 26, 2005 3:47 pm 
Newbie

Joined: Tue Apr 12, 2005 6:40 pm
Posts: 5
Hi,

I posted this on Spring forum but didn't get any response. I think it's more Spring's that Hibernate's problem, but I'm sure there are a lot of folks on this forum that use Spring/Hibernate together so maybe they can help me.

Here is the original post:

I'm evaluating Spring/Hibernate combo. My "vertical slice" app is a mini message board with a classic layered architecture: presentation - Struts, biz layer - Spring-managed beans, data access - Hibernate.

All worked fine with HibernateTransactionManager and non-JNDI data source. But when I switched to JtaTransactionManager and JNDI-bound data source I'm getting the exception below.

From the trace below you can see that a transactional object MessageBoardImpl calls another tx object - ACLEntryManagerImpl, that in turns calls HACLEntryDAO.

I include also my applicationContext.xml file.

I'm using JDK 1.4.2, WebLogic 8.1.3 on Win XP. I found that other folks had the same problem but in different conditions. It seems like it's specific to WebLogic. Unfortunately, I didn't find any answer for that.

Can anyone please tell me what's wrong with what I'm doing? I know that String/Hibernate and JTA work fine and I'm sure that it's sth wrong with my code.

Thanks,
/Slawek

--- Exception stack trace ---
Error occured:

org.springframework.jdbc.UncategorizedSQLException: (Hibernate operation): encountered SQLException [The transaction is no longer active - status: 'Committed'. No further JDBC access is allowed within this transaction.]; nested exception is java.sql.SQLException: The transaction is no longer active - status: 'Committed'. No further JDBC access is allowed within this transaction.
java.sql.SQLException: The transaction is no longer active - status: 'Committed'. No further JDBC access is allowed within this transaction.
at weblogic.jdbc.wrapper.JTSConnection.checkIfRolledBack(JTSConnection.java:155)
at weblogic.jdbc.wrapper.JTSConnection.checkConnection(JTSConnection.java:164)
at weblogic.jdbc.wrapper.Connection.prepareStatement(Connection.java:347)
at weblogic.jdbc.wrapper.JTSConnection.prepareStatement(JTSConnection.java:479)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:379)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:320)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:86)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1096)
at org.hibernate.loader.Loader.doQuery(Loader.java:367)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:208)
at org.hibernate.loader.Loader.doList(Loader.java:1522)
at org.hibernate.loader.Loader.list(Loader.java:1505)
at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:883)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:791)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at org.springframework.orm.hibernate3.HibernateTemplate$34.doInHibernate(HibernateTemplate.java:849)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:310)
at org.springframework.orm.hibernate3.HibernateTemplate.findByNamedQueryAndValueBean(HibernateTemplate.java:844)
at p3.acl.hibernate.HACLEntryDAO.getEntriesForAccessor(HACLEntryDAO.java:26)
at p3.acl.ACLEntryManagerImpl.findResourceIDs(ACLEntryManagerImpl.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy13.findResourceIDs(Unknown Source)
at p3.mb.MessageBoardImpl.findTopicsForAccount(MessageBoardImpl.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy14.findTopicsForAccount(Unknown Source)
at p3.web.TopicListAction.execute(TopicListAction.java:59)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:105)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at com.hp.bco.pl.wpa.action.WPARequestProcessor.process(WPARequestProcessor.java:188)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at p3.web.AuthenticationFilter.doFilter(AuthenticationFilter.java:36)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.hp.bco.pl.wpa.filter.transactionlogging.TransactionLoggingFilter.doFilter(TransactionLoggingFilter.java:67)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6458)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

--- applicationContext.xml ---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-lazy-init="true">

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jdbc/B2BTechStudyDS</value></property>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>

<!--
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property>
<property name="url"><value>${jdbc.url}</value></property>
<property name="username"><value>${jdbc.username}</value></property>
<property name="password"><value>${jdbc.password}</value></property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
-->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>p3/account/hibernate/Account.hbm.xml</value>
<value>p3/user/hibernate/User.hbm.xml</value>
<value>p3/acl/hibernate/ACLEntry.hbm.xml</value>
<value>p3/mb/hibernate/MessageBoard.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<!-- This property is required as WLS uses ANTLR and H3 also - there is some classloading issue with that -->
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
<!--<prop key="hibernate.show_sql">true</prop>-->
</props>
</property>
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jms/MyConnectionFactory</value></property>
</bean>

<bean id="messagePostedQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jms/MessagePostNotificationQueue</value></property>
</bean>

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean id="accountDAO" class="p3.account.hibernate.HAccountDAO">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>

<bean id="userDAO" class="p3.user.hibernate.HUserDAO">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>

<bean id="aclEntryDAO" class="p3.acl.hibernate.HACLEntryDAO">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>

<bean id="messageBoardDAO" class="p3.mb.hibernate.HMessageBoardDAO">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>

<bean id="accountManagerTarget" class="p3.account.AccountManagerImpl">
<property name="accountDAO"><ref bean="accountDAO" /></property>
</bean>

<bean id="accountManager" parent="baseTransactionProxy">
<property name="target"><ref bean="accountManagerTarget" /></property>
</bean>

<bean id="userManagerTarget" class="p3.user.UserManagerImpl">
<property name="userDAO"><ref bean="userDAO" /></property>
</bean>

<bean id="userManager" parent="baseTransactionProxy">
<property name="target"><ref bean="userManagerTarget" /></property>
</bean>

<bean id="aclEntryManagerTarget" class="p3.acl.ACLEntryManagerImpl">
<property name="ACLEntryDAO"><ref bean="aclEntryDAO" /></property>
</bean>

<bean id="aclEntryManager" parent="baseTransactionProxy">
<property name="target"><ref bean="aclEntryManagerTarget" /></property>
</bean>

<bean id="messageNotifier" class="p3.mb.JMSMessageNotifierImpl">
<property name="connectionFactory"><ref bean="jmsConnectionFactory"/></property>
<property name="queue"><ref bean="messagePostedQueue" /></property>
</bean>

<bean id="messageBoardTarget" class="p3.mb.MessageBoardImpl">
<property name="messageBoardDAO"><ref bean="messageBoardDAO" /></property>
<property name="ACLEntryManager"><ref bean="aclEntryManager" /></property>
<property name="notifier"><ref bean="messageNotifier" /></property>
</bean>

<bean id="messageBoard" parent="baseTransactionProxy">
<property name="target"><ref bean="messageBoardTarget" /></property>
</bean>
</beans>


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 02, 2005 10:08 am 
Newbie

Joined: Tue Apr 12, 2005 6:40 pm
Posts: 5
I initally used the non-XA Oracle driver and WebLogic emulated the XA-part. As pointed elsewhere, the WebLogic XA support is very strict and disallows certain things.

When I switched to Oracle XA driver the problem has gone.

/Slawek


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.