[jboss-cvs] JBoss Messaging SVN: r8147 - in branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828: integration/EAP4/etc/server/default/deploy and 17 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Dec 6 01:28:31 EST 2010


Author: jbertram at redhat.com
Date: 2010-12-06 01:28:29 -0500 (Mon, 06 Dec 2010)
New Revision: 8147

Added:
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/ConnectionCreateSessionDelegateRequest2.java
Modified:
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/db2-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mssql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mysql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/ndb-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/oracle-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/postgresql-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/sybase-persistence-service.xml
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/JBossConnectionConsumer.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/container/StateCreationAspect.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/ConnectionState.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/SessionState.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/delegate/ConnectionEndpoint.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/connectionmanager/SimpleConnectionManager.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/advised/ConnectionAdvised.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/PacketSupport.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/Delivery.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/PersistenceManager.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/MessagingQueue.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/NullPersistenceManager.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/SimpleDelivery.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/clusterconnection/MessageSucker.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/ConnectionConsumerTest.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/server/connectionmanager/SimpleConnectionManagerTest.java
Log:
JBPAPP-5508

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/db2-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -66,7 +66,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT (CAST(? AS DECIMAL(19,0))), (CAST(? AS CHAR)), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))) FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID DECIMAL(19, 0) NOT NULL, START_TIME DECIMAL(19, 0), PRIMARY KEY (TRANSACTION_ID))
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mssql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID BIGINT, START_TIME BIGINT, PRIMARY KEY (TRANSACTION_ID))
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/mysql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID BIGINT, START_TIME BIGINT, PRIMARY KEY (TRANSACTION_ID)) ENGINE = INNODB
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?,?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/ndb-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID BIGINT, START_TIME BIGINT, PRIMARY KEY (TRANSACTION_ID)) ENGINE = NDBCLUSTER
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/oracle-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -66,7 +66,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID INTEGER, START_TIME INTEGER, PRIMARY KEY (TRANSACTION_ID))
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/postgresql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID BIGINT, START_TIME BIGINT, PRIMARY KEY (TRANSACTION_ID))
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/AS5/etc/server/default/deploy/sybase-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -67,7 +67,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -90,6 +90,13 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   CREATE_TRANSACTION_EXTRA=CREATE TABLE JBM_TX_EX (TRANSACTION_ID DECIMAL(19, 0) NOT NULL, START_TIME DECIMAL(19, 0), PRIMARY KEY (TRANSACTION_ID))
+   SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
+   INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
+   DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/db2-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -66,7 +66,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT (CAST(? AS DECIMAL(19,0))), (CAST(? AS CHAR)), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))) FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -93,6 +93,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mssql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/mysql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?,?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
    ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/ndb-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/oracle-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -66,7 +66,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -93,6 +93,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/postgresql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP4/etc/server/default/deploy/sybase-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -67,7 +67,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -94,6 +94,9 @@
    SELECT_TRANSACTION_START_TIME_EXTRA=SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX
    INSERT_TRANSACTION_EXTRA=INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?, ?)
    DELETE_TRANSACTION_EXTRA=DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/db2-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/db2-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/db2-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -66,7 +66,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT (CAST(? AS DECIMAL(19,0))), (CAST(? AS CHAR)), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))), (CAST(? AS DECIMAL(19,0))) FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,9 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mssql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mssql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mssql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,9 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mysql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mysql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/mysql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,7 +85,10 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
-      ]]></attribute>
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
+   ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->
 

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/ndb-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/ndb-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/ndb-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,9 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/oracle-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/oracle-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/oracle-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -66,7 +66,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -89,6 +89,9 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/postgresql-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/postgresql-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/postgresql-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -62,7 +62,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -85,6 +85,9 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/sybase-persistence-service.xml
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/sybase-persistence-service.xml	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/integration/EAP5/etc/server/default/deploy/sybase-persistence-service.xml	2010-12-06 06:28:29 UTC (rev 8147)
@@ -67,7 +67,7 @@
    SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
    UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
    UPDATE_CHANNEL_ID=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE CHANNEL_ID = ?
-   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   MOVE_REFERENCE=UPDATE JBM_MSG_REF SET CHANNEL_ID = ?, STATE='C' WHERE MESSAGE_ID = ? AND CHANNEL_ID = ? AND STATE='S'
    LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
    INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE, HEADERS, PAYLOAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    INSERT_MESSAGE_CONDITIONAL=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, TYPE) SELECT ?, ?, ?, ?, ?, ? FROM JBM_DUAL WHERE NOT EXISTS (SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?)
@@ -90,6 +90,9 @@
    LOAD_ID_CACHE=SELECT CNTR, JBM_ID FROM JBM_ID_CACHE WHERE NODE_ID = ?
    DELETE_CHANNEL_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE CHANNEL_ID=?
    DELETE_CHANNEL_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID = ?
+   UPDATE_MESSAGE_STATE=UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?
+   CLAIM_MESSAGE_IN_SUCK=UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'
+   LOAD_REFS_IN_SUCK=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD
       ]]></attribute>
 
       <!-- The maximum number of parameters to include in a prepared statement -->

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/JBossConnectionConsumer.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/JBossConnectionConsumer.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/JBossConnectionConsumer.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -121,7 +121,7 @@
 
       // Create a consumer. The ClientConsumer knows we are a connection consumer so will
       // not call pre or postDeliver so messages won't be acked, or stored in session/tx.
-      sess = conn.createSessionDelegate(false, Session.CLIENT_ACKNOWLEDGE, false);
+      sess = conn.createSessionDelegate(false, Session.CLIENT_ACKNOWLEDGE, false, true);
           
       cons = sess.createConsumerDelegate(dest, messageSelector, false, subName, true, true);
 

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/container/StateCreationAspect.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -122,10 +122,16 @@
       int ackMode = ((Integer)mi.getArguments()[1]).intValue();
       boolean xa = ((Boolean)mi.getArguments()[2]).booleanValue();
 
+      boolean isCC = false;
+      if (mi.getArguments().length >= 4)
+      {
+         isCC = ((Boolean)mi.getArguments()[3]).booleanValue();
+      }
+
       SessionState sessionState =
          new SessionState(connectionState, sessionDelegate, transacted,
                           ackMode, xa, sessionDelegate.getDupsOKBatchSize(), 
-                          connectionState.isEnableOrderingGroup(), connectionState.getDefaultOrderingGroupName());
+                          connectionState.isEnableOrderingGroup(), connectionState.getDefaultOrderingGroupName(), isCC);
 
       delegate.setState(sessionState);
       return delegate;

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -44,6 +44,7 @@
 import org.jboss.jms.wireformat.CloseRequest;
 import org.jboss.jms.wireformat.ClosingRequest;
 import org.jboss.jms.wireformat.ConnectionCreateSessionDelegateRequest;
+import org.jboss.jms.wireformat.ConnectionCreateSessionDelegateRequest2;
 import org.jboss.jms.wireformat.ConnectionGetClientIDRequest;
 import org.jboss.jms.wireformat.ConnectionGetIDBlockRequest;
 import org.jboss.jms.wireformat.ConnectionGetPreparedTransactionsRequest;
@@ -179,9 +180,7 @@
       throw new IllegalStateException("This invocation should not be handled here!");
    }
 
-   public SessionDelegate createSessionDelegate(boolean transacted,
-                                                int acknowledgmentMode,
-                                                boolean isXA) throws JMSException
+   public SessionDelegate createSessionDelegate(boolean transacted, int acknowledgmentMode, boolean isXA) throws JMSException
    {
       RequestSupport req =
          new ConnectionCreateSessionDelegateRequest(id, version, transacted,
@@ -190,7 +189,18 @@
       return (SessionDelegate)doInvoke(client, req);
    }
 
+   public SessionDelegate createSessionDelegate(boolean transacted,
+                                                int acknowledgmentMode,
+                                                boolean isXA, boolean isCC) throws JMSException
+   {
+      RequestSupport req =
+         new ConnectionCreateSessionDelegateRequest2(id, version, transacted,
+                                                    acknowledgmentMode, isXA, isCC);
 
+      return (SessionDelegate)doInvoke(client, req);
+   }
+
+
    public String getClientID() throws JMSException
    {
       RequestSupport req = new ConnectionGetClientIDRequest(id, version);

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -48,7 +48,7 @@
 {
    // Constants ------------------------------------------------------------------------------------
    final static private Logger log = Logger.getLogger(ClientSocketWrapper.class);
-   final static protected int CLOSING = 1;
+   final static protected int CLOSING = 254;
    
    // Static ---------------------------------------------------------------------------------------
 
@@ -104,7 +104,7 @@
    {
       if (log.isTraceEnabled()) log.trace("checking open connection");
 
-      if (((DataInputStream)getInputStream()).available() > 1)
+      if (((DataInputStream)getInputStream()).available() > 0)
       {
          log.trace("remote endpoint has closed");
          throw new IOException("remote endpoint has closed");

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/ConnectionState.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/ConnectionState.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/ConnectionState.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -172,7 +172,7 @@
          ClientSessionDelegate newSessionDelegate = (ClientSessionDelegate)newDelegate.
             createSessionDelegate(sessionState.isTransacted(),
                                   sessionState.getAcknowledgeMode(),
-                                  sessionState.isXA());
+                                  sessionState.isXA(), sessionState.isCC());
 
          sessionDelegate.synchronizeWith(newSessionDelegate);
       }

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/SessionState.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/SessionState.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/client/state/SessionState.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -126,11 +126,13 @@
    
    private String defaultOrderingGroupName;
    
+   private boolean isCC;
+   
    // Constructors ---------------------------------------------------------------------------------
-
+   
    public SessionState(ConnectionState parent, ClientSessionDelegate delegate,
                        boolean transacted, int ackMode, boolean xa,
-                       int dupsOKBatchSize, boolean enableOrderingGroup, String defaultOrderingGroupName)
+                       int dupsOKBatchSize, boolean enableOrderingGroup, String defaultOrderingGroupName, boolean isCC)
    {
       super(parent, (DelegateSupport)delegate);
 
@@ -140,6 +142,7 @@
       this.acknowledgeMode = ackMode;
       this.transacted = transacted;
       this.xa = xa;
+      this.isCC = isCC;
       
       this.dupsOKBatchSize = dupsOKBatchSize;
 
@@ -434,6 +437,11 @@
       return xa;
    }
 
+   public boolean isCC()
+   {
+      return isCC;
+   }
+   
    public MessagingXAResource getXAResource()
    {
       return xaResource;

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/delegate/ConnectionEndpoint.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/delegate/ConnectionEndpoint.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/delegate/ConnectionEndpoint.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -43,6 +43,10 @@
                                          int acknowledgmentMode,
                                          boolean isXA) throws JMSException;
 
+   SessionDelegate createSessionDelegate(boolean transacted,
+                                         int acknowledgmentMode,
+                                         boolean isXA, boolean isCC) throws JMSException;
+
    String getClientID() throws JMSException;
 
    void setClientID(String id) throws JMSException;

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/connectionmanager/SimpleConnectionManager.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/connectionmanager/SimpleConnectionManager.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/connectionmanager/SimpleConnectionManager.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -485,7 +485,14 @@
                }
                try
                {
-                  conn.close();
+                  if (conn instanceof ServerConnectionEndpoint)
+                  {
+                     ((ServerConnectionEndpoint)conn).close(true);
+                  }
+                  else
+                  {
+                     conn.close();
+                  }
                }
                catch (Throwable ignore)
                {              

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -224,16 +224,21 @@
 
    // ConnectionDelegate implementation ------------------------------------------------------------
 
+   public SessionDelegate createSessionDelegate(boolean transacted, int acknowledgmentMode, boolean isXA) throws JMSException
+   {
+      return createSessionDelegate(transacted, acknowledgmentMode, isXA, false);
+   }
+
    public SessionDelegate createSessionDelegate(boolean transacted,
                                                 int acknowledgmentMode,
-                                                boolean isXA)
+                                                boolean isXA, boolean isCC)
       throws JMSException
    {
       try
       {
          log.trace(this + " creating " + (transacted ? "transacted" : "non transacted") +
             " session, " + Util.acknowledgmentMode(acknowledgmentMode) + ", " +
-            (isXA ? "XA": "non XA"));
+            (isXA ? "XA": "non XA") + ", " + (isCC ? "CC" : "non CC"));
 
          if (closed)
          {
@@ -248,6 +253,11 @@
          //Note we only replicate transacted and client acknowledge sessions.
          ServerSessionEndpoint ep = new ServerSessionEndpoint(sessionID, this,
          		                     transacted || acknowledgmentMode == Session.CLIENT_ACKNOWLEDGE);
+         
+         if (isCC)
+         {
+            ep.setCC();
+         }
 
          synchronized (sessions)
          {
@@ -361,9 +371,14 @@
          throw ExceptionUtil.handleJMSInvocation(t, this + " stop");
       }
    }
-
+   
    public void close() throws JMSException
    {
+      close(false);
+   }
+
+   public void close(boolean isFromFailure) throws JMSException
+   {
       try
       {
          //reason for synchronization
@@ -392,7 +407,7 @@
          {
             ServerSessionEndpoint sess = (ServerSessionEndpoint)i.next();
 
-            sess.localClose();
+            sess.localClose(isFromFailure);
          }
 
          sessions.clear();

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jms.server.endpoint;
 
+import java.util.List;
+
 import javax.jms.IllegalStateException;
 import javax.jms.InvalidSelectorException;
 import javax.jms.JMSException;
@@ -35,10 +37,12 @@
 import org.jboss.jms.server.selector.Selector;
 import org.jboss.jms.wireformat.Dispatcher;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.contract.Channel;
 import org.jboss.messaging.core.contract.Delivery;
 import org.jboss.messaging.core.contract.DeliveryObserver;
 import org.jboss.messaging.core.contract.Message;
 import org.jboss.messaging.core.contract.MessageReference;
+import org.jboss.messaging.core.contract.PersistenceManager;
 import org.jboss.messaging.core.contract.PostOffice;
 import org.jboss.messaging.core.contract.Queue;
 import org.jboss.messaging.core.contract.Receiver;
@@ -53,6 +57,7 @@
  * 
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
  * @version <tt>$Revision$</tt> $Id$
  */
 public class ServerConsumerEndpoint implements Receiver, ConsumerEndpoint
@@ -322,6 +327,26 @@
             firstTime = false;
          }         
          
+         //now for a remote sucker, we need to update the messages status
+         if (remote)
+         {
+            PersistenceManager pm = sessionEndpoint.getPersistenceManager();
+            if (ref.getMessage().isReliable() && messageQueue.isRecoverable())
+            {
+               try
+               {
+                  pm.updateMessageState(messageQueue.getChannelID(), ref, "S");
+               }
+               catch (Exception e)
+               {
+                  //we need to stop the sucking process. the message should be re-delivered.
+                  log.error("Failed to update state for message: " + ref, e);
+                  return null;
+               }
+            }
+            delivery.setSucked(true);
+         }
+         
          try
          {
          	sessionEndpoint.handleDelivery(delivery, this);
@@ -647,6 +672,16 @@
       sessionEndpoint.promptDelivery(messageQueue);
    }
 
+   public long getChannelID()
+   {
+      return messageQueue.getChannelID();
+   }
+
+   public Channel getChannel()
+   {
+      return messageQueue;
+   }
+
    // Inner classes --------------------------------------------------------------------------------
 
 }

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -33,6 +33,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.jms.IllegalStateException;
 import javax.jms.InvalidDestinationException;
@@ -74,11 +75,13 @@
 import org.jboss.messaging.core.contract.MessageReference;
 import org.jboss.messaging.core.contract.MessageStore;
 import org.jboss.messaging.core.contract.PersistenceManager;
+import org.jboss.messaging.core.contract.PersistenceManager.ReferenceInfo;
 import org.jboss.messaging.core.contract.PostOffice;
 import org.jboss.messaging.core.contract.Queue;
 import org.jboss.messaging.core.contract.Replicator;
 import org.jboss.messaging.core.impl.IDManager;
 import org.jboss.messaging.core.impl.MessagingQueue;
+import org.jboss.messaging.core.impl.SimpleDelivery;
 import org.jboss.messaging.core.impl.tx.Transaction;
 import org.jboss.messaging.core.impl.tx.TransactionException;
 import org.jboss.messaging.core.impl.tx.TransactionRepository;
@@ -187,7 +190,14 @@
 
    private long lastSequence = -1;
 
+   private Map<Long, Long> failureCanceledDels;
 
+   private AtomicBoolean isSuckerSession = new AtomicBoolean(false);
+   
+   private boolean isCC = false;
+   
+   private boolean markClose = false;
+
    // Constructors ---------------------------------------------------------------------------------
 
    ServerSessionEndpoint(String sessionID, ServerConnectionEndpoint connectionEndpoint,
@@ -236,6 +246,8 @@
       defaultRedeliveryDelay = sp.getDefaultRedeliveryDelay();
 
       deliveries = new ConcurrentHashMap();
+      
+      failureCanceledDels = new HashMap<Long, Long>();
    }
 
    // SessionDelegate implementation ---------------------------------------------------------------
@@ -333,6 +345,30 @@
 
    public void close() throws JMSException
    {
+      if (isCC)
+      {
+         markClose = true;
+         checkClose();
+      }
+      else
+      {
+         trueClose();
+      }
+   }
+   
+   public void checkClose() throws JMSException
+   {
+      if (trace) {log.trace(this + " checking cc closing: " + markClose + " counter: " + deliveries.size()); }
+      
+      if (markClose && deliveries.size() == 0)
+      {
+         if (trace) {log.trace(this + " closing CC session now.");}
+         trueClose();
+      }
+   }
+   
+   public void trueClose() throws JMSException
+   {
       try
       {
          localClose();
@@ -1133,9 +1169,14 @@
          }
       }
    }
-
+   
    void localClose() throws Throwable
    {
+      localClose(false);
+   }
+
+   void localClose(boolean isFromFailure) throws Throwable
+   {
            
       if (closed)
       {
@@ -1154,9 +1195,13 @@
          consumersClone = new HashMap(consumers);
       }
 
+      List<Channel> curChannels = new ArrayList<Channel>();
+      
       for( Iterator i = consumersClone.values().iterator(); i.hasNext(); )
       {
-         ((ServerConsumerEndpoint)i.next()).localClose();
+         ServerConsumerEndpoint consumer = (ServerConsumerEndpoint)i.next();
+         curChannels.add(consumer.getChannel());
+         consumer.localClose();
       }
 
       consumers.clear();
@@ -1213,6 +1258,33 @@
 
             DeliveryRecord rec = (DeliveryRecord)entry.getValue();
 
+            // https://jira.jboss.org/browse/JBMESSAGING-1828
+            if (rec == null)
+            {
+               continue;
+            }
+
+            //for a suck delivery, we need to update the state back to 'C'
+            if (rec.del.isSucked())
+            {
+               //we need to reverse the message (if still there). If reverse failed, we don't do 
+               //cancel.
+               if (rec.del.getReference().getMessage().isReliable() && rec.getConsumer().getChannel().isRecoverable())
+               {
+                  try
+                  {
+                     //now ask pm to do it.
+                     pm.updateMessageState(rec.getConsumer().getChannelID(), rec.del.getReference(), "C");
+                  }
+                  catch (Exception e)
+                  {
+                     //if update failed, it must be a DB failure, we log the error and let others be canceled
+                     log.error("Failed to update message " + rec.del.getReference() + " to state C", e);
+                     continue;
+                  }
+               }
+            }
+
             /*
              * https://jira.jboss.org/jira/browse/JBMESSAGING-1440
              */
@@ -1222,7 +1294,53 @@
             }
 
             channels.add(rec.del.getObserver());
+            
+            if (isFromFailure)
+            {
+               failureCanceledDels.put(rec.deliveryID, rec.deliveryID);
+            }
          }
+         
+         if (isSuckerSession.get())
+         {
+            //here we handle rare cases where a sucker acked a message but then crashed.
+            //so the message won't be updated to target channel and also the session already 
+            //forgets it. We take this chance here 
+            //to load those messages into channels and redeliver
+            for (Channel ch : curChannels)
+            {
+               List<ReferenceInfo> refs = pm.claimMessagesInSuck(ch.getChannelID());
+               
+               if (refs.size() > 0)
+               {
+                  List<Long> mids = new ArrayList<Long>();
+                  Map<Long, ReferenceInfo> refInfoMap = new HashMap<Long, ReferenceInfo>();
+               
+                  for (ReferenceInfo refInfo : refs)
+                  {
+                     mids.add(refInfo.getMessageId());
+                     refInfoMap.put(refInfo.getMessageId(), refInfo);
+                  }
+               
+                  List messages = pm.getMessages(mids);
+                  
+                  iter = messages.iterator();
+                  
+                  while (iter.hasNext())
+                  {
+                     Message m = (Message)iter.next();
+                     MessageReference mref = ms.reference(m);
+                     
+                     ReferenceInfo mInfo = refInfoMap.get(m.getMessageID());
+                     mref.setDeliveryCount(mInfo.getDeliveryCount());
+                     mref.setScheduledDeliveryTime(mInfo.getScheduledDelivery());
+                     
+                     Delivery del = new SimpleDelivery(ch, mref, true, true);
+                     del.cancel();
+                  }
+               }
+            }
+         }
 
          promptDelivery(channels);
 
@@ -1600,19 +1718,40 @@
       synchronized (deliveries)
       {
          rec = (DeliveryRecord)deliveries.remove(new Long(cancel.getDeliveryId()));
+         if (rec == null)
+         {
+            //The delivery might not be found, if the session is not replicated (i.e. auto_ack or dups_ok)
+            //and has failed over since recoverDeliveries won't have been called
+            if (trace)
+            {
+               log.trace("Cannot find delivery to cancel, session probably failed over and is not replicated");
+            }
+            return null;
+         }
+         //now we check for suckers
+         if (rec.del.isSucked())
+         {
+            //we need to reverse the message (if still there). If reverse failed, we don't do 
+            //cancel.
+            if (rec.del.getReference().getMessage().isReliable() && rec.getConsumer().getChannel().isRecoverable())
+            {
+               try
+               {
+                  //now ask pm to do it.
+                  pm.updateMessageState(rec.getConsumer().getChannelID(), rec.del.getReference(), "C");
+               }
+               catch (Exception e)
+               {
+                  if (trace)
+                  {
+                     log.trace("Failed to update message " + rec.del.getReference() + " to state C");
+                  }
+                  return null;
+               }
+            }
+         }
       }
 
-      if (rec == null)
-      {
-         //The delivery might not be found, if the session is not replicated (i.e. auto_ack or dups_ok)
-      	//and has failed over since recoverDeliveries won't have been called
-      	if (trace)
-      	{
-      		log.trace("Cannot find delivery to cancel, session probably failed over and is not replicated");
-      	}
-      	return null;
-      }
-
       //Note we check the flag *and* evaluate again, this is because the server and client clocks may
       //be out of synch and don't want to send back to the client a message it thought it has sent to
       //the expiry queue
@@ -1666,6 +1805,11 @@
 
       //Need to send a message to the replicant to remove the id
       postOffice.sendReplicateAckMessage(rec.queueName, del.getReference().getMessage().getMessageID());
+      
+      if (isCC)
+      {
+         checkClose();
+      }
 
       return rec.del;
    }
@@ -1762,15 +1906,29 @@
       synchronized (deliveries)
       {
          rec = (DeliveryRecord)deliveries.remove(new Long(ack.getDeliveryID()));
+         if (rec == null)
+         {
+            //This can happen in one of the two cases:
+            //
+            //1. If an ack comes in after failover, or
+            //2. The session is closed due to server side connection failure notification processing.
+            //When a connection failure is detected at the server end, it will close all related server side
+            //sessions. As part of closing, any un-acked message will be canceled. 
+            //if a normal client side ack comes in just after the session is thus being closed, and this ack
+            //has just been canceled, the client side ack will end up here.
+            //
+            //We treat the cases differently. For case 1, we can safely ignore it.
+            //For case 2, we must throw an exception to indicating that the ack failed and the message will be re-delivered.
+            if (failureCanceledDels.remove(ack.getDeliveryID()) != null)
+            {
+               //ack should fail
+               throw new JMSException("Message already canceled before this ack " + ack + " and the message will be redelivered.");
+            }
+            log.debug("Cannot find " + ack + " to acknowledge, it was probably acknowledged before");
+            return false;            
+         }
       }
 
-      if (rec == null)
-      {
-      	//This can happen if an ack comes in after failover
-         log.debug("Cannot find " + ack + " to acknowledge, it was probably acknowledged before");
-         return false;
-      }
-
       ServerConsumerEndpoint consumer = rec.getConsumer();
 
       if (consumer != null && consumer.isRemote())
@@ -1791,6 +1949,11 @@
       }
 
       if (trace) { log.trace(this + " acknowledged delivery " + ack); }
+      
+      if (isCC)
+      {
+         checkClose();
+      }
 
       return true;
    }
@@ -1856,6 +2019,8 @@
       }
 
       log.trace(this + " created and registered " + ep);
+      
+      isSuckerSession.set(true);
 
       return stub;
    }
@@ -2392,6 +2557,19 @@
             		throw new TransactionException("Failed to handle send ack", e);
             	}
             }
+
+            if (isCC && del != null)
+            {
+               try
+               {
+                  checkClose();
+               }
+               catch (JMSException e)
+               {
+                  //we don't need to do anything here.
+                  log.warn("Exception closing a CC session " + this);
+               }
+            }
          }
       }
 
@@ -2409,4 +2587,19 @@
       }
    }
 
+   public PersistenceManager getPersistenceManager()
+   {
+      return pm;
+   }
+
+   public void setCC()
+   {
+      isCC = true;
+   }
+   
+   public boolean isCC()
+   {
+      return isCC;
+   }
+
 }

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/advised/ConnectionAdvised.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/advised/ConnectionAdvised.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/server/endpoint/advised/ConnectionAdvised.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -68,11 +68,16 @@
       return endpoint.closing(sequence);
    }
 
+   public SessionDelegate createSessionDelegate(boolean transacted, int acknowledgmentMode, boolean isXA) throws JMSException
+   {
+      return endpoint.createSessionDelegate(transacted, acknowledgmentMode, isXA);
+   }
+
    public SessionDelegate createSessionDelegate(boolean transacted,
                                                 int acknowledgmentMode,
-                                                boolean isXA) throws JMSException
+                                                boolean isXA, boolean isCC) throws JMSException
    {
-      return endpoint.createSessionDelegate(transacted, acknowledgmentMode, isXA);
+      return endpoint.createSessionDelegate(transacted, acknowledgmentMode, isXA, isCC);
    }
 
    public String getClientID() throws JMSException

Copied: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/ConnectionCreateSessionDelegateRequest2.java (from rev 8142, branches/Branch_1_4/src/main/org/jboss/jms/wireformat/ConnectionCreateSessionDelegateRequest2.java)
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/ConnectionCreateSessionDelegateRequest2.java	                        (rev 0)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/ConnectionCreateSessionDelegateRequest2.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -0,0 +1,115 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2010, 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.jms.wireformat;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+import org.jboss.jms.client.delegate.ClientSessionDelegate;
+import org.jboss.jms.delegate.ConnectionEndpoint;
+
+/**
+ * A ConnectionCreateSessionDelegateRequest2
+ *
+ * @author howard
+ * 
+ * Created Dec 1, 2010 12:41:35 PM
+ *
+ *
+ */
+public class ConnectionCreateSessionDelegateRequest2 extends RequestSupport
+{
+   private boolean transacted;
+   
+   private int acknowledgmentMode;
+   
+   private boolean xa;
+   
+   private boolean isCC;
+   
+   public ConnectionCreateSessionDelegateRequest2()
+   {      
+   }
+   
+   public ConnectionCreateSessionDelegateRequest2(String objectId,
+                                                 byte version,
+                                                 boolean transacted, int ackMode,
+                                                 boolean xa, boolean isCC)
+   {
+      super(objectId, PacketSupport.REQ_CONNECTION_CREATESESSIONDELEGATE2, version);
+      
+      this.transacted = transacted;
+      
+      this.acknowledgmentMode = ackMode;
+      
+      this.xa = xa;
+      
+      this.isCC = isCC;
+   }
+
+   public void read(DataInputStream is) throws Exception
+   {
+      super.read(is);
+      
+      transacted = is.readBoolean();
+      
+      acknowledgmentMode = is.readInt();
+      
+      xa = is.readBoolean();
+      
+      isCC = is.readBoolean();
+   }
+
+   public ResponseSupport serverInvoke() throws Exception
+   {
+      ConnectionEndpoint endpoint = 
+         (ConnectionEndpoint)Dispatcher.instance.getTarget(objectId);
+      
+      if (endpoint == null)
+      {
+         throw new IllegalStateException("Cannot find object in dispatcher with id " + objectId);
+      }
+      
+      return new ConnectionCreateSessionDelegateResponse((ClientSessionDelegate)endpoint.createSessionDelegate(transacted, acknowledgmentMode, xa, isCC));         
+   }
+
+   public void write(DataOutputStream os) throws Exception
+   {
+      super.write(os);
+      
+      //Write the args
+           
+      os.writeBoolean(transacted);
+      
+      os.writeInt(acknowledgmentMode);
+      
+      os.writeBoolean(xa);
+      
+      os.writeBoolean(isCC);
+      
+      os.flush();
+   }
+
+}
+

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/PacketSupport.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/PacketSupport.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/jms/wireformat/PacketSupport.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -91,6 +91,7 @@
    public static final int REQ_CONNECTION_STOP = 205;
    public static final int REQ_CONNECTION_SENDTRANSACTION = 206;
    public static final int REQ_CONNECTION_GETPREPAREDTRANSACTIONS = 207;
+   public static final int REQ_CONNECTION_CREATESESSIONDELEGATE2 = 208;
    
    // Session
    // -------
@@ -226,6 +227,9 @@
          case REQ_CONNECTION_CREATESESSIONDELEGATE:
             packet = new ConnectionCreateSessionDelegateRequest();
             break;
+         case REQ_CONNECTION_CREATESESSIONDELEGATE2:
+            packet = new ConnectionCreateSessionDelegateRequest2();
+            break;
          case REQ_CONNECTION_GETCLIENTID:
             packet = new ConnectionGetClientIDRequest();
             break;

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/Delivery.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/Delivery.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/Delivery.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -53,4 +53,8 @@
     * Mark if this delivery is with a prepared XA transaction.
     */
    boolean isXAPrepared();
+   
+   boolean isSucked();
+   
+   void setSucked(boolean isSucked);
 }

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/PersistenceManager.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/PersistenceManager.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/contract/PersistenceManager.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -99,6 +99,12 @@
    //if supports transaction creation time
    boolean supportsTxAge();
 
+   //update the status of the message
+   void updateMessageState(long channelID, MessageReference ref, String state) throws Exception;
+
+   //update messages state to 'C' of the channel whose state is 'S', and return their messages ids
+   List<ReferenceInfo> claimMessagesInSuck(long channelID) throws Exception;
+
    // Interface value classes ----------------------------------------------------------------------
 
    class MessageChannelPair

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/JDBCPersistenceManager.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -36,6 +36,7 @@
 import org.jboss.messaging.util.StreamUtils;
 import org.jboss.messaging.util.Util;
 
+import javax.jms.JMSException;
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 import javax.transaction.xa.Xid;
@@ -52,6 +53,7 @@
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:adrian at jboss.org">Adrian Brock</a>
  * @author <a href="mailto:juha at jboss.org">Juha Lindfors</a>
+ * @author <a href="mailto:hgao at jboss.org">Howard Gao</a>
  *
  * @version <tt>1.1</tt>
  *
@@ -1636,6 +1638,12 @@
                {
                   log.trace("Updated " + rows + " rows");
                }
+               
+               if (rows == 0)
+               {
+                  //no message updated, should be canceled back already
+                  throw new JMSException("Failed to move message " + ref.getMessage().getMessageID());
+               }
 
                return null;
             }
@@ -2946,6 +2954,11 @@
       map.put("SELECT_TRANSACTION_START_TIME_EXTRA", "SELECT TRANSACTION_ID, START_TIME FROM JBM_TX_EX");
       map.put("INSERT_TRANSACTION_EXTRA", "INSERT INTO JBM_TX_EX (TRANSACTION_ID, START_TIME) VALUES(?,?)");
       map.put("DELETE_TRANSACTION_EXTRA", "DELETE FROM JBM_TX_EX WHERE TRANSACTION_ID=?");
+      
+      //sucker use
+      map.put("UPDATE_MESSAGE_STATE", "UPDATE JBM_MSG_REF SET STATE = ? WHERE MESSAGE_ID = ? AND CHANNEL_ID = ?");
+      map.put("CLAIM_MESSAGE_IN_SUCK", "UPDATE JBM_MSG_REF SET STATE='C' WHERE CHANNEL_ID = ? AND STATE='S'");
+      map.put("LOAD_REFS_IN_SUCK", "SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'S' AND CHANNEL_ID = ? ORDER BY ORD");
 
       return map;
    }
@@ -3308,4 +3321,96 @@
       return supportsTxAge;
    }
 
+   public void updateMessageState(final long channelID, final MessageReference ref, final String c) throws Exception
+   {
+      class UpdateMessageStateRunner extends JDBCTxRunner2
+      {
+         public Object doTransaction() throws Exception
+         {
+            PreparedStatement psReference = null;
+
+            try
+            {
+               psReference = conn
+                     .prepareStatement(getSQLStatement("UPDATE_MESSAGE_STATE"));
+
+               psReference.setString(1, c);
+
+               psReference.setLong(2, ref.getMessage().getMessageID());
+
+               psReference.setLong(3, channelID);
+
+               int rows = psReference.executeUpdate();
+
+               if (trace)
+               {
+                  log.trace("Updated " + rows + " rows");
+               }
+               
+               if (rows != 1)
+               {
+                  throw new JMSException("Failed to update message " + ref.getMessage().getMessageID() + " to state " + c);
+               }
+
+               return null;
+            }
+            finally
+            {
+               closeStatement(psReference);
+            }
+         }
+      }
+
+      new UpdateMessageStateRunner().executeWithRetry();
+   }
+
+   public List<ReferenceInfo> claimMessagesInSuck(final long channelID) throws Exception
+   {
+      final List<ReferenceInfo> msgIDs = new ArrayList<ReferenceInfo>();
+      
+      class MessageClaimRunner extends JDBCTxRunner2
+      {
+         public Object doTransaction() throws Exception
+         {
+            PreparedStatement ps = null;
+            PreparedStatement ps2 = null;
+            ResultSet rs = null;
+            
+            try
+            {
+               ps = conn.prepareStatement(getSQLStatement("LOAD_REFS_IN_SUCK"));
+               ps.setLong(1, channelID);
+               rs = ps.executeQuery();
+               
+               while (rs.next())
+               {
+                  long msgId = rs.getLong(1);
+                  int deliveryCount = rs.getInt(2);
+                  long sched = rs.getLong(3);
+
+                  msgIDs.add(new ReferenceInfo(msgId, deliveryCount, sched));
+               }
+               
+               ps2 = conn.prepareStatement(getSQLStatement("CLAIM_MESSAGE_IN_SUCK"));
+               ps2.setLong(1, channelID);
+               int rows = ps2.executeUpdate();
+               
+               if (trace)
+               {
+                  log.trace("Message in suck claimed " + rows + " rows");
+               }
+            }
+            finally
+            {
+               closeResultSet(rs);
+               closeStatement(ps);
+               closeStatement(ps2);
+            }
+            return msgIDs;
+         }
+      }
+      new MessageClaimRunner().executeWithRetry();
+      return msgIDs;
+   }
+
 }

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/MessagingQueue.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/MessagingQueue.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/MessagingQueue.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -221,6 +221,8 @@
       synchronized (lock)
       {
          flushDownCache();
+         
+         pm.claimMessagesInSuck(theChannelID);
                   
          PersistenceManager.InitialLoadInfo ili =
             pm.mergeAndLoad(theChannelID, this.channelID, fullSize - messageRefs.size(),
@@ -492,6 +494,11 @@
    	return recoverDeliveriesTimeout;
    }
    
+   public void load() throws Exception
+   {
+      super.load(clustered);
+   }
+   
    //testing only
    
    public Map getRecoveryArea()

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/NullPersistenceManager.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/NullPersistenceManager.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/NullPersistenceManager.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -228,6 +228,15 @@
    {
    }
 
+   public void updateMessageState(long channelID, MessageReference ref, String state) throws Exception
+   {
+   }
+   
+   public List<ReferenceInfo> claimMessagesInSuck(long channelID) throws Exception
+   {
+      return Collections.emptyList();
+   }
+
 }
 
 class IDCounter

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/PagingChannelSupport.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -194,7 +194,7 @@
       }
    }
    
-   public void load() throws Exception
+   public void load(boolean isClustered) throws Exception
    {            
       synchronized (lock)
       {
@@ -207,6 +207,12 @@
          
          unload();
          
+         if (isClustered)
+         {
+            //claim possible sucked messages
+            pm.claimMessagesInSuck(channelID);
+         }
+         
          //Load the unpaged references
          InitialLoadInfo ili = pm.loadFromStart(channelID, fullSize);
          

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/SimpleDelivery.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/SimpleDelivery.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/SimpleDelivery.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -51,6 +51,7 @@
    private MessageReference reference;   
    private boolean recovered;
    private Transaction tx;
+   private boolean isSucked;
 
    private boolean trace = log.isTraceEnabled();
 
@@ -136,6 +137,16 @@
       return false;
    }
 
+   public void setSucked(boolean sucked)
+   {
+      isSucked = sucked;
+   }
+   
+   public boolean isSucked()
+   {
+      return isSucked;
+   }
+
    // Package protected ----------------------------------------------------------------------------
    
    // Protected ------------------------------------------------------------------------------------

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/clusterconnection/MessageSucker.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/clusterconnection/MessageSucker.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/src/main/org/jboss/messaging/core/impl/clusterconnection/MessageSucker.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -27,7 +27,6 @@
 import javax.jms.Message;
 import javax.jms.MessageListener;
 import javax.jms.Session;
-import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 
 import org.jboss.jms.client.JBossSession;
@@ -212,28 +211,13 @@
       
       suspended = true;
 
-      try
-      {
-         consumer.closing(-1);
-      }
-      catch (Throwable t)
-      {
-         // Ignore
-      }
-      try
-      {
-         consumer.close();
-      }
-      catch (Throwable t)
-      {
-         // Ignore
-      }
-
       sourceSession = null;
 
       consumer = null;
 
       clientConsumer = null;
+      
+      if (trace) { log.trace(this + " suspended"); }
    }
    
    
@@ -327,8 +311,6 @@
 		
 	public void onMessage(Message msg)
 	{
-		Transaction tx = null;
-				
 		try
 		{
 	      if (trace) { log.trace(this + " sucked message " + msg + " JMSDestination - " + msg.getJMSDestination()); }
@@ -375,15 +357,6 @@
 		catch (Exception e)
 		{
 			log.error("Failed to forward message", e);
-			
-			try
-			{
-				if (tx != null) tm.rollback();
-			}
-			catch (Throwable t)
-			{
-				if (trace) { log.trace("Failed to rollback tx", t); }
-			}
 		}
 	}
 }

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/ConnectionConsumerTest.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/ConnectionConsumerTest.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/ConnectionConsumerTest.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -30,9 +30,22 @@
 import javax.jms.ServerSessionPool;
 import javax.jms.Session;
 import javax.jms.TextMessage;
+import javax.jms.XAConnection;
+import javax.jms.XASession;
+import javax.naming.InitialContext;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAResource;
 
 import org.jboss.jms.client.JBossConnectionConsumer;
 import org.jboss.test.messaging.tools.ServerManagement;
+import org.jboss.test.messaging.tools.container.InVMInitialContextFactory;
+import org.jboss.test.messaging.tools.container.ServiceContainer;
 
 import EDU.oswego.cs.dl.util.concurrent.Latch;
 
@@ -54,7 +67,9 @@
    // Static --------------------------------------------------------
    
    // Attributes ----------------------------------------------------
-
+   private TransactionManager tm;
+   private Transaction suspended;
+   
    // Constructors --------------------------------------------------
 
    public ConnectionConsumerTest(String name)
@@ -63,7 +78,35 @@
    }
 
    // TestCase overrides -------------------------------------------   
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+   
+      if (!ServerManagement.isRemote())
+      {
+         InitialContext localIc = new InitialContext(InVMInitialContextFactory.getJNDIEnvironment());
+           
+         tm = (TransactionManager)localIc.lookup(ServiceContainer.TRANSACTION_MANAGER_JNDI_NAME);
+      
+         suspended = tm.suspend();
+      
+         log.debug("setup done");
+      }
+   }
 
+   protected void tearDown() throws Exception
+   {
+      super.tearDown();
+      
+      if (!ServerManagement.isRemote())
+      {
+         if (suspended != null)
+         {
+            tm.resume(suspended);
+         }
+      }
+   }
+
    // Public --------------------------------------------------------
 
    public void testSimple() throws Exception
@@ -133,7 +176,53 @@
       }
    }
 
-
+   //https://jira.jboss.org/browse/JBMESSAGING-1831
+   public void testWaitForDeliveryFinish() throws Exception
+   {
+      if (ServerManagement.isRemote()) return;
+      
+      XAConnection connConsumer = null;
+      
+      Connection connProducer = null;
+      
+      try
+      {
+         connConsumer = cf.createXAConnection();
+         
+         connConsumer.start();
+                  
+         XASession sessCons = connConsumer.createXASession();
+         
+         TxMessageListener listener = new TxMessageListener();
+         
+         sessCons.setMessageListener(listener);
+         
+         MockServerSessionPool2 pool = new MockServerSessionPool2(sessCons, tm);
+         
+         JBossConnectionConsumer cc = (JBossConnectionConsumer)connConsumer.createConnectionConsumer(queue1, null, pool, 1);         
+         
+         connProducer = cf.createConnection();
+            
+         Session sessProd = connProducer.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         MessageProducer prod = sessProd.createProducer(queue1);
+            
+         TextMessage m1 = sessProd.createTextMessage("a");
+         prod.send(m1);
+            
+         cc.close();
+         pool.shutdown();
+         
+         connProducer.close();
+         connProducer = null;
+         connConsumer.close();
+         connConsumer = null;            
+      }
+      finally 
+      {
+         if (connConsumer != null) connConsumer.close();
+         if (connConsumer != null) connProducer.close();
+      }
+   }
    
    public void testRedeliveryTransacted() throws Exception
    {
@@ -349,6 +438,20 @@
       }
    }
 
+   class TxMessageListener implements MessageListener
+   {
+      
+      public TxMessageListener()
+      {
+      }
+      
+      //need client ack
+      public void onMessage(Message msg)
+      {
+         log.info("Message got: " + msg);
+            
+      }
+   }
 
    class SimpleMessageListener implements MessageListener
    {
@@ -590,3 +693,95 @@
       return serverSession;
    }      
 }
+
+class MockServerSessionPool2 implements ServerSessionPool
+{
+   private MockServerSession2 serverSession;
+   
+   MockServerSessionPool2(XASession sess, TransactionManager tm)
+   {
+      serverSession = new MockServerSession2(sess, tm);
+   }
+
+   public void shutdown()
+   {
+      try
+      {
+         serverSession.join();
+      }
+      catch (InterruptedException e)
+      {
+      }
+   }
+
+   public ServerSession getServerSession() throws JMSException
+   {
+      return serverSession;
+   }      
+}
+
+class MockServerSession2 extends Thread implements ServerSession
+{
+   XASession session;
+   TransactionManager tm;
+   
+   MockServerSession2(XASession sess, TransactionManager tm)
+   {
+      this.session = sess;
+      this.tm = tm;
+   }
+   
+   public Session getSession() throws JMSException
+   {
+      return session;
+   }
+
+   public void run()
+   {
+      try
+      {
+         tm.begin();
+         
+         Transaction tx = tm.getTransaction();
+
+         XAResource res = session.getXAResource();
+         tx.enlistResource(res);
+         
+         session.run();
+         
+         try
+         {
+            Thread.sleep(5000);
+         }
+         catch (InterruptedException e)
+         {
+         }
+
+         tx.delistResource(res, XAResource.TMSUCCESS);
+
+         tm.commit();
+      }
+      catch (NotSupportedException e)
+      {
+      }
+      catch (SystemException e)
+      {
+      }
+      catch (IllegalStateException e)
+      {
+      }
+      catch (RollbackException e)
+      {
+      }
+      catch (SecurityException e)
+      {
+      }
+      catch (HeuristicMixedException e)
+      {
+      }
+      catch (HeuristicRollbackException e)
+      {
+      }
+   }
+   
+}

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -57,6 +57,7 @@
 import org.jboss.jms.wireformat.ClosingRequest;
 import org.jboss.jms.wireformat.ClosingResponse;
 import org.jboss.jms.wireformat.ConnectionCreateSessionDelegateRequest;
+import org.jboss.jms.wireformat.ConnectionCreateSessionDelegateRequest2;
 import org.jboss.jms.wireformat.ConnectionCreateSessionDelegateResponse;
 import org.jboss.jms.wireformat.ConnectionFactoryAddCallbackRequest;
 import org.jboss.jms.wireformat.ConnectionFactoryCreateConnectionDelegateRequest;
@@ -166,6 +167,11 @@
       wf.testConnectionCreateSessionDelegateRequest();
    }
    
+   public void testConnectionCreateSessionDelegateRequest2() throws Exception
+   {                     
+      wf.testConnectionCreateSessionDelegateRequest2();
+   }
+   
    public void testConnectionGetClientIDRequest() throws Exception
    {                 
       wf.testConnectionGetClientIDRequest();
@@ -503,11 +509,19 @@
       public void testConnectionCreateSessionDelegateRequest() throws Exception
       {
          RequestSupport req =
-            new ConnectionCreateSessionDelegateRequest("23", (byte)77, true, 23, true);;
+            new ConnectionCreateSessionDelegateRequest("23", (byte)77, true, 23, true);
                  
          testPacket(req, PacketSupport.REQ_CONNECTION_CREATESESSIONDELEGATE);                           
       }
       
+      public void testConnectionCreateSessionDelegateRequest2() throws Exception
+      {
+         RequestSupport req =
+            new ConnectionCreateSessionDelegateRequest2("23", (byte)77, true, 23, true, false);
+                 
+         testPacket(req, PacketSupport.REQ_CONNECTION_CREATESESSIONDELEGATE2);                           
+      }
+      
       public void testConnectionGetClientIDRequest() throws Exception
       {
          RequestSupport req =

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -22,17 +22,23 @@
 package org.jboss.test.messaging.jms.clustering;
 
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.jms.Connection;
 import javax.jms.DeliveryMode;
+import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
 import javax.jms.MessageProducer;
 import javax.jms.Queue;
 import javax.jms.Session;
 import javax.jms.TextMessage;
+import javax.naming.InitialContext;
 
+import org.jboss.jms.client.JBossConnectionFactory;
 import org.jboss.test.messaging.tools.ServerManagement;
 
 /**
@@ -382,6 +388,133 @@
       }
    }
 
+   //https://jira.jboss.org/browse/JBMESSAGING-1822
+   //send 1000 messages to node 0, receive on node 1 as such
+   // 1. when receiving, kill node1
+   // 2. restart node1 and continue receive
+   // 3. repeat step 1 and 2 for 5 times
+   // check all messages are received.
+   public void testSuckFailureHandling() throws Exception
+   {
+      Connection conn0 = null;
+      Connection conn1 = null;
+      
+      Map<String, TextMessage> msgs = new ConcurrentHashMap<String, TextMessage>();
+      JBossConnectionFactory cf0;
+
+      try
+      {
+         //we need to kill node 2, only leave two nodes.
+         //otherwise messages may be merged to node2 and never sucked again.
+         ServerManagement.kill(2);
+
+         cf0 = (JBossConnectionFactory)ic[0].lookup("/ConnectionFactory");
+
+         conn0 = cf0.createConnection();
+
+         Session sess0 = conn0.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         MessageProducer prod0 = sess0.createProducer(queue[0]);
+
+         final int NUM_MESSAGES = 1000;
+
+         for (int i = 0; i < NUM_MESSAGES; i++)
+         {
+            TextMessage tm = sess0.createTextMessage("suckmsg-" + i);
+            prod0.send(tm);
+         }
+         
+         startReceive(msgs);
+         startReceive(msgs);
+         startReceive(msgs);
+         startReceive(msgs);
+         startReceive(msgs);
+         
+         JBossConnectionFactory cf1 = (JBossConnectionFactory)ic[1].lookup("/ConnectionFactory");
+         conn1 = cf1.createConnection();
+         Session sess1 = conn1.createSession(false, Session.CLIENT_ACKNOWLEDGE);
+         MessageConsumer cons1 = sess1.createConsumer(queue[1]);
+         conn1.start();
+         
+         TextMessage rm = (TextMessage)cons1.receive(5000);
+         
+         log.info("message num sucked: " + msgs.size());
+         while (rm != null)
+         {
+            rm.acknowledge();
+            log.info("message sucked: " + rm + " text=" + rm.getText());
+            msgs.put(rm.getText(), rm);
+            rm = (TextMessage)cons1.receive(5000);
+         }
+         
+         log.info("all received: " + msgs.size());
+         for (int i = 0; i < NUM_MESSAGES; i++)
+         {
+            if (msgs.get("suckmsg-" + i) == null)
+            {
+               log.error("==== missing: " + "suckmsg-" + i);
+            }
+         }
+
+         assertEquals(NUM_MESSAGES, msgs.size());
+      }
+      finally
+      {
+         if (conn0 != null)
+         {
+            conn0.close();
+         }
+         if (conn1 != null)
+         {
+            conn1.close();
+         }
+      }
+   }
+
+   private void startReceive(final Map<String, TextMessage> msgs) throws Exception
+   {
+      JBossConnectionFactory cf1 = (JBossConnectionFactory)ic[1].lookup("/ConnectionFactory");
+      Connection conn1 = cf1.createConnection();
+      Session sess1 = conn1.createSession(false, Session.CLIENT_ACKNOWLEDGE);
+      MessageConsumer cons1 = sess1.createConsumer(queue[1]);
+      cons1.setMessageListener(new MessageListener() {
+         public void onMessage(Message m)
+         {
+            try
+            {
+               log.error("receiving " + m);
+               TextMessage tm = (TextMessage)m;
+               log.info("message sucked: " + tm + " text: " + tm);
+               msgs.put(tm.getText(), tm);
+               m.acknowledge();
+            }
+            catch (JMSException e)
+            {
+               log.error("failed to ack " + m, e);
+            }
+         }
+      });
+      conn1.start();
+
+      try
+      {
+         Thread.sleep(800);
+      }
+      catch (InterruptedException e)
+      {
+         //ignore
+      }
+      
+      //kill server 1
+      ServerManagement.kill(1);
+
+      ServerManagement.start(1, "all+http", false);
+      ServerManagement.deployQueue("testDistributedQueue", 1);
+      ic[1] = new InitialContext(ServerManagement.getJNDIEnvironment(1));
+      queue[1] = (Queue)ic[1].lookup("queue/testDistributedQueue");
+      
+      conn1.close();
+   }
+
    // Package private ---------------------------------------------
    
    // protected ----------------------------------------------------

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/server/connectionmanager/SimpleConnectionManagerTest.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/server/connectionmanager/SimpleConnectionManagerTest.java	2010-12-06 05:04:40 UTC (rev 8146)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP10_JBMESSAGING-1831_JBMESSAGING-1822_JBMESSAGING-1805_JBMESSAGING-1809_JBMESSAGING-1828/tests/src/org/jboss/test/messaging/jms/server/connectionmanager/SimpleConnectionManagerTest.java	2010-12-06 06:28:29 UTC (rev 8147)
@@ -329,6 +329,11 @@
          return closed;
       }
 
+      public SessionDelegate createSessionDelegate(boolean transacted, int acknowledgmentMode, boolean isXA, boolean isCC) throws JMSException
+      {
+         return null;
+      }
+
       public SessionDelegate createSessionDelegate(boolean transacted, int acknowledgmentMode, boolean isXA) throws JMSException
       {
          return null;
@@ -376,6 +381,7 @@
       {
          return null;
       }
+
    }
 }
 



More information about the jboss-cvs-commits mailing list