[jboss-svn-commits] JBL Code SVN: r20417 - labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jun 11 07:39:46 EDT 2008
Author: kevin.conner at jboss.com
Date: 2008-06-11 07:39:46 -0400 (Wed, 11 Jun 2008)
New Revision: 20417
Modified:
labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java
labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java
labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java
Log:
Fix pool reuse on error: JBESB-1748
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java 2008-06-11 09:20:40 UTC (rev 20416)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java 2008-06-11 11:39:46 UTC (rev 20417)
@@ -24,6 +24,7 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -104,6 +105,11 @@
private boolean terminated ;
/**
+ * The pool instance id.
+ */
+ private long id ;
+
+ /**
* Contructor of the pool.
*
*/
@@ -143,9 +149,9 @@
// For now we only support JTA transacted sessions
final JmsSession session ;
if (transacted) {
- session = new JmsXASession(this, ((XAConnection)jmsConnection).createXASession());
+ session = new JmsXASession(this, ((XAConnection)jmsConnection).createXASession(), id);
} else {
- session = new JmsSession(jmsConnection.createSession(transacted, acknowledgeMode));
+ session = new JmsSession(jmsConnection.createSession(transacted, acknowledgeMode), id);
}
freeSessions.add(session);
logger.debug("Number of Sessions in the pool with acknowledgeMode: " + acknowledgeMode + " is now " + getSessionsInPool(acknowledgeMode));
@@ -258,19 +264,22 @@
*/
synchronized void handleCloseSession(final JmsSession session)
{
- final int mode ;
- try {
- mode = session.getAcknowledgeMode() ;
- } catch (final JMSException jmse) {
- logger.warn("JMSException while calling getAcknowledgeMode") ;
- logger.debug("JMSException while calling getAcknowledgeMode", jmse) ;
- return ;
+ if (session.getId() == id)
+ {
+ final int mode ;
+ try {
+ mode = session.getAcknowledgeMode() ;
+ } catch (final JMSException jmse) {
+ logger.warn("JMSException while calling getAcknowledgeMode") ;
+ logger.debug("JMSException while calling getAcknowledgeMode", jmse) ;
+ return ;
+ }
+
+ final ArrayList<JmsSession> sessions = (freeSessionsMap == null ? null : freeSessionsMap.get(mode));
+ if (sessions != null) {
+ sessions.add(session) ;
+ }
}
-
- final ArrayList<JmsSession> sessions = (freeSessionsMap == null ? null : freeSessionsMap.get(mode));
- if (sessions != null) {
- sessions.add(session) ;
- }
handleReleaseSession(session) ;
}
@@ -321,6 +330,42 @@
}
/**
+ * This method is called when the pool needs to cleaned. It closes all open sessions
+ * and the connection.
+ */
+ private void cleanSessionPool()
+ {
+ final Connection connection ;
+ synchronized(this)
+ {
+ if (terminated)
+ {
+ return ;
+ }
+ id++ ;
+ for (List<JmsSession> list : freeSessionsMap.values())
+ {
+ list.clear() ;
+ }
+ for (List<JmsSession> list : inUseSessionsMap.values())
+ {
+ list.clear() ;
+ }
+ transactionsToSessions.clear() ;
+ sessionsToTransactions.clear() ;
+
+ logger.debug("Cleared the session pool now closing the connection to the factory.");
+ connection = jmsConnection ;
+ jmsConnection = null ;
+ }
+ if (connection!=null) {
+ try {
+ connection.close();
+ } catch (final Exception ex) {} // ignore
+ }
+ }
+
+ /**
* This method is called when the pool needs to destroyed. It closes all open sessions
* and the connection and removes it from the container's poolMap.
*/
@@ -436,7 +481,7 @@
jmsConnection.setExceptionListener(new ExceptionListener() {
public void onException(JMSException arg0)
{
- removeSessionPool() ;
+ cleanSessionPool() ;
}
}) ;
jmsConnection.start();
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java 2008-06-11 09:20:40 UTC (rev 20416)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java 2008-06-11 11:39:46 UTC (rev 20417)
@@ -52,6 +52,10 @@
* The session delegate.
*/
private final Session session ;
+ /**
+ * The pool instance id.
+ */
+ private final long id ;
/**
* The set of active queue browsers.
@@ -69,15 +73,22 @@
/**
* Create the session wrapper.
* @param session The session delegate.
+ * @param id The pool instance id.
* @param isJTA True if this tales part in a JTA transaction
* @throws JMSException
*/
- JmsSession(final Session session)
+ JmsSession(final Session session, final long id)
throws JMSException
{
+ this.id = id ;
this.session = session ;
}
+ public long getId()
+ {
+ return id ;
+ }
+
public void close() throws JMSException
{
session.close();
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java 2008-06-11 09:20:40 UTC (rev 20416)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java 2008-06-11 11:39:46 UTC (rev 20417)
@@ -72,13 +72,13 @@
* Create the session wrapper.
* @param pool The current connection pool
* @param session The session delegate.
- * @param isJTA True if this tales part in a JTA transaction
+ * @param id The pool instance id.
* @throws JMSException
*/
- JmsXASession(final JmsConnectionPool pool, final XASession session)
+ JmsXASession(final JmsConnectionPool pool, final XASession session, final long id)
throws JMSException
{
- super(session) ;
+ super(session, id) ;
this.pool = pool ;
this.session = session ;
}
More information about the jboss-svn-commits
mailing list