[jboss-svn-commits] JBL Code SVN: r20642 - labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jun 19 07:09:55 EDT 2008
Author: kevin.conner at jboss.com
Date: 2008-06-19 07:09:54 -0400 (Thu, 19 Jun 2008)
New Revision: 20642
Modified:
labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java
labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java
labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java
Log:
Added reuse of pool: JBESB-1748
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java 2008-06-19 10:43:25 UTC (rev 20641)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java 2008-06-19 11:09:54 UTC (rev 20642)
@@ -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;
import java.util.concurrent.Callable;
@@ -121,6 +122,11 @@
private boolean terminated ;
/**
+ * The pool instance id.
+ */
+ private long id ;
+
+ /**
* Contructor of the pool.
*
*/
@@ -161,9 +167,9 @@
{
final JmsSession session ;
if (transacted) {
- session = new JmsXASession(JmsConnectionPool.this, ((XAConnection)jmsConnection).createXASession());
+ session = new JmsXASession(JmsConnectionPool.this, ((XAConnection)jmsConnection).createXASession(), id);
} else {
- session = new JmsSession(jmsConnection.createSession(transacted, acknowledgeMode));
+ session = new JmsSession(jmsConnection.createSession(transacted, acknowledgeMode), id);
}
return session ;
}
@@ -303,19 +309,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) ;
}
@@ -366,6 +375,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.
*/
@@ -481,7 +526,7 @@
jmsConnection.setExceptionListener(new ExceptionListener() {
public void onException(JMSException arg0)
{
- removeSessionPool() ;
+ cleanSessionPool() ;
}
}) ;
jmsConnection.start();
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java 2008-06-19 10:43:25 UTC (rev 20641)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java 2008-06-19 11:09:54 UTC (rev 20642)
@@ -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/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java 2008-06-19 10:43:25 UTC (rev 20641)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java 2008-06-19 11:09:54 UTC (rev 20642)
@@ -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