[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