[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