-->
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.  [ 1 post ] 
Author Message
 Post subject: JTA synchronization fails after transaction times out
PostPosted: Fri Jun 09, 2006 1:51 pm 
Newbie

Joined: Fri Feb 03, 2006 12:47 pm
Posts: 1
Hi,

We are running a web application with JBoss 4.0.4.GA. We are not
using EJBs, just an EAR with a WAR and a HAR file.

Some of the processes in the web application run for over 5 minutes
and depending on the number of users may timeout, as TransactionTimeout
is set to 300 in server/default/conf/jboss-service.xml.

System info:

Hibernate : 3.2 cr2
RDBMS : MySQL, version: 5.0.16
JDBC driver : mysql-connector-java-3.0.16-ga
Application : JBoss 4.0.4.GA
server

After a long-running transaction times out I get the following stacktrace. I
can no longer use the sesson factory after this has happened, i.e. any
time I try to log into the application I get the error below. Has anyone had
this error?

Any ideas on how to fix it? Really need some help here as this
forces us to restart our application.

I've included our HibernateUtil.java file after the stack trace.

Thanks in advance,

Robert


2006-06-09 18:28:58,711 http-0.0.0.0-80-8 ERROR HibernateUtil:119: [HibernateUtil] caught while trying to get session threadSession=[null]threadTransaction=[null]
org.hibernate.TransactionException: could not register synchronization with JTA TransactionManager
at org.hibernate.jdbc.JDBCContext.registerSynchronizationIfPossible(JDBCContext.java:174)
at org.hibernate.jdbc.JDBCContext.<init>(JDBCContext.java:75)
at org.hibernate.impl.SessionImpl.<init>(SessionImpl.java:215)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:470)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:494)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:502)
.
.
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.transaction.RollbackException: Already marked for rollback TransactionImpl:XidImpl[FormatId=257, GlobalId=ORANGE02/27350, BranchQual=, localId=27350]
at org.jboss.tm.TransactionImpl.registerSynchronization(TransactionImpl.java:635)
at org.hibernate.jdbc.JDBCContext.registerSynchronizationIfPossible(JDBCContext.java:164)
... 34 more



public class HibernateUtil
{
private static final ThreadLocal threadSession = new ThreadLocal();
private static final ThreadLocal threadTransaction = new ThreadLocal();

public static String toStaticString()
{
StringBuffer buf = new StringBuffer("");

if(((Session)threadSession.get())!= null)
{
buf.append("threadSession=[");
buf.append("open=" + ((Session)threadSession.get()).isOpen() + ", ");
buf.append("connected=" + ((Session)threadSession.get()).isConnected() + "], ");
}
else
{
buf.append("threadSession=[null]");
}

if(((Transaction)threadTransaction.get()) != null)
{
buf.append("threadTransaction=[");
buf.append("active=" + ((Transaction)threadTransaction.get()).isActive() + ", ");
buf.append("wasCommitted=" + ((Transaction)threadTransaction.get()).wasCommitted() + ", ");
buf.append("wasRolledBack=" + ((Transaction)threadTransaction.get()).wasRolledBack() + "]");
}
else
{
buf.append("threadTransaction=[null]");
}

return buf.toString();
}

public static Session getSession()
{
Session s = null;

try
{
log.debug("Getting session [1] ->" + toStaticString());

s = (Session)threadSession.get();
log.debug("Getting session [2] ->" + toStaticString());

if(s == null || !s.isOpen() || !s.isConnected())
{
s = HibernateSessionFactory.getSession();
threadSession.set(s);
}
log.debug("Getting session [3] ->" + toStaticString());
}
catch(HibernateException e)
{
log.error("[HibernateUtil] caught while trying to get session " + toStaticString(), e);
}

return s;
}

public static void closeSession()
{
try
{
log.debug("Closing session [1] ->" + toStaticString());

Session s = (Session)threadSession.get();
log.debug("Closing session [2] ->" + toStaticString());

if(s != null)
{
if(s.isOpen())
{
s.flush();
s.disconnect();
}
}

log.debug("Closing session [3] ->" + toStaticString());
threadSession.set(null);
}
catch(HibernateException e)
{
log.error("caught while trying to close session " + toStaticString(), e);
}
}

public static void beginTransaction()
{
Transaction tx = (Transaction)threadTransaction.get();

log.debug("Beginning transaction " + toStaticString());

try
{
Session s = getSession();
if(tx == null)
{
if(s != null)
{
if(s.isOpen())
{
tx = s.beginTransaction();
threadTransaction.set(tx);
}
else
{
log.warn("Session is not open");
}
}
}
/*else
{
if(!tx.isActive() && s.isOpen())
{
tx.begin();
threadTransaction.set(tx);
}
}*/
}
catch(HibernateException e)
{
log.error("[HibernateUtil] caught while trying to start transaction " + toStaticString(), e);
}
}

public static void commitTransaction()
{
Transaction tx = (Transaction)threadTransaction.get();

log.debug("Committing transaction " + toStaticString());

try
{
if(tx != null)
{
if(tx.isActive() && !tx.wasCommitted() && !tx.wasRolledBack())
{
tx.commit();
}
}
threadTransaction.set(null);
}
catch(HibernateException e)
{
log.error("[HibernateUtil] caught while committing transaction " + toStaticString(), e);
}
}

public static void rollbackTransaction()
{
log.info("rolling back transaction ...");
Transaction tx = (Transaction)threadTransaction.get();
try
{
threadTransaction.set(null);
if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack())
{
tx.rollback();
log.info("done rolling back transaction");
}
else
{
log.info("tx was null, already committed or rolled back - no rollback needed");
}
}
catch(HibernateException ex)
{
log.error("could not roll back transaction " + toStaticString(), ex);
}
finally
{
closeSession();
}
}
}


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

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.