Hi all,

We are developing a web application that needs to track when a user logs out, 
or when it's session times out, so we wrote an HttpSessionListener that uses 
Hibernate to update a login record when the authentication attribute is removed 
from the HttpSession. This works in a non-clustered environment.

Then we wanted to make this work in a load-balancing/failover cluster., so we 
marked the web.xml distributable, and configured the JBoss cluster. The session 
failover works fine, e.g. when we shut down one cluster, the user's session was 
still active at the second cluster.  

The HttpSessionListener didn't work anymore with 'distributable', even if there 
was only one cluster node active: it gets an 'invalid transaction state' when 
trying to get a JDBC connection from the local firebird DataSource. Stack trace 
follows below.

I crossposted this to the firebird people, too 
(http://groups.yahoo.com/group/Firebird-Java/message/8353). Error 25S01 seems 
to mean 'invalid transaction state'.

What does the ClusteredSession expiration have to do with my transactions? The 
cluster is still up and running, only one user's session is expiring...

Used versions: JBoss 4.0.3sp1, hibernate 3.0.5, spring 1.2.6, firebirdsql.rar 
1.5.5.

2006-02-22 17:08:50,640 ERROR 
[org.apache.catalina.core.ContainerBase.[jboss.web].[www.acme.com].[/server]] 
standardSession.attributeEvent
  | org.springframework.transaction.CannotCreateTransactionException:Could not 
open Hibernate Session for transaction; nested exception is
  | org.hibernate.TransactionException: JDBC begin failed:
  | org.hibernate.TransactionException: JDBC begin failed:
  |  at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:58)
  |  at 
org.hibernate.transaction.JDBCTransactionFactory.beginTransaction(JDBCTransactionFactory.java:24)
  |  at org.hibernate.jdbc.JDBCContext.beginTransaction(JDBCContext.java:271)
  |  at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1079)
  |  at 
org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:520)
  |  at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:282)
  |  at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:111)
  |  at 
com.acme.utils.AbstractHibernateTransactionRunnable.run(AbstractHibernateTransactionRunnable.java:53)
  |  at 
com.acme.webctrl.AcegiApplicationListener.timeoutEvent(AcegiApplicationListener.java:44)
  |  at 
com.acme.webctrl.J2EEWebAppListener.attributeRemoved(J2EEWebAppListener.java:59)
  |  at 
org.jboss.web.tomcat.tc5.session.ClusteredSession.removeAttributeInternal(ClusteredSession.java:558)
  |  at 
org.jboss.web.tomcat.tc5.session.ClusteredSession.expire(ClusteredSession.java:418)
  |  at 
org.jboss.web.tomcat.tc5.session.ClusteredSession.expire(ClusteredSession.java:345)
  |  at 
org.apache.catalina.session.StandardSession.isValid(StandardSession.java:567)
  |  at 
org.jboss.web.tomcat.tc5.session.JBossCacheManager.processExpires(JBossCacheManager.java:683)
  |  at 
org.jboss.web.tomcat.tc5.session.JBossManager.backgroundProcess(JBossManager.java:662)
  |  at 
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1283)
  |  at 
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)
  |  at 
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
  |  at 
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
  |  at 
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)
  |  at java.lang.Thread.run(Thread.java:595)
  | Caused by: org.firebirdsql.jdbc.FBSQLException: Resource Exception. No
  | local transaction active: can't commit, error code: 25S01
  |  at 
org.firebirdsql.jdbc.AbstractConnection.setAutoCommit(AbstractConnection.java:328)
  |  at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:53)

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3925879#3925879

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3925879


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to