[jboss-svn-commits] JBL Code SVN: r27592 - in labs/jbossesb/trunk/product/rosetta: tests/src/org/jboss/internal/soa/esb/rosetta/pooling and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jul 5 17:21:59 EDT 2009


Author: kevin.conner at jboss.com
Date: 2009-07-05 17:21:59 -0400 (Sun, 05 Jul 2009)
New Revision: 27592

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
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolUnitTest.java
Log:
Cache requested acknowledge mode: JBESB-1909

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	2009-07-05 21:09:22 UTC (rev 27591)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPool.java	2009-07-05 21:21:59 UTC (rev 27592)
@@ -812,17 +812,15 @@
                     final JmsSession session ;
 
                     if (transacted) {
-                        session = new JmsXASession(JmsConnectionPool.this, ((XAConnection)currentConnection).createXASession(), currentID);
+                        session = new JmsXASession(JmsConnectionPool.this, ((XAConnection)currentConnection).createXASession(), currentID, acknowledgeMode);
                     } else {
-                        session = new JmsSession(JmsConnectionPool.this, currentConnection.createSession(transacted, acknowledgeMode), currentID);
+                        session = new JmsSession(JmsConnectionPool.this, currentConnection.createSession(transacted, acknowledgeMode), currentID, acknowledgeMode);
                     }
 
                     return session ;
                 }
             }) ;
 
-            //Create a new Session
-            ArrayList<JmsSession> freeSessions = freeSessionsMap.get(acknowledgeMode);
             // For now we only support JTA transacted sessions
             try
             {
@@ -989,14 +987,7 @@
         }
 
         public void releaseInUseSession(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 ;
-            }
+            final int mode = session.getRequestedAcknowledgeMode() ;
 
             final ArrayList<JmsSession> sessions = (inUseSessionsMap == null ? null : inUseSessionsMap.get(mode));
             if (sessions != null) {
@@ -1018,14 +1009,7 @@
                 }
                 else
                 {
-                    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 int mode = session.getRequestedAcknowledgeMode() ;
 
                     final ArrayList<JmsSession> sessions = (freeSessionsMap == null ? null : freeSessionsMap.get(mode));
                     if (sessions != null) {

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	2009-07-05 21:09:22 UTC (rev 27591)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsSession.java	2009-07-05 21:21:59 UTC (rev 27592)
@@ -69,6 +69,11 @@
      */
     private final int acknowledgeMode ;
     /**
+     * The requested acknowledge mode for this session.
+     */
+    private final int requestedAcknowledgeMode ;
+
+    /**
      * Flag indicating whether this session is suspect or not.
      */
     private boolean suspect ;
@@ -91,15 +96,16 @@
      * @param pool The pool associated with this session.
      * @param session The session delegate.
      * @param id The pool instance id.
-     * @param isJTA True if this tales part in a JTA transaction
+     * @param requestedAcknowledgeMode The requested acknowledge mode for this session.
      * @throws JMSException
      */
-    JmsSession(final JmsConnectionPool pool, final Session session, final long id)
+    JmsSession(final JmsConnectionPool pool, final Session session, final long id, final int requestedAcknowledgeMode)
         throws JMSException
     {
         this.pool = pool ;
         this.id = id ;
         this.session = (Session)getExceptionHandler(pool, Session.class, session) ;
+        this.requestedAcknowledgeMode = requestedAcknowledgeMode ;
         acknowledgeMode = session.getAcknowledgeMode() ;
         // Workaround for JBESB-1873
         if ("org.jboss.jms.client.JBossSession".equals(session.getClass().getName()))
@@ -420,6 +426,11 @@
     {
         return suspect ;
     }
+    
+    public int getRequestedAcknowledgeMode()
+    {
+        return requestedAcknowledgeMode ;
+    }
 
     /**
      * Wrap the object in an exception handler.

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	2009-07-05 21:09:22 UTC (rev 27591)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsXASession.java	2009-07-05 21:21:59 UTC (rev 27592)
@@ -74,12 +74,13 @@
      * @param pool The current connection pool
      * @param session The session delegate.
      * @param id The pool instance id.
+     * @param requestedAcknowledgeMode The requested acknowledge mode for this session.
      * @throws JMSException
      */
-    JmsXASession(final JmsConnectionPool pool, final XASession session, final long id)
+    JmsXASession(final JmsConnectionPool pool, final XASession session, final long id, final int requestedAcknowledgeMode)
         throws JMSException
     {
-        super(pool, session, id) ;
+        super(pool, session, id, requestedAcknowledgeMode) ;
         this.pool = pool ;
         this.session = (XASession)getExceptionHandler(pool, XASession.class, session) ;
     }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolUnitTest.java	2009-07-05 21:09:22 UTC (rev 27591)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolUnitTest.java	2009-07-05 21:21:59 UTC (rev 27592)
@@ -63,6 +63,7 @@
 
 /**
  * Unit tests for handling JBM specific error conditions in JmsConnectionPool
+ * and JBMQ acknowledge behaviour.
  * 
  * @author <a href='kevin.conner at jboss.com'>Kevin Conner</a>
  */
@@ -98,6 +99,32 @@
     }
     
     @Test
+    public void testSessionAcknowledgeBehaviour()
+        throws Exception
+    {
+        MockSessionInvocationHandler.changeAcknowledgeMode = true ;
+        try
+        {
+            final JmsConnectionPool pool = new JmsConnectionPool(getPoolEnv()) ;
+            final int acknowledgeMode = Session.CLIENT_ACKNOWLEDGE ;
+            Assert.assertEquals("current pool free count", 0, pool.getFreeSessionsInPool(acknowledgeMode)) ;
+            Assert.assertEquals("current pool in use count", 0, pool.getInUseSessionsInPool(acknowledgeMode)) ;
+            final JmsSession session = pool.getSession(acknowledgeMode) ;
+            Assert.assertEquals("Session class", JmsSession.class, session.getClass()) ;
+            Assert.assertEquals("current pool free count", 0, pool.getFreeSessionsInPool(acknowledgeMode)) ;
+            Assert.assertEquals("current pool in use count", 1, pool.getInUseSessionsInPool(acknowledgeMode)) ;
+            Assert.assertTrue("Different acknowledge mode", acknowledgeMode != session.getAcknowledgeMode()) ;
+            pool.closeSession(session) ;
+            Assert.assertEquals("current pool free count", 1, pool.getFreeSessionsInPool(acknowledgeMode)) ;
+            Assert.assertEquals("current pool in use count", 0, pool.getInUseSessionsInPool(acknowledgeMode)) ;
+        }
+        finally
+        {
+            MockSessionInvocationHandler.changeAcknowledgeMode = false ;
+        }
+    }
+    
+    @Test
     public void testSessionRepeatableAcquire()
         throws Exception
     {
@@ -257,6 +284,36 @@
     }
     
     @Test
+    public void testXASessionAcknowledgeBehaviour()
+        throws Exception
+    {
+        final TransactionStrategy transactionStrategy = TransactionStrategy.getTransactionStrategy(true) ;
+        TransactionStrategy.setTransactionStrategy(new MockActiveTransactionStrategy()) ;
+        MockSessionInvocationHandler.changeAcknowledgeMode = true ;
+        try
+        {
+            final JmsConnectionPool pool = new JmsConnectionPool(getPoolEnv()) ;
+            // transactional sessions are requested with transacted acknowledge mode
+            final int acknowledgeMode = Session.SESSION_TRANSACTED ;
+            Assert.assertEquals("current pool free count", 0, pool.getFreeSessionsInPool(acknowledgeMode)) ;
+            Assert.assertEquals("current pool in use count", 0, pool.getInUseSessionsInPool(acknowledgeMode)) ;
+            final JmsSession session = pool.getSession() ;
+            Assert.assertEquals("Session class", JmsXASession.class, session.getClass()) ;
+            Assert.assertEquals("current pool free count", 0, pool.getFreeSessionsInPool(acknowledgeMode)) ;
+            Assert.assertEquals("current pool in use count", 1, pool.getInUseSessionsInPool(acknowledgeMode)) ;
+            Assert.assertTrue("Different acknowledge mode", acknowledgeMode != session.getAcknowledgeMode()) ;
+            pool.closeSession(session) ;
+            Assert.assertEquals("current pool free count", 1, pool.getFreeSessionsInPool(acknowledgeMode)) ;
+            Assert.assertEquals("current pool in use count", 0, pool.getInUseSessionsInPool(acknowledgeMode)) ;
+        }
+        finally
+        {
+            MockSessionInvocationHandler.changeAcknowledgeMode = false ;
+            TransactionStrategy.setTransactionStrategy(transactionStrategy) ;
+        }
+    }
+    
+    @Test
     public void testXASessionRetry()
         throws Exception
     {
@@ -550,6 +607,7 @@
     {
         private final Integer acknowledgeMode ;
         static boolean throwFault ;
+        static boolean changeAcknowledgeMode ;
             
         MockSessionInvocationHandler(final Integer acknowledgeMode)
         {
@@ -562,7 +620,14 @@
             final String methodName = method.getName() ;
             if ("getAcknowledgeMode".equals(methodName))
             {
-                return acknowledgeMode ;
+                if (changeAcknowledgeMode)
+                {
+                    return (acknowledgeMode + 1) & 3 ;
+                }
+                else
+                {
+                    return acknowledgeMode ;
+                }
             }
             else if ("createBrowser".equals(methodName))
             {




More information about the jboss-svn-commits mailing list