[jboss-cvs] JBoss Messaging SVN: r8247 - in branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664: integration/EAP4/etc/server/default/deploy and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 1 05:38:30 EDT 2011


Author: raggz
Date: 2011-04-01 05:38:30 -0400 (Fri, 01 Apr 2011)
New Revision: 8247

Added:
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroup.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroupMonitor.java
Modified:
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/jms/message/JBossMessage.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/ChannelSupport.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java
Log:
Back port of fix JBMessaging-1664

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -60,7 +60,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -60,7 +60,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
@@ -183,4 +183,4 @@
       ]]></attribute>
    </mbean>
 
-</server>
\ No newline at end of file
+</server>

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -61,7 +61,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -60,7 +60,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -60,7 +60,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -56,7 +56,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
@@ -272,4 +272,4 @@
       ]]></attribute>
    </mbean>
 
-</server>
\ No newline at end of file
+</server>

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml	2011-04-01 09:38:30 UTC (rev 8247)
@@ -61,7 +61,7 @@
    ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
    ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
    LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    LOAD_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? ORDER BY ORD
    UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/jms/message/JBossMessage.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/jms/message/JBossMessage.java	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/jms/message/JBossMessage.java	2011-04-01 09:38:30 UTC (rev 8247)
@@ -111,7 +111,11 @@
    
    //Used when bridging a message
    public static final String JBOSS_MESSAGING_BRIDGE_MESSAGE_ID_LIST = "JBM_BRIDGE_MSG_ID_LIST";
-   
+  
+   //Used in ordering group
+   public static final String JBOSS_MESSAGING_ORDERING_GROUP_ID = "JBM_ORDERING_GROUP_ID";
+
+ 
    private static final Logger log = Logger.getLogger(JBossMessage.class);   
       
    // Static --------------------------------------------------------

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/ChannelSupport.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/ChannelSupport.java	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/ChannelSupport.java	2011-04-01 09:38:30 UTC (rev 8247)
@@ -86,6 +86,7 @@
 
    protected volatile boolean active;
 
+   protected OrderingGroupMonitor monitor = new OrderingGroupMonitor();
    //TODO - I would like to get rid of this - the only reason we still keep a count of
    //refs being delivered is because many tests require this
    //Having to keep this count requires synchronization between delivery thread and acknowledgement

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java	2011-04-01 09:38:30 UTC (rev 8247)
@@ -36,6 +36,7 @@
 import org.jboss.messaging.util.StreamUtils;
 import org.jboss.messaging.util.Util;
 
+import javax.jms.Session;
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 import javax.transaction.xa.Xid;
@@ -979,6 +980,8 @@
          ps.close();
 
          ps = conn.prepareStatement(getSQLStatement("LOAD_UNPAGED_REFS"));
+         
+         ps.setFetchSize(number);
 
          ps.setLong(1, channelID);
 
@@ -989,23 +992,34 @@
          List<ReferenceInfo> refsToUpdate = new ArrayList<ReferenceInfo>();
 
          int count = 0;
+         boolean inMemSwitch = false;
+         boolean nonPageFlag = true;
          while (rs.next())
          {
+            rs.getObject(4);
+            inMemSwitch = rs.wasNull();
+            if (nonPageFlag && (!inMemSwitch))
+            {
+               nonPageFlag = false;
+            }
+            
             long msgId = rs.getLong(1);
             int deliveryCount = rs.getInt(2);
             long sched = rs.getLong(3);
 
             ReferenceInfo ri = new ReferenceInfo(msgId, deliveryCount, sched);
 
-            if (count < number)
+            if ((count < number) && nonPageFlag)
             {
                refs.add(ri);
             }
             else
             {
-               refsToUpdate.add(ri);
+               if (inMemSwitch)
+               {
+                  refsToUpdate.add(ri);
+               }
             }
-
             count++;
          }
 
@@ -2614,8 +2628,8 @@
               "SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF "
             + "WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD");
       map.put("LOAD_UNPAGED_REFS",
-              "SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' "
-            + "AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD");
+              "SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY, PAGE_ORD FROM JBM_MSG_REF WHERE STATE = 'C' "
+            + "AND CHANNEL_ID = ? ORDER BY ORD");
       map.put("LOAD_REFS",
               "SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' "
             + "AND CHANNEL_ID = ? ORDER BY ORD");

Added: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroup.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroup.java	                        (rev 0)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroup.java	2011-04-01 09:38:30 UTC (rev 8247)
@@ -0,0 +1,291 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.messaging.core.impl;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.jms.JMSException;
+
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.contract.MessageReference;
+
+/**
+*
+* This class holds the states of messages in an ordering group.
+*
+* @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+*
+*/
+public class OrderingGroup
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+   private List<ReferenceHolder> sortedList = new LinkedList<ReferenceHolder>();
+
+   private HashMap<Long, ReferenceHolder> refMap = new HashMap<Long, ReferenceHolder>();
+
+   private String groupName;
+
+   // Static --------------------------------------------------------
+   private static final Logger log = Logger.getLogger(OrderingGroup.class);
+
+   // Constructors --------------------------------------------------
+   public OrderingGroup(String name)
+   {
+      groupName = name;
+   }
+
+   private OrderingGroup()
+   {
+   }
+
+   // Public --------------------------------------------------------
+   /**
+    * Adding a message to a list. As messages are coming in order, we can just put
+    * the message to the end of the list.
+    * 
+    * @param ref The message reference to be added
+    * 
+    * @throws JMSException 
+    */
+   public boolean register(MessageReference ref)
+   {
+      Long mid = ref.getMessage().getMessageID();
+      ReferenceHolder holder = refMap.get(mid);
+      if (holder != null)
+      {
+         return true;
+      }
+      try
+      {
+         holder = new ReferenceHolder(mid);
+      }
+      catch (JMSException e)
+      {
+         log.error("error creating ReferenceHolder. ", e);
+      }
+      if (holder == null)
+      {
+         return false;
+      }
+      sortedList.add(holder);
+      refMap.put(mid, holder);
+      return true;
+   }
+
+   /**
+    * See if the ref be there and be the first
+    * Simply comparing the addresses simply doesn't work!
+    */
+   public int isAvailable(MessageReference ref)
+   {
+      if (sortedList.size() == 0) {
+         return OrderingGroupMonitor.OK;
+      }
+      
+      ReferenceHolder holder = sortedList.get(0);
+      return holder.isAvailable(ref);
+   }
+
+   /**
+    * remove the message reference from the group
+    * Note: the ref will be removed if and only if the ref
+    * resides the first in the list, otherwise just ignore it.
+    */
+   public void unregister(MessageReference ref)
+   {
+      if (sortedList.size() == 0) {
+         return;
+      }
+      ReferenceHolder holder = sortedList.get(0);
+      if (holder == null)
+      {
+         return;
+      }
+      if (holder.matchMessage(ref))
+      {
+         long count = holder.releaseRef();
+         if (count == 0)
+         {
+            sortedList.remove(0);
+            refMap.remove(ref.getMessage().getMessageID());
+         }
+      }
+   }
+
+   /**
+    * check if there are more message available in the list.
+    */
+   public boolean hasPendingMessage()
+   {
+      boolean result = false;
+      if (sortedList.size() == 0)
+      {
+         return result;
+      }
+      result = sortedList.size() > 0;
+      return result;
+   }
+
+   /**
+    * Set the flag that the Message is being delivered.
+    * @param ref
+    */
+   public void markSending(MessageReference ref)
+   {
+      if (sortedList.size() == 0)
+      {
+         return;
+      }
+      ReferenceHolder holder = sortedList.get(0);
+      if (holder.matchMessage(ref))
+      {
+         holder.markSending();
+      }
+   }
+
+   public String getGroupName()
+   {
+      return groupName;
+   }
+
+   /**
+    * @param ref
+    */
+   public void unmarkSending(MessageReference ref)
+   {
+      if (sortedList.size() == 0)
+      {
+         return;
+      }
+      ReferenceHolder holder = sortedList.get(0);
+      if (holder.matchMessage(ref))
+      {
+         holder.unmarkSending();
+      }
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}
+
+class ReferenceHolder
+{
+   private Long mid;
+
+   private long refCount;
+
+   private long pendingSentCount;
+
+   public ReferenceHolder(Long id) throws JMSException
+   {
+      mid = id;
+      refCount = 1;
+      pendingSentCount = 0;
+   }
+
+   public void markSending()
+   {
+      pendingSentCount++;
+   }
+
+   public long unmarkSending()
+   {
+      if (pendingSentCount > 0)
+      {
+         pendingSentCount--;
+      }
+      return pendingSentCount;
+   }
+
+   public boolean isPending()
+   {
+      return pendingSentCount > 0;
+   }
+
+   public int isAvailable(MessageReference exRef)
+   {
+      if (matchMessage(exRef))
+      {
+         if (pendingSentCount < refCount)
+         {
+            return OrderingGroupMonitor.OK;
+         }
+         return OrderingGroupMonitor.NOT_OK_BEING_SENT;
+      }
+      return OrderingGroupMonitor.NOT_OK_NOT_FIRST;
+   }
+
+   /**
+    * So far only allowed to register once. 
+    */
+   public void addRef()
+   {
+      refCount++;
+   }
+
+   public long releaseRef()
+   {
+      if (refCount > 0)
+      {
+         refCount--;
+      }
+      return refCount;
+   }
+
+   /**
+    * decrease the ref count
+    * here we don't care about pendingSentCount here.
+    */
+   public long releaseSendnRef()
+   {
+      refCount--;
+      pendingSentCount--;
+      return refCount;
+   }
+
+   /**
+    * If the holder holds the same message as in the ref.
+    */
+   public boolean matchMessage(MessageReference newRef)
+   {
+      Long mid1 = newRef.getMessage().getMessageID();
+      return mid1.equals(mid);
+   }
+
+   public Long getMessageID()
+   {
+      return mid;
+   }
+
+}


Property changes on: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroup.java
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroupMonitor.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroupMonitor.java	                        (rev 0)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroupMonitor.java	2011-04-01 09:38:30 UTC (rev 8247)
@@ -0,0 +1,237 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.messaging.core.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.jms.JMSException;
+
+import org.jboss.jms.message.JBossMessage;
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.contract.Message;
+import org.jboss.messaging.core.contract.MessageReference;
+
+/**
+*
+* This class guards against any delivering of ordering group messages.
+*
+* @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+*
+*/
+public class OrderingGroupMonitor
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+   private HashMap<String, OrderingGroup> orderingGroups = new HashMap<String, OrderingGroup>();
+
+   // Static --------------------------------------------------------
+   private static final Logger log = Logger.getLogger(OrderingGroupMonitor.class);
+
+   public static final int OK = 0;
+   public static final int NOT_OK_NOT_FIRST = 1;
+
+   public static final int NOT_OK_BEING_SENT = 2;
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   /**
+    * Check the message is it is a member of an ordering group, if so,
+    * put it in; if not, do nothing.
+    * if the message is dropped due to maxSize being reached, it won't 
+    * get registered.
+    */
+   public void registerMessage(MessageReference ref)
+   {
+      String grpName = extractGroupName(ref);
+      if (grpName == null)
+      {
+         return;
+      }
+      synchronized (orderingGroups)
+      {
+         OrderingGroup group = orderingGroups.get(grpName);
+         if (group == null)
+         {
+            group = new OrderingGroup(grpName);
+            orderingGroups.put(grpName, group);
+         }
+         group.register(ref);
+      }
+   }
+
+   /**
+    * If ref is not in our registry, just return OK.
+    * If in our registry, check if the ref is the first of the group.
+    * return OK if it is at the first place. 
+    * otherwise return NOT_OK_BEING_SENT if the ref is being sent or
+    * NOT_OK_NOT_FIRST is the ref is not at the first place.
+    */
+   public int isAvailable(MessageReference ref)
+   {
+      int result = OK;
+      String grpName = extractGroupName(ref);
+      if (grpName != null)
+      {
+         synchronized (orderingGroups)
+         {
+            OrderingGroup group = orderingGroups.get(grpName);
+            if (group != null)
+            {
+               result = group.isAvailable(ref);
+            }
+         }
+      }
+      else
+      {
+         log.debug("message doesn't have group prop, fine by me");
+      }
+      return result;
+   }
+
+   /**
+    * This method indicates a messgae is completed.
+    * it is called when a message is acked, commited or rollback
+    * once the message is completed, the next one in a ordering 
+    * group becomes deliverable.
+    * return if there is more messages available after this one.
+    */
+   public boolean messageCompleted(MessageReference ref)
+   {
+      String grpName = extractGroupName(ref);
+      if (grpName == null)
+      {
+         //not a ordering group message
+         return false;
+      }
+      synchronized (orderingGroups)
+      {
+         OrderingGroup group = orderingGroups.get(grpName);
+         if (group != null)
+         {
+            group.unregister(ref);
+         }
+         return this.hasMessageInQueue();
+      }
+   }
+
+   /**
+    * Check if there is any pending messages in any group.
+    */
+   private boolean hasMessageInQueue()
+   {
+      boolean result = false;
+      synchronized (orderingGroups)
+      {
+         Iterator<OrderingGroup> iter = orderingGroups.values().iterator();
+         while (iter.hasNext())
+         {
+            OrderingGroup group = iter.next();
+            if (group.hasPendingMessage())
+            {
+               result = true;
+               break;
+            }
+         }
+         
+      }
+      return result;
+   }
+
+   /**
+    * reducing the refcount, if zero, remove it.
+    */
+   public void unmarkSending(MessageReference ref)
+   {
+      String grpName = extractGroupName(ref);
+      if (grpName == null)
+      {
+         return;
+      }
+      synchronized (orderingGroups)
+      {
+         OrderingGroup group = orderingGroups.get(grpName);
+         if (group != null)
+         {
+            group.unmarkSending(ref);
+         }
+      }
+   }
+
+   public void markSending(MessageReference ref)
+   {
+      String grpName = extractGroupName(ref);
+      if (grpName != null)
+      {
+         synchronized (orderingGroups)
+         {
+            OrderingGroup group = orderingGroups.get(grpName);
+            if (group != null)
+            {
+               group.markSending(ref);
+            }
+         }
+      }
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+   private static String extractGroupName(MessageReference ref)
+   {
+      String name = null;
+      try
+      {
+         Message obj = ref.getMessage();
+         if (obj instanceof JBossMessage)
+         {
+            JBossMessage msg = (JBossMessage)ref.getMessage();
+            if (msg != null)
+            {
+               name = msg.getStringProperty(JBossMessage.JBOSS_MESSAGING_ORDERING_GROUP_ID);
+            }
+         }
+      }
+      catch (JMSException e)
+      {
+      }
+      return name;
+   }
+
+   /**
+    * check if the message has a group name
+    */
+   public static boolean isOrderingGroupMessage(MessageReference ref)
+   {
+      return extractGroupName(ref) != null;
+   }
+
+   // Inner classes -------------------------------------------------
+
+}


Property changes on: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/OrderingGroupMonitor.java
___________________________________________________________________
Added: svn:executable
   + *

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java	2011-04-01 09:08:37 UTC (rev 8246)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP04_JBMESSAGING_1664/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java	2011-04-01 09:38:30 UTC (rev 8247)
@@ -265,6 +265,9 @@
          
          MessageReference ref = addFromRefInfo(info, refMap);
          
+         //https://jira.jboss.org/jira/browse/JBMESSAGING-1664
+         monitor.registerMessage(ref);
+         
          if (recoverable && ref.getMessage().isReliable())
          {
             loadedReliable = true;



More information about the jboss-cvs-commits mailing list