[jboss-cvs] JBoss Messaging SVN: r2202 - in trunk: src/main/org/jboss/jms/client/container and 38 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Feb 8 05:50:27 EST 2007


Author: timfox
Date: 2007-02-08 05:50:26 -0500 (Thu, 08 Feb 2007)
New Revision: 2202

Added:
   trunk/src/main/org/jboss/messaging/core/message/Message.java
   trunk/src/main/org/jboss/messaging/core/message/MessageHolder.java
   trunk/src/main/org/jboss/messaging/core/message/MessageReference.java
   trunk/src/main/org/jboss/messaging/core/message/SimpleMessageReference.java
   trunk/src/main/org/jboss/messaging/core/message/SimpleMessageStore.java
Removed:
   trunk/src/main/org/jboss/messaging/core/Message.java
   trunk/src/main/org/jboss/messaging/core/MessageReference.java
   trunk/src/main/org/jboss/messaging/core/Routable.java
   trunk/src/main/org/jboss/messaging/core/message/RoutableSupport.java
   trunk/src/main/org/jboss/messaging/core/plugin/MessageHolder.java
   trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageReference.java
   trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageStore.java
   trunk/tests/src/org/jboss/test/messaging/core/message/SimpleMessageReferenceTest.java
   trunk/tests/src/org/jboss/test/messaging/core/message/base/MessageSupportTestBase.java
Modified:
   trunk/src/etc/server/default/deploy/clustered-mysql-persistence-service.xml
   trunk/src/etc/server/default/deploy/mysql-persistence-service.xml
   trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java
   trunk/src/main/org/jboss/jms/client/remoting/CallbackManager.java
   trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java
   trunk/src/main/org/jboss/jms/destination/JBossDestination.java
   trunk/src/main/org/jboss/jms/destination/JBossQueue.java
   trunk/src/main/org/jboss/jms/message/JBossBytesMessage.java
   trunk/src/main/org/jboss/jms/message/JBossMapMessage.java
   trunk/src/main/org/jboss/jms/message/JBossMessage.java
   trunk/src/main/org/jboss/jms/message/JBossObjectMessage.java
   trunk/src/main/org/jboss/jms/message/JBossStreamMessage.java
   trunk/src/main/org/jboss/jms/message/JBossTextMessage.java
   trunk/src/main/org/jboss/jms/message/MessageProxy.java
   trunk/src/main/org/jboss/jms/selector/Selector.java
   trunk/src/main/org/jboss/jms/server/JMSCondition.java
   trunk/src/main/org/jboss/jms/server/ServerPeer.java
   trunk/src/main/org/jboss/jms/server/destination/ManagedQueue.java
   trunk/src/main/org/jboss/jms/server/destination/ManagedTopic.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
   trunk/src/main/org/jboss/jms/server/plugin/JDBCJMSUserManager.java
   trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java
   trunk/src/main/org/jboss/jms/tx/ClientTransaction.java
   trunk/src/main/org/jboss/jms/tx/TransactionRequest.java
   trunk/src/main/org/jboss/jms/wireformat/CallbackSupport.java
   trunk/src/main/org/jboss/jms/wireformat/ClientDelivery.java
   trunk/src/main/org/jboss/jms/wireformat/ConnectionFactoryUpdate.java
   trunk/src/main/org/jboss/jms/wireformat/ConnectionSendTransactionRequest.java
   trunk/src/main/org/jboss/jms/wireformat/PolledCallbacksDelivery.java
   trunk/src/main/org/jboss/jms/wireformat/SessionSendRequest.java
   trunk/src/main/org/jboss/messaging/core/ChannelSupport.java
   trunk/src/main/org/jboss/messaging/core/Delivery.java
   trunk/src/main/org/jboss/messaging/core/Filter.java
   trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java
   trunk/src/main/org/jboss/messaging/core/Receiver.java
   trunk/src/main/org/jboss/messaging/core/SimpleDelivery.java
   trunk/src/main/org/jboss/messaging/core/local/FirstReceiverPointToPointRouter.java
   trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java
   trunk/src/main/org/jboss/messaging/core/local/RoundRobinPointToPointRouter.java
   trunk/src/main/org/jboss/messaging/core/message/CoreMessage.java
   trunk/src/main/org/jboss/messaging/core/message/MessageFactory.java
   trunk/src/main/org/jboss/messaging/core/message/MessageSupport.java
   trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java
   trunk/src/main/org/jboss/messaging/core/plugin/contract/Condition.java
   trunk/src/main/org/jboss/messaging/core/plugin/contract/MessageStore.java
   trunk/src/main/org/jboss/messaging/core/plugin/contract/PersistenceManager.java
   trunk/src/main/org/jboss/messaging/core/plugin/contract/PostOffice.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/CastMessagesCallback.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultRouter.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageHolder.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageRequest.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessageResultRequest.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessagesRequest.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java
   trunk/src/main/org/jboss/messaging/core/tx/TransactionRepository.java
   trunk/src/main/org/jboss/messaging/util/StreamUtils.java
   trunk/tests/build.xml
   trunk/tests/etc/log4j.xml
   trunk/tests/src/org/jboss/test/messaging/MessagingTestCase.java
   trunk/tests/src/org/jboss/test/messaging/core/BrokenReceiver.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleCondition.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleFilter.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java
   trunk/tests/src/org/jboss/test/messaging/core/local/RoundRobinPointToPointRouterTest.java
   trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/message/CoreMessageTest.java
   trunk/tests/src/org/jboss/test/messaging/core/message/JBossMessageTest.java
   trunk/tests/src/org/jboss/test/messaging/core/message/base/RoutableSupportTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/JDBCPersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/SimpleMessageStoreTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/base/MessageStoreTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/DLQTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/ExpiryQueueTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/MessageCleanupTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/MessageConsumerTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/MessageProxyTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/ReferencingTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/message/MessageTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/persistence/BytesMessagePersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/persistence/MapMessagePersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/persistence/MessagePersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/persistence/ObjectMessagePersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/persistence/StreamMessagePersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/persistence/TextMessagePersistenceManagerTest.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
Log:
Mainly http://jira.jboss.org/jira/browse/JBMESSAGING-739



Modified: trunk/src/etc/server/default/deploy/clustered-mysql-persistence-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/clustered-mysql-persistence-service.xml	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/etc/server/default/deploy/clustered-mysql-persistence-service.xml	2007-02-08 10:50:26 UTC (rev 2202)
@@ -17,47 +17,46 @@
       <attribute name="CreateTablesOnStartup">true</attribute>
       <attribute name="UsingBatchUpdates">true</attribute>
       <attribute name="SqlProperties"><![CDATA[
-CREATE_MESSAGE_REFERENCE=CREATE TABLE JMS_MESSAGE_REFERENCE (CHANNELID BIGINT, MESSAGEID BIGINT, TRANSACTIONID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, DELIVERYCOUNT INTEGER, RELIABLE CHAR(1), LOADED CHAR(1), SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNELID, MESSAGEID))
-CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JMS_MESSAGE_REF_TX ON JMS_MESSAGE_REFERENCE (TRANSACTIONID)
-CREATE_IDX_MESSAGE_REF_ORD=CREATE INDEX JMS_MESSAGE_REF_ORD ON JMS_MESSAGE_REFERENCE (ORD)
-CREATE_IDX_MESSAGE_REF_PAGE_ORD=CREATE INDEX JMS_MESSAGE_REF_LOADED ON JMS_MESSAGE_REFERENCE (PAGE_ORD)
-CREATE_IDX_MESSAGE_REF_MESSAGEID=CREATE INDEX JMS_MESSAGE_REF_MESSAGEID ON JMS_MESSAGE_REFERENCE (MESSAGEID)
-CREATE_IDX_MESSAGE_REF_RELIABLE=CREATE INDEX JMS_MESSAGE_REF_RELIABLE ON JMS_MESSAGE_REFERENCE (RELIABLE)
-CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY=CREATE INDEX JMS_MESSAGE_REF_SCHED_DELIVERY ON JMS_MESSAGE_REFERENCE (SCHED_DELIVERY)
-CREATE_MESSAGE=CREATE TABLE JMS_MESSAGE (MESSAGEID BIGINT, RELIABLE CHAR(1), EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY TINYINT, COREHEADERS MEDIUMBLOB, PAYLOAD LONGBLOB, CHANNELCOUNT INTEGER, TYPE TINYINT, JMSTYPE VARCHAR(255), CORRELATIONID VARCHAR(255), CORRELATIONID_BYTES VARBINARY(254), DESTINATION VARCHAR(255), REPLYTO VARCHAR(255), JMSPROPERTIES MEDIUMBLOB, PRIMARY KEY (MESSAGEID))
-CREATE_TRANSACTION=CREATE TABLE JMS_TRANSACTION (TRANSACTIONID BIGINT, BRANCH_QUAL VARBINARY(254), FORMAT_ID INTEGER, GLOBAL_TXID VARBINARY(254), PRIMARY KEY (TRANSACTIONID))
-CREATE_COUNTER=CREATE TABLE JMS_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))
-INSERT_MESSAGE_REF=INSERT INTO JMS_MESSAGE_REFERENCE (CHANNELID, MESSAGEID, TRANSACTIONID, STATE, ORD, PAGE_ORD, DELIVERYCOUNT, RELIABLE, SCHED_DELIVERY) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
-DELETE_MESSAGE_REF=DELETE FROM JMS_MESSAGE_REFERENCE WHERE MESSAGEID=? AND CHANNELID=? AND STATE='C'
-UPDATE_MESSAGE_REF=UPDATE JMS_MESSAGE_REFERENCE SET TRANSACTIONID=?, STATE='-' WHERE MESSAGEID=? AND CHANNELID=? AND STATE='C'
-UPDATE_PAGE_ORDER=UPDATE JMS_MESSAGE_REFERENCE SET PAGE_ORD = ? WHERE MESSAGEID=? AND CHANNELID=?
-COMMIT_MESSAGE_REF1=UPDATE JMS_MESSAGE_REFERENCE SET STATE='C', TRANSACTIONID = NULL WHERE TRANSACTIONID=? AND STATE='+'
-COMMIT_MESSAGE_REF2=DELETE FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID=? AND STATE='-'
-ROLLBACK_MESSAGE_REF1=DELETE FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID=? AND STATE='+'
-ROLLBACK_MESSAGE_REF2=UPDATE JMS_MESSAGE_REFERENCE SET STATE='C', TRANSACTIONID = NULL WHERE TRANSACTIONID=? AND STATE='-'
-LOAD_PAGED_REFS=SELECT MESSAGEID, DELIVERYCOUNT, PAGE_ORD, RELIABLE, SCHED_DELIVERY FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-LOAD_UNPAGED_REFS=SELECT MESSAGEID, DELIVERYCOUNT, RELIABLE, SCHED_DELIVERY FROM JMS_MESSAGE_REFERENCE WHERE STATE = 'C' AND CHANNELID = ? AND PAGE_ORD IS NULL ORDER BY ORD
-UPDATE_RELIABLE_REFS_NOT_PAGED=UPDATE JMS_MESSAGE_REFERENCE SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNELID=?
-SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ?
-SELECT_EXISTS_REF=SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ? AND MESSAGEID = ?
-SELECT_EXISTS_REF_MESSAGEID=SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE MESSAGEID = ?
-UPDATE_DELIVERYCOUNT=UPDATE JMS_MESSAGE_REFERENCE SET DELIVERYCOUNT = ? WHERE CHANNELID = ? AND MESSAGEID = ?
-LOAD_MESSAGES=SELECT MESSAGEID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, COREHEADERS, PAYLOAD, TYPE, JMSTYPE, CORRELATIONID, CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES FROM JMS_MESSAGE
-INSERT_MESSAGE=INSERT INTO JMS_MESSAGE (MESSAGEID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, COREHEADERS, PAYLOAD, CHANNELCOUNT, TYPE, JMSTYPE, CORRELATIONID, CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
-INC_CHANNELCOUNT=UPDATE JMS_MESSAGE SET CHANNELCOUNT = CHANNELCOUNT + 1 WHERE MESSAGEID=?
-DEC_CHANNELCOUNT=UPDATE JMS_MESSAGE SET CHANNELCOUNT = CHANNELCOUNT - 1 WHERE MESSAGEID=?
-DELETE_MESSAGE=DELETE FROM JMS_MESSAGE WHERE MESSAGEID=? AND CHANNELCOUNT=0
-MESSAGEID_COLUMN=MESSAGEID
-MESSAGE_EXISTS=SELECT MESSAGEID FROM JMS_MESSAGE WHERE MESSAGEID = ? FOR UPDATE
-INSERT_TRANSACTION=INSERT INTO JMS_TRANSACTION (TRANSACTIONID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) VALUES(?, ?, ?, ?)
-DELETE_TRANSACTION=DELETE FROM JMS_TRANSACTION WHERE TRANSACTIONID = ?
-SELECT_PREPARED_TRANSACTIONS=SELECT TRANSACTIONID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JMS_TRANSACTION
-SELECT_MESSAGEID_FOR_REF=SELECT MESSAGEID, CHANNELID FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID = ? AND STATE = '+' ORDER BY ORD
-SELECT_MESSAGEID_FOR_ACK=SELECT MESSAGEID, CHANNELID FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID = ? AND STATE = '-' ORDER BY ORD      
-UPDATE_COUNTER=UPDATE JMS_COUNTER SET NEXT_ID = ? WHERE NAME=?
-SELECT_COUNTER=SELECT NEXT_ID FROM JMS_COUNTER WHERE NAME=? FOR UPDATE
-INSERT_COUNTER=INSERT INTO JMS_COUNTER (NAME, NEXT_ID) VALUES (?, ?)
-SELECT_ALL_CHANNELS=SELECT DISTINCT(CHANNELID) FROM JMS_MESSAGE_REFERENCE
+   CREATE_MESSAGE_REFERENCE=CREATE TABLE JBM_MSG_REF (CHANNEL_ID BIGINT, MESSAGE_ID BIGINT, TRANSACTION_ID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, DELIVERY_COUNT INTEGER, LOADED CHAR(1), SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))
+   CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)
+   CREATE_IDX_MESSAGE_REF_ORD=CREATE INDEX JBM_MSG_REF_ORD ON JBM_MSG_REF (ORD)
+   CREATE_IDX_MESSAGE_REF_PAGE_ORD=CREATE INDEX JBM_MSG_REF_LOADED ON JBM_MSG_REF (PAGE_ORD)
+   CREATE_IDX_MESSAGE_REF_MESSAGE_ID=CREATE INDEX JBM_MSG_REF_MESSAGE_ID ON JBM_MSG_REF (MESSAGE_ID)
+   CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY=CREATE INDEX JBM_MSG_REF_SCHED_DELIVERY ON JBM_MSG_REF (SCHED_DELIVERY)
+   CREATE_MESSAGE=CREATE TABLE JBM_MSG (MESSAGE_ID BIGINT, RELIABLE CHAR(1), EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY TINYINT, HEADERS MEDIUMBLOB, PAYLOAD LONGBLOB, CHANNEL_COUNT INTEGER, TYPE TINYINT, PRIMARY KEY (MESSAGE_ID))
+   CREATE_TRANSACTION=CREATE TABLE JBM_TX (TRANSACTION_ID BIGINT, BRANCH_QUAL VARBINARY(254), FORMAT_ID INTEGER, GLOBAL_TXID VARBINARY(254), PRIMARY KEY (TRANSACTION_ID))
+   CREATE_COUNTER=CREATE TABLE JBM_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))
+   INSERT_MESSAGE_REF=INSERT INTO JBM_MSG_REF (CHANNEL_ID, MESSAGE_ID, TRANSACTION_ID, STATE, ORD, PAGE_ORD, DELIVERY_COUNT, SCHED_DELIVERY) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+   DELETE_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_MESSAGE_REF=UPDATE JBM_MSG_REF SET TRANSACTION_ID=?, STATE='-' WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_PAGE_ORDER=UPDATE JBM_MSG_REF SET PAGE_ORD = ? WHERE MESSAGE_ID=? AND CHANNEL_ID=?
+   COMMIT_MESSAGE_REF1=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='+'
+   COMMIT_MESSAGE_REF2=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='-'
+   ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
+   ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
+   LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
+   SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
+   SELECT_EXISTS_REF=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   SELECT_EXISTS_REF_MESSAGE_ID=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE MESSAGE_ID = ?
+   UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   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, HEADERS, PAYLOAD, CHANNEL_COUNT, TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
+   INC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT + 1 WHERE MESSAGE_ID=?
+   DEC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT - 1 WHERE MESSAGE_ID=?
+   DELETE_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID=? AND CHANNEL_COUNT=0
+   MESSAGE_ID_COLUMN=MESSAGE_ID
+   MESSAGE_EXISTS=SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ? FOR UPDATE
+   INSERT_TRANSACTION=INSERT INTO JBM_TX (TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) VALUES(?, ?, ?, ?)
+   DELETE_TRANSACTION=DELETE FROM JBM_TX WHERE TRANSACTION_ID = ?
+   SELECT_PREPARED_TRANSACTIONS=SELECT TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JBM_TX   
+   SELECT_MESSAGE_ID_FOR_REF=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '+' ORDER BY ORD
+   SELECT_MESSAGE_ID_FOR_ACK=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '-' ORDER BY ORD 
+   UPDATE_COUNTER=UPDATE JBM_COUNTER SET NEXT_ID = ? WHERE NAME=?
+   SELECT_COUNTER=SELECT NEXT_ID FROM JBM_COUNTER WHERE NAME=? FOR UPDATE
+   INSERT_COUNTER=INSERT INTO JBM_COUNTER (NAME, NEXT_ID) VALUES (?, ?)
+   SELECT_ALL_CHANNELS=SELECT DISTINCT(CHANNEL_ID) FROM JBM_MSG_REF
       ]]></attribute>
       <attribute name="MaxParams">500</attribute>
    </mbean>
@@ -72,10 +71,10 @@
       <attribute name="DataSource">java:/DefaultDS</attribute>
       <attribute name="CreateTablesOnStartup">true</attribute>
       <attribute name="SqlProperties"><![CDATA[
-CREATE_POSTOFFICE_TABLE=CREATE TABLE JMS_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER, QUEUE_NAME VARCHAR(1023), COND VARCHAR(1023), SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER VARCHAR(1), FAILED_NODE_ID INTEGER)
-INSERT_BINDING=INSERT INTO JMS_POSTOFFICE (POSTOFFICE_NAME, NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
-DELETE_BINDING=DELETE FROM JMS_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?
-LOAD_BINDINGS=SELECT NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID FROM JMS_POSTOFFICE WHERE POSTOFFICE_NAME  = ?
+CREATE_POSTOFFICE_TABLE=CREATE TABLE JBM_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER, QUEUE_NAME VARCHAR(1023), COND VARCHAR(1023), SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER CHAR(1), FAILED_NODE_ID INTEGER)
+INSERT_BINDING=INSERT INTO JBM_POSTOFFICE (POSTOFFICE_NAME, NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+DELETE_BINDING=DELETE FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?
+LOAD_BINDINGS=SELECT NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME  = ?
       ]]></attribute>
       <attribute name="GroupName">DefaultPostOffice</attribute>
       <attribute name="StateTimeout">5000</attribute>
@@ -142,9 +141,9 @@
       <attribute name="DataSource">java:/DefaultDS</attribute>
       <attribute name="CreateTablesOnStartup">true</attribute>
       <attribute name="SqlProperties"><![CDATA[
-CREATE_USER_TABLE=CREATE TABLE JMS_USER (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128), PRIMARY KEY(USERID))
-CREATE_ROLE_TABLE=CREATE TABLE JMS_ROLE (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL, PRIMARY KEY(USERID, ROLEID))
-SELECT_PRECONF_CLIENTID=SELECT CLIENTID FROM JMS_USER WHERE USERID=?
+CREATE_USER_TABLE=CREATE TABLE JBM_USER (USER_ID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128), PRIMARY KEY(USER_ID))
+CREATE_ROLE_TABLE=CREATE TABLE JBM_ROLE (ROLE_ID VARCHAR(32) NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(USER_ID, ROLE_ID))
+SELECT_PRECONF_CLIENTID=SELECT CLIENTID FROM JBM_USER WHERE USER_ID=?
       ]]></attribute>
    </mbean>
 

Modified: trunk/src/etc/server/default/deploy/mysql-persistence-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/mysql-persistence-service.xml	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/etc/server/default/deploy/mysql-persistence-service.xml	2007-02-08 10:50:26 UTC (rev 2202)
@@ -17,47 +17,46 @@
          <attribute name="CreateTablesOnStartup">true</attribute>
          <attribute name="UsingBatchUpdates">true</attribute>
          <attribute name="SqlProperties"><![CDATA[
-   CREATE_MESSAGE_REFERENCE=CREATE TABLE JMS_MESSAGE_REFERENCE (CHANNELID BIGINT, MESSAGEID BIGINT, TRANSACTIONID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, DELIVERYCOUNT INTEGER, RELIABLE CHAR(1), LOADED CHAR(1), SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNELID, MESSAGEID))
-   CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JMS_MESSAGE_REF_TX ON JMS_MESSAGE_REFERENCE (TRANSACTIONID)
-   CREATE_IDX_MESSAGE_REF_ORD=CREATE INDEX JMS_MESSAGE_REF_ORD ON JMS_MESSAGE_REFERENCE (ORD)
-   CREATE_IDX_MESSAGE_REF_PAGE_ORD=CREATE INDEX JMS_MESSAGE_REF_LOADED ON JMS_MESSAGE_REFERENCE (PAGE_ORD)
-   CREATE_IDX_MESSAGE_REF_MESSAGEID=CREATE INDEX JMS_MESSAGE_REF_MESSAGEID ON JMS_MESSAGE_REFERENCE (MESSAGEID)
-   CREATE_IDX_MESSAGE_REF_RELIABLE=CREATE INDEX JMS_MESSAGE_REF_RELIABLE ON JMS_MESSAGE_REFERENCE (RELIABLE)
-   CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY=CREATE INDEX JMS_MESSAGE_REF_SCHED_DELIVERY ON JMS_MESSAGE_REFERENCE (SCHED_DELIVERY)
-   CREATE_MESSAGE=CREATE TABLE JMS_MESSAGE (MESSAGEID BIGINT, RELIABLE CHAR(1), EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY TINYINT, COREHEADERS MEDIUMBLOB, PAYLOAD LONGBLOB, CHANNELCOUNT INTEGER, TYPE TINYINT, JMSTYPE VARCHAR(255), CORRELATIONID VARCHAR(255), CORRELATIONID_BYTES VARBINARY(254), DESTINATION VARCHAR(255), REPLYTO VARCHAR(255), JMSPROPERTIES MEDIUMBLOB, PRIMARY KEY (MESSAGEID))
-   CREATE_TRANSACTION=CREATE TABLE JMS_TRANSACTION (TRANSACTIONID BIGINT, BRANCH_QUAL VARBINARY(254), FORMAT_ID INTEGER, GLOBAL_TXID VARBINARY(254), PRIMARY KEY (TRANSACTIONID))
-   CREATE_COUNTER=CREATE TABLE JMS_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))
-   INSERT_MESSAGE_REF=INSERT INTO JMS_MESSAGE_REFERENCE (CHANNELID, MESSAGEID, TRANSACTIONID, STATE, ORD, PAGE_ORD, DELIVERYCOUNT, RELIABLE, SCHED_DELIVERY) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
-   DELETE_MESSAGE_REF=DELETE FROM JMS_MESSAGE_REFERENCE WHERE MESSAGEID=? AND CHANNELID=? AND STATE='C'
-   UPDATE_MESSAGE_REF=UPDATE JMS_MESSAGE_REFERENCE SET TRANSACTIONID=?, STATE='-' WHERE MESSAGEID=? AND CHANNELID=? AND STATE='C'
-   UPDATE_PAGE_ORDER=UPDATE JMS_MESSAGE_REFERENCE SET PAGE_ORD = ? WHERE MESSAGEID=? AND CHANNELID=?
-   COMMIT_MESSAGE_REF1=UPDATE JMS_MESSAGE_REFERENCE SET STATE='C', TRANSACTIONID = NULL WHERE TRANSACTIONID=? AND STATE='+'
-   COMMIT_MESSAGE_REF2=DELETE FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID=? AND STATE='-'
-   ROLLBACK_MESSAGE_REF1=DELETE FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID=? AND STATE='+'
-   ROLLBACK_MESSAGE_REF2=UPDATE JMS_MESSAGE_REFERENCE SET STATE='C', TRANSACTIONID = NULL WHERE TRANSACTIONID=? AND STATE='-'
-   LOAD_PAGED_REFS=SELECT MESSAGEID, DELIVERYCOUNT, PAGE_ORD, RELIABLE, SCHED_DELIVERY FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
-   LOAD_UNPAGED_REFS=SELECT MESSAGEID, DELIVERYCOUNT, RELIABLE, SCHED_DELIVERY FROM JMS_MESSAGE_REFERENCE WHERE STATE = 'C' AND CHANNELID = ? AND PAGE_ORD IS NULL ORDER BY ORD
-   UPDATE_RELIABLE_REFS_NOT_PAGED=UPDATE JMS_MESSAGE_REFERENCE SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNELID=?
-   SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ?
-   SELECT_EXISTS_REF=SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ? AND MESSAGEID = ?
-   SELECT_EXISTS_REF_MESSAGEID=SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE MESSAGEID = ?
-   UPDATE_DELIVERYCOUNT=UPDATE JMS_MESSAGE_REFERENCE SET DELIVERYCOUNT = ? WHERE CHANNELID = ? AND MESSAGEID = ?
-   LOAD_MESSAGES=SELECT MESSAGEID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, COREHEADERS, PAYLOAD, TYPE, JMSTYPE, CORRELATIONID, CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES FROM JMS_MESSAGE
-   INSERT_MESSAGE=INSERT INTO JMS_MESSAGE (MESSAGEID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, COREHEADERS, PAYLOAD, CHANNELCOUNT, TYPE, JMSTYPE, CORRELATIONID, CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
-   INC_CHANNELCOUNT=UPDATE JMS_MESSAGE SET CHANNELCOUNT = CHANNELCOUNT + 1 WHERE MESSAGEID=?
-   DEC_CHANNELCOUNT=UPDATE JMS_MESSAGE SET CHANNELCOUNT = CHANNELCOUNT - 1 WHERE MESSAGEID=?
-   DELETE_MESSAGE=DELETE FROM JMS_MESSAGE WHERE MESSAGEID=? AND CHANNELCOUNT=0
-   MESSAGEID_COLUMN=MESSAGEID
-   MESSAGE_EXISTS=SELECT MESSAGEID FROM JMS_MESSAGE WHERE MESSAGEID = ? FOR UPDATE
-   INSERT_TRANSACTION=INSERT INTO JMS_TRANSACTION (TRANSACTIONID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) VALUES(?, ?, ?, ?)
-   DELETE_TRANSACTION=DELETE FROM JMS_TRANSACTION WHERE TRANSACTIONID = ?
-   SELECT_PREPARED_TRANSACTIONS=SELECT TRANSACTIONID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JMS_TRANSACTION   
-   SELECT_MESSAGEID_FOR_REF=SELECT MESSAGEID, CHANNELID FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID = ? AND STATE = '+' ORDER BY ORD
-   SELECT_MESSAGEID_FOR_ACK=SELECT MESSAGEID, CHANNELID FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID = ? AND STATE = '-' ORDER BY ORD 
-   UPDATE_COUNTER=UPDATE JMS_COUNTER SET NEXT_ID = ? WHERE NAME=?
-   SELECT_COUNTER=SELECT NEXT_ID FROM JMS_COUNTER WHERE NAME=? FOR UPDATE
-   INSERT_COUNTER=INSERT INTO JMS_COUNTER (NAME, NEXT_ID) VALUES (?, ?)
-   SELECT_ALL_CHANNELS=SELECT DISTINCT(CHANNELID) FROM JMS_MESSAGE_REFERENCE
+   CREATE_MESSAGE_REFERENCE=CREATE TABLE JBM_MSG_REF (CHANNEL_ID BIGINT, MESSAGE_ID BIGINT, TRANSACTION_ID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, DELIVERY_COUNT INTEGER, LOADED CHAR(1), SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))
+   CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)
+   CREATE_IDX_MESSAGE_REF_ORD=CREATE INDEX JBM_MSG_REF_ORD ON JBM_MSG_REF (ORD)
+   CREATE_IDX_MESSAGE_REF_PAGE_ORD=CREATE INDEX JBM_MSG_REF_LOADED ON JBM_MSG_REF (PAGE_ORD)
+   CREATE_IDX_MESSAGE_REF_MESSAGE_ID=CREATE INDEX JBM_MSG_REF_MESSAGE_ID ON JBM_MSG_REF (MESSAGE_ID)
+   CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY=CREATE INDEX JBM_MSG_REF_SCHED_DELIVERY ON JBM_MSG_REF (SCHED_DELIVERY)
+   CREATE_MESSAGE=CREATE TABLE JBM_MSG (MESSAGE_ID BIGINT, RELIABLE CHAR(1), EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY TINYINT, HEADERS MEDIUMBLOB, PAYLOAD LONGBLOB, CHANNEL_COUNT INTEGER, TYPE TINYINT, PRIMARY KEY (MESSAGE_ID))
+   CREATE_TRANSACTION=CREATE TABLE JBM_TX (TRANSACTION_ID BIGINT, BRANCH_QUAL VARBINARY(254), FORMAT_ID INTEGER, GLOBAL_TXID VARBINARY(254), PRIMARY KEY (TRANSACTION_ID))
+   CREATE_COUNTER=CREATE TABLE JBM_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))
+   INSERT_MESSAGE_REF=INSERT INTO JBM_MSG_REF (CHANNEL_ID, MESSAGE_ID, TRANSACTION_ID, STATE, ORD, PAGE_ORD, DELIVERY_COUNT, SCHED_DELIVERY) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+   DELETE_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_MESSAGE_REF=UPDATE JBM_MSG_REF SET TRANSACTION_ID=?, STATE='-' WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_PAGE_ORDER=UPDATE JBM_MSG_REF SET PAGE_ORD = ? WHERE MESSAGE_ID=? AND CHANNEL_ID=?
+   COMMIT_MESSAGE_REF1=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='+'
+   COMMIT_MESSAGE_REF2=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='-'
+   ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
+   ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
+   LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
+   SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
+   SELECT_EXISTS_REF=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   SELECT_EXISTS_REF_MESSAGE_ID=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE MESSAGE_ID = ?
+   UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   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, HEADERS, PAYLOAD, CHANNEL_COUNT, TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
+   INC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT + 1 WHERE MESSAGE_ID=?
+   DEC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT - 1 WHERE MESSAGE_ID=?
+   DELETE_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID=? AND CHANNEL_COUNT=0
+   MESSAGE_ID_COLUMN=MESSAGE_ID
+   MESSAGE_EXISTS=SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ? FOR UPDATE
+   INSERT_TRANSACTION=INSERT INTO JBM_TX (TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) VALUES(?, ?, ?, ?)
+   DELETE_TRANSACTION=DELETE FROM JBM_TX WHERE TRANSACTION_ID = ?
+   SELECT_PREPARED_TRANSACTIONS=SELECT TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JBM_TX   
+   SELECT_MESSAGE_ID_FOR_REF=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '+' ORDER BY ORD
+   SELECT_MESSAGE_ID_FOR_ACK=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '-' ORDER BY ORD 
+   UPDATE_COUNTER=UPDATE JBM_COUNTER SET NEXT_ID = ? WHERE NAME=?
+   SELECT_COUNTER=SELECT NEXT_ID FROM JBM_COUNTER WHERE NAME=? FOR UPDATE
+   INSERT_COUNTER=INSERT INTO JBM_COUNTER (NAME, NEXT_ID) VALUES (?, ?)
+   SELECT_ALL_CHANNELS=SELECT DISTINCT(CHANNEL_ID) FROM JBM_MSG_REF
          ]]></attribute>
          <attribute name="MaxParams">500</attribute>
    </mbean>
@@ -72,10 +71,10 @@
       <attribute name="DataSource">java:/DefaultDS</attribute>
       <attribute name="CreateTablesOnStartup">true</attribute>
       <attribute name="SqlProperties"><![CDATA[
-CREATE_POSTOFFICE_TABLE=CREATE TABLE JMS_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER, QUEUE_NAME VARCHAR(1023), COND VARCHAR(1023), SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER CHAR(1), FAILED_NODE_ID INTEGER)
-INSERT_BINDING=INSERT INTO JMS_POSTOFFICE (POSTOFFICE_NAME, NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
-DELETE_BINDING=DELETE FROM JMS_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?
-LOAD_BINDINGS=SELECT NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID FROM JMS_POSTOFFICE WHERE POSTOFFICE_NAME  = ?
+CREATE_POSTOFFICE_TABLE=CREATE TABLE JBM_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER, QUEUE_NAME VARCHAR(1023), COND VARCHAR(1023), SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER CHAR(1), FAILED_NODE_ID INTEGER)
+INSERT_BINDING=INSERT INTO JBM_POSTOFFICE (POSTOFFICE_NAME, NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+DELETE_BINDING=DELETE FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?
+LOAD_BINDINGS=SELECT NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME  = ?
       ]]></attribute>
    </mbean>
 
@@ -87,9 +86,9 @@
       <attribute name="DataSource">java:/DefaultDS</attribute>
       <attribute name="CreateTablesOnStartup">true</attribute>
       <attribute name="SqlProperties"><![CDATA[
-CREATE_USER_TABLE=CREATE TABLE JMS_USER (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128), PRIMARY KEY(USERID))
-CREATE_ROLE_TABLE=CREATE TABLE JMS_ROLE (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL, PRIMARY KEY(USERID, ROLEID))
-SELECT_PRECONF_CLIENTID=SELECT CLIENTID FROM JMS_USER WHERE USERID=?
+CREATE_USER_TABLE=CREATE TABLE JBM_USER (USER_ID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128), PRIMARY KEY(USER_ID))
+CREATE_ROLE_TABLE=CREATE TABLE JBM_ROLE (ROLE_ID VARCHAR(32) NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(USER_ID, ROLE_ID))
+SELECT_PRECONF_CLIENTID=SELECT CLIENTID FROM JBM_USER WHERE USER_ID=?
       ]]></attribute>
    </mbean>
 

Modified: trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -165,12 +165,15 @@
       }
 
       m.setJMSDestination(destination);
-
+      
+      // Generate the message id
+      ConnectionState connectionState = getConnectionState(invocation);
+      
+      long id = connectionState.getIdGenerator().getId();
+    
       JBossMessage messageToSend;
       boolean foreign = false;
 
-      boolean doCopy = false;
-      
       if (!(m instanceof MessageProxy))
       {
          // it's a foreign message
@@ -205,41 +208,31 @@
          {
             messageToSend = new JBossMessage(m, 0);
          }
-
-         messageToSend.doAfterSend();
+         
+         messageToSend.setJMSMessageID(null);
       }
       else
       {
          // get the actual message
          MessageProxy proxy = (MessageProxy)m;
-         messageToSend = proxy.getMessage();
-                  
-         if (proxy.isSent() || proxy.isReceived())
-         {           
-            doCopy = true;
-         }
+                                    
+         //The following line executed on the proxy should cause a copy to occur
+         //if it is necessary
+         proxy.setJMSMessageID(null);
          
-         messageToSend.doAfterSend();
-         proxy.setSent();
+         //Get the underlying message
+         messageToSend = proxy.getMessage();     
+         
+         proxy.beforeSend();
       }
       
-      // set the message ID
+      // Set the new id
       
-      ConnectionState connectionState = getConnectionState(invocation);
-      
-      long id = connectionState.getIdGenerator().getId();
-      
-      messageToSend.setJMSMessageID(null);
       messageToSend.setMessageId(id);
       
-      // If the message has already been sent we need to make a shallow copy since if we are invm
-      // then we do not want to change the ids of messages already sent - which would happen if we
-      // were sending the same underlying instance.
-      if (doCopy)
-      {
-         messageToSend = messageToSend.doShallowCopy();
-      }
-
+      // This only really used for BytesMessages and StreamMessages to reset their state
+      messageToSend.doBeforeSend(); 
+      
       // now that we know the messageID, set it also on the foreign message, if is the case
       if (foreign)
       {

Modified: trunk/src/main/org/jboss/jms/client/remoting/CallbackManager.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/remoting/CallbackManager.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/client/remoting/CallbackManager.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -24,10 +24,12 @@
 import java.util.Map;
 
 import org.jboss.jms.client.delegate.ClientConnectionDelegate;
+import org.jboss.jms.message.JBossMessage;
 import org.jboss.jms.message.MessageProxy;
 import org.jboss.jms.wireformat.ClientDelivery;
 import org.jboss.jms.wireformat.ConnectionFactoryUpdate;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.remoting.callback.Callback;
 import org.jboss.remoting.callback.HandleCallbackException;
 import org.jboss.remoting.callback.InvokerCallbackHandler;
@@ -86,7 +88,11 @@
       if (parameter instanceof ClientDelivery)
       {
          ClientDelivery dr = (ClientDelivery)parameter;
-         MessageProxy msg = dr.getMessage();
+         
+         Message msg = dr.getMessage();
+         
+         MessageProxy proxy =
+            JBossMessage.createThinDelegate(dr.getDeliveryId(), (JBossMessage)msg, dr.getDeliveryCount());
 
          MessageCallbackHandler handler =
             (MessageCallbackHandler)callbackHandlers.get(new Integer(dr.getConsumerId()));
@@ -104,7 +110,7 @@
 
          try
          {
-            handler.handleMessage(msg);
+            handler.handleMessage(proxy);
          }
          catch (Exception e)
          {

Modified: trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -37,7 +37,7 @@
 import org.jboss.jms.server.endpoint.DefaultCancel;
 import org.jboss.jms.server.endpoint.DeliveryInfo;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.util.Future;
 import org.jboss.messaging.util.prioritylinkedlist.BasicPriorityLinkedList;
 import org.jboss.messaging.util.prioritylinkedlist.PriorityLinkedList;
@@ -238,9 +238,9 @@
     */
    public void handleMessage(Object message) throws Exception
    {
-      MessageProxy msg = (MessageProxy) message;
+      MessageProxy proxy = (MessageProxy) message;
 
-      if (trace) { log.trace(this + " receiving message " + msg + " from the remoting layer"); }
+      if (trace) { log.trace(this + " receiving message " + proxy + " from the remoting layer"); }
 
       synchronized (mainLock)
       {
@@ -251,14 +251,12 @@
             return;
          }
 
-         msg.setSessionDelegate(sessionDelegate, isConnectionConsumer);
-                  
-         msg.setReceived();                  
-                   
+         proxy.setSessionDelegate(sessionDelegate, isConnectionConsumer);
+                        
          //Add it to the buffer
-         buffer.addLast(msg, msg.getJMSPriority());         
+         buffer.addLast(proxy, proxy.getJMSPriority());         
          
-         lastDeliveryId = msg.getDeliveryId();
+         lastDeliveryId = proxy.getDeliveryId();
          
          if (trace) { log.trace(this + " added message(s) to the buffer"); }
          

Modified: trunk/src/main/org/jboss/jms/destination/JBossDestination.java
===================================================================
--- trunk/src/main/org/jboss/jms/destination/JBossDestination.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/destination/JBossDestination.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -54,7 +54,7 @@
    private static final byte TEMP_QUEUE = 3;
    
    private static final byte TEMP_TOPIC = 4;
-
+   
    // Static --------------------------------------------------------
    
    public static void writeDestination(DataOutputStream out, Destination dest) throws IOException
@@ -155,7 +155,7 @@
    }
 
    // Public --------------------------------------------------------
-
+   
    public String getName()
    {
       return name;

Modified: trunk/src/main/org/jboss/jms/destination/JBossQueue.java
===================================================================
--- trunk/src/main/org/jboss/jms/destination/JBossQueue.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/destination/JBossQueue.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -67,7 +67,7 @@
    }
 
    // Public --------------------------------------------------------
-
+   
    public String toString()
    {
       return "JBossQueue[" + name + "]";

Modified: trunk/src/main/org/jboss/jms/message/JBossBytesMessage.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/JBossBytesMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/JBossBytesMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -27,7 +27,6 @@
 import java.io.DataOutputStream;
 import java.io.EOFException;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.jms.BytesMessage;
@@ -35,7 +34,6 @@
 import javax.jms.MessageEOFException;
 import javax.jms.MessageFormatException;
 
-import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.util.MessagingJMSException;
 import org.jboss.logging.Logger;
 
@@ -59,7 +57,7 @@
 
    private static final Logger log = Logger.getLogger(JBossBytesMessage.class);
 
-   public static final byte TYPE = 1;
+   public static final byte TYPE = 4;
 
    // Attributes ----------------------------------------------------
 
@@ -99,17 +97,9 @@
                             long timestamp,
                             byte priority,
                             Map coreHeaders,
-                            byte[] payloadAsByteArray,
-                            String jmsType,
-                            String correlationID,
-                            byte[] correlationIDBytes,
-                            JBossDestination destination,
-                            JBossDestination replyTo,
-                            HashMap jmsProperties)
+                            byte[] payloadAsByteArray)
    {
-      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray,
-            jmsType, correlationID, correlationIDBytes, destination, replyTo,
-            jmsProperties);
+      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray);            
       
       baos = new ByteArrayOutputStream();
       dos = new DataOutputStream(baos);
@@ -604,7 +594,7 @@
 
    // JBossMessage overrides ----------------------------------------
 
-   public void doAfterSend() throws JMSException
+   public void doBeforeSend() throws JMSException
    {
       reset();
    }
@@ -656,7 +646,7 @@
       return JBossBytesMessage.TYPE;
    }
 
-   public JBossMessage doShallowCopy() throws JMSException
+   public JBossMessage doCopy() throws JMSException
    {
       reset();
       

Modified: trunk/src/main/org/jboss/jms/message/JBossMapMessage.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/JBossMapMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/JBossMapMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,7 +23,6 @@
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -33,7 +32,6 @@
 import javax.jms.MapMessage;
 import javax.jms.MessageFormatException;
 
-import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.util.StreamUtils;
 import org.jboss.util.Primitives;
 
@@ -55,7 +53,7 @@
 
    private static final long serialVersionUID = 7939593521831220924L;
    
-   public static final byte TYPE = 2;
+   public static final byte TYPE = 5;
 
    // Attributes ----------------------------------------------------
 
@@ -83,23 +81,10 @@
    /*
     * This constructor is used to construct messages when retrieved from persistence storage
     */
-   public JBossMapMessage(long messageID,
-         boolean reliable,
-         long expiration,
-         long timestamp,
-         byte priority,
-         Map coreHeaders,
-         byte[] payloadAsByteArray,
-         String jmsType,
-         String correlationID,
-         byte[] correlationIDBytes,
-         JBossDestination destination,
-         JBossDestination replyTo,
-         HashMap jmsProperties)
+   public JBossMapMessage(long messageID, boolean reliable, long expiration, long timestamp,
+                          byte priority, Map coreHeaders, byte[] payloadAsByteArray)
    {
-      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray,
-            jmsType, correlationID, correlationIDBytes, destination, replyTo, 
-            jmsProperties);
+      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray);
    }
 
    public JBossMapMessage(JBossMapMessage other)
@@ -490,7 +475,7 @@
       clearPayloadAsByteArray();
    }
    
-   public JBossMessage doShallowCopy()
+   public JBossMessage doCopy()
    {
       return new JBossMapMessage(this);
    }
@@ -499,12 +484,12 @@
 
    // Protected -----------------------------------------------------
 
-   protected void writePayload(DataOutputStream out, Serializable thePayload) throws Exception
+   protected void writePayload(DataOutputStream out, Object thePayload) throws Exception
    {
       StreamUtils.writeMap(out, ((Map)getPayload()), true);
    }
 
-   protected Serializable readPayload(DataInputStream in, int length)
+   protected Object readPayload(DataInputStream in, int length)
       throws Exception
    {
       HashMap m = StreamUtils.readMap(in, true);

Modified: trunk/src/main/org/jboss/jms/message/JBossMessage.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/JBossMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/JBossMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -45,8 +45,8 @@
 
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.util.MessagingJMSException;
+import org.jboss.logging.Logger;
 import org.jboss.messaging.core.message.MessageSupport;
-import org.jboss.messaging.util.StreamUtils;
 import org.jboss.util.Primitives;
 import org.jboss.util.Strings;
 
@@ -68,7 +68,6 @@
  * @author Hiram Chirino (Cojonudo14 at hotmail.com)
  * @author David Maplesden (David.Maplesden at orion.co.nz)
  * @author <a href="mailto:adrian at jboss.org">Adrian Brock</a>
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  *
  * $Id$
  */
@@ -77,18 +76,26 @@
    // Constants -----------------------------------------------------
    private static final long serialVersionUID = 2833181306818971346L;
 
-   public static final byte TYPE = 0;
+   public static final byte TYPE = 1;
    
-   private static final byte NULL = 0;
+   private static final char PROPERTY_PREFIX_CHAR = 'P';
    
-   private static final byte STRING = 1;
+   private static final String PROPERTY_PREFIX = "P";
    
-   private static final byte BYTES = 2;
+   private static final String DESTINATION_HEADER_NAME = "H.DEST";
    
-   private static final String JMSX_DELIVERY_COUNT_PROP_NAME = "JMSXDeliveryCount";   
+   private static final String REPLYTO_HEADER_NAME = "H.REPLYTO";
    
+   private static final String CORRELATIONID_HEADER_NAME = "H.CORRELATIONID";
+   
+   private static final String CORRELATIONIDBYTES_HEADER_NAME = "H.CORRELATIONIDBYTES";
+   
+   private static final String TYPE_HEADER_NAME = "H.TYPE";
+   
    public static final String JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME = "JMS_JBOSS_SCHEDULED_DELIVERY";
    
+   private static final Logger log = Logger.getLogger(JBossMessage.class);   
+      
    // Static --------------------------------------------------------
 
    private static final HashSet reservedIdentifiers = new HashSet();
@@ -191,31 +198,59 @@
             sb.append(name).append(" - ").append(m.headers.get(name)).append('\n');
          }
       }
-      sb.append("              redelivered:   ").append(m.deliveryCount >= 1).append('\n');
-      sb.append("              priority:      ").append(m.priority).append('\n');
-      sb.append("              deliveryCount: ").append(m.deliveryCount).append('\n');
-
-      sb.append("              JMS ID:        ").append(m.getJMSMessageID()).append('\n');
-      sb.append("              type:          ").append(type).append('\n');
-      sb.append("              destination:   ").append(m.destination).append('\n');
-      sb.append("              replyTo:       ").append(m.replyToDestination).append('\n');
-      sb.append("              jmsType:       ").append(m.jmsType).append('\n');
-      sb.append("              properties:    ");
-
-      if (m.properties.size() == 0)
+      
+      int deliveryCount = 0;
+      try
       {
-         sb.append("NO PROPERTIES").append('\n');
+         deliveryCount = m.getIntProperty("JMSXDeliveryCount");
       }
-      else
+      catch (JMSException e)
       {
-         sb.append('\n');
-         for(Iterator i = m.properties.keySet().iterator(); i.hasNext(); )
+         log.error("Failed to get delivery count", e);
+      }
+                 
+      try
+      {
+         sb.append("              redelivered:   ").append(deliveryCount >= 1).append('\n');
+         sb.append("              priority:      ").append(m.priority).append('\n');
+         sb.append("              deliveryCount: ").append(deliveryCount).append('\n');
+   
+         sb.append("              JMS ID:        ").append(m.getJMSMessageID()).append('\n');
+         sb.append("              type:          ").append(type).append('\n');
+         sb.append("              destination:   ").append(m.getJMSDestination()).append('\n');
+         sb.append("              replyTo:       ").append(m.getJMSReplyTo()).append('\n');
+         sb.append("              jmsType:       ").append(m.getJMSType()).append('\n');
+         sb.append("              properties:    ");
+      }
+      catch (Exception e)
+      {
+         log.error("Failed to dump message", e);
+      }
+
+      Iterator iter = m.headers.entrySet().iterator();
+      
+      int count = 0;
+      
+      while (iter.hasNext())
+      {
+         Map.Entry entry = (Map.Entry)iter.next();
+         
+         String propName = (String)entry.getKey();
+         
+         if (propName.charAt(0) == PROPERTY_PREFIX_CHAR)
          {
-            String name = (String)i.next();
+            if (count == 0)
+            {
+               sb.append("\n");
+            }
+         
             sb.append("                             ");
-            sb.append(name).append(" - ").append(m.properties.get(name)).append('\n');
+            sb.append(propName).append(" - ").append(entry.getValue()).append('\n');
+            
+            count++;
          }
       }
+      
       sb.append("\n");
 
       return sb.toString();
@@ -223,70 +258,42 @@
 
    // Attributes ----------------------------------------------------
 
-   protected JBossDestination destination;
-   protected JBossDestination replyToDestination;
-   protected String jmsType;
-   protected Map properties;
-   protected String correlationID;
-   protected byte[] correlationIDBytes;
    protected transient int connectionID;
    
+   protected transient String jmsMessageID;
+   
+   //Optimisation - we could just store this as a header like everything else - but we store
+   //As an attribute so we can prevent an extra lookup on the server
+   private long scheduledDeliveryTime;
+   
+   //Optimisation - we could just store this as a header like everything else - but we store
+   //As an attribute so we can prevent an extra lookup on the server
+   private JBossDestination destination;
+   
    // Constructors --------------------------------------------------
  
-   /**
-    * Only deserialization should use this constructor directory
+   /*
+    * Construct a message for deserialization or streaming
     */
    public JBossMessage()
    {     
    }
    
    /*
-    * This constructor is used to construct messages prior to sending
+    * Construct a message using default values
     */
    public JBossMessage(long messageID)
    {
-      this(messageID, true, 0, System.currentTimeMillis(), (byte)4,
-           null, null, null, null, null, null, null, null);
+      super(messageID, true, 0, System.currentTimeMillis(), (byte)4, null, null);
    }
-
-   public JBossMessage(long messageID,
-                       boolean reliable,
-                       long expiration,
-                       long timestamp,
-                       byte priority,    
-                       Map coreHeaders,
-                       byte[] payloadAsByteArray,
-                       String jmsType,
-                       String correlationID,
-                       byte[] correlationIDBytes,
-                       JBossDestination destination,
-                       JBossDestination replyTo,
-                       HashMap jmsProperties)
+   
+   /*
+    * Constructor using specified values
+    */
+   public JBossMessage(long messageID, boolean reliable, long expiration, long timestamp,
+                       byte priority, Map headers, byte[] payloadAsByteArray) 
    {
-      super(messageID,
-            reliable,
-            expiration,
-            timestamp,
-            priority,
-            0, 0,
-            coreHeaders,
-            payloadAsByteArray);
-
-      this.jmsType = jmsType;      
-      this.correlationID = correlationID;
-      this.correlationIDBytes = correlationIDBytes;
-      this.connectionID = Integer.MIN_VALUE;
-      this.destination = destination;
-      this.replyToDestination = replyTo;
-
-      if (jmsProperties == null)
-      {
-         properties = new HashMap();
-      }
-      else
-      {
-         properties = jmsProperties;
-      }
+      super (messageID, reliable, expiration, timestamp, priority, headers, payloadAsByteArray);
    }
 
    /**
@@ -298,13 +305,8 @@
    protected JBossMessage(JBossMessage other)
    {
       super(other);
-      this.destination = other.destination;
-      this.replyToDestination = other.replyToDestination;
-      this.jmsType = other.jmsType;      
-      this.properties = other.properties;     
-      this.correlationID = other.correlationID;
-      this.correlationIDBytes = other.correlationIDBytes;
-      this.connectionID = other.connectionID;      
+      this.connectionID = other.connectionID;   
+      this.scheduledDeliveryTime = other.scheduledDeliveryTime;
    }
 
    /**
@@ -339,29 +341,17 @@
          setJMSDestination(foreign.getJMSDestination());
       }
       setJMSDeliveryMode(foreign.getJMSDeliveryMode());
-      setDeliveryCount(foreign.getJMSRedelivered() ? 1 : 0);
       setJMSExpiration(foreign.getJMSExpiration());
       setJMSPriority(foreign.getJMSPriority());
       setJMSType(foreign.getJMSType());
 
-      if (properties == null)
-      {
-         properties = new HashMap();
-      }
-
       for (Enumeration props = foreign.getPropertyNames(); props.hasMoreElements(); )
       {
          String name = (String)props.nextElement();
          
          Object prop = foreign.getObjectProperty(name);
-         if (JMSX_DELIVERY_COUNT_PROP_NAME.equals(name))
-         {
-            deliveryCount = foreign.getIntProperty(JMSX_DELIVERY_COUNT_PROP_NAME);
-         }
-         else
-         {
-            this.setObjectProperty(name, prop);
-         }                
+
+         this.setObjectProperty(name, prop);                       
       }
    }
    
@@ -375,8 +365,6 @@
 
    // javax.jmx.Message implementation ------------------------------
    
-   protected transient String jmsMessageID;
-
    public String getJMSMessageID()
    {
       if (jmsMessageID == null)
@@ -407,7 +395,7 @@
 
    public byte[] getJMSCorrelationIDAsBytes() throws JMSException
    {
-      return correlationIDBytes;
+      return (byte[]) headers.get(CORRELATIONIDBYTES_HEADER_NAME);
    }
 
    public void setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException
@@ -416,24 +404,26 @@
       {
          throw new JMSException("Please specify a non-zero length byte[]");
       }
-      correlationIDBytes = correlationID;
-      correlationID = null;
+      headers.put(CORRELATIONIDBYTES_HEADER_NAME, correlationID);
+      
+      headers.remove(CORRELATIONID_HEADER_NAME);
    }
 
    public void setJMSCorrelationID(String correlationID) throws JMSException
    {
-      this.correlationID = correlationID;
-      correlationIDBytes = null;
+      headers.put(CORRELATIONID_HEADER_NAME, correlationID);
+      
+      headers.remove(CORRELATIONIDBYTES_HEADER_NAME);
    }
 
    public String getJMSCorrelationID() throws JMSException
    {
-      return correlationID;
+      return (String)headers.get(CORRELATIONID_HEADER_NAME);
    }
 
    public Destination getJMSReplyTo() throws JMSException
    {
-      return replyToDestination;
+      return (Destination)headers.get(REPLYTO_HEADER_NAME);
    }
 
    public void setJMSReplyTo(Destination replyTo) throws JMSException
@@ -442,12 +432,19 @@
       {
          throw new InvalidDestinationException("Replyto cannot be foreign");
       }
-      this.replyToDestination = (JBossDestination)replyTo;
+      headers.put(REPLYTO_HEADER_NAME, (JBossDestination)replyTo);
    }
 
    public Destination getJMSDestination() throws JMSException
    {
-      return destination;
+      if (destination != null)
+      {
+         return destination;
+      }
+      else
+      {
+         return (Destination)headers.get(DESTINATION_HEADER_NAME);
+      }
    }
 
    public void setJMSDestination(Destination destination) throws JMSException
@@ -456,8 +453,25 @@
       {
          throw new InvalidDestinationException("Destination cannot be foreign");
       }
-      this.destination = (JBossDestination)destination;
+      
+      //We don't store as a header when setting - this allows us to avoid a lookup on the server
+      //when routing the message
+      this.destination = (JBossDestination)destination; 
    }
+   
+   //We need to override getHeaders - so the JMSDestination header gets persisted to the db
+   //This is called by the persistence manager
+   public Map getHeaders()
+   {
+      if (destination != null)
+      {
+         headers.put(DESTINATION_HEADER_NAME, destination);
+      }
+      
+      destination = null;
+      
+      return headers;
+   }
 
    public int getJMSDeliveryMode() throws JMSException
    {
@@ -483,19 +497,13 @@
 
    public boolean getJMSRedelivered() throws JMSException
    {
-      return deliveryCount >= 2;
+      throw new IllegalStateException("This should never be called directly");
    }
 
    public void setJMSRedelivered(boolean redelivered) throws JMSException
    {
-      if (deliveryCount == 1)
-      {
-         deliveryCount++;
-      }
-      else
-      {
-         //do nothing
-      }
+      //Always dealt with on the proxy
+      throw new IllegalStateException("This should never be called directly");
    }
 
    /**
@@ -505,7 +513,7 @@
     */
    public String getJMSType() throws JMSException
    {
-      return jmsType;
+      return (String)headers.get(TYPE_HEADER_NAME);
    }
 
    /**
@@ -515,7 +523,7 @@
     */
    public void setJMSType(String type) throws JMSException
    {
-      this.jmsType = type;
+      headers.put(TYPE_HEADER_NAME, type);
    }
 
    public long getJMSExpiration() throws JMSException
@@ -540,24 +548,34 @@
 
    public void clearProperties() throws JMSException
    {
-      properties.clear();
+      Iterator iter = headers.keySet().iterator();
+      
+      while (iter.hasNext())
+      {
+         String propName = (String)iter.next();
+         
+         if (propName.charAt(0) == PROPERTY_PREFIX_CHAR)
+         {
+            iter.remove();
+         }
+      }
    }
 
    public void clearBody() throws JMSException
    {
       this.setPayload(null);
+      
       clearPayloadAsByteArray();
    }
 
    public boolean propertyExists(String name) throws JMSException
    {
-      return properties.containsKey(name) || JMSX_DELIVERY_COUNT_PROP_NAME.equals(name) ||
-      (this.scheduledDeliveryTime != 0 && JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name));
+      return headers.containsKey(PROPERTY_PREFIX + name);
    }
 
    public boolean getBooleanProperty(String name) throws JMSException
    {
-      Object value = properties.get(name);
+      Object value = headers.get(PROPERTY_PREFIX + name);
       if (value == null)
          return Boolean.valueOf(null).booleanValue();
 
@@ -571,7 +589,7 @@
 
    public byte getByteProperty(String name) throws JMSException
    {
-      Object value = properties.get(name);
+      Object value = headers.get(PROPERTY_PREFIX + name);
       if (value == null)
          throw new NumberFormatException("Message property '" + name + "' not set.");
 
@@ -585,7 +603,7 @@
 
    public short getShortProperty(String name) throws JMSException
    {
-      Object value = properties.get(name);
+      Object value = headers.get(PROPERTY_PREFIX + name);
       if (value == null)
          throw new NumberFormatException("Message property '" + name + "' not set.");
 
@@ -600,13 +618,8 @@
    }
 
    public int getIntProperty(String name) throws JMSException
-   {
-      if (JMSX_DELIVERY_COUNT_PROP_NAME.equals(name))
-      {
-         return deliveryCount;
-      }
-               
-      Object value = properties.get(name);
+   {      
+      Object value = headers.get(PROPERTY_PREFIX + name);
 
       if (value == null)
       {
@@ -637,17 +650,20 @@
 
    public long getLongProperty(String name) throws JMSException
    {
-      if (JMSX_DELIVERY_COUNT_PROP_NAME.equals(name))
-      {
-         return (long)deliveryCount;
+      if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name))
+      {         
+         if (this.scheduledDeliveryTime == 0)
+         {
+            throw new NumberFormatException("Message property '" + name + "' not set.");
+         }
+         else
+         {
+            return scheduledDeliveryTime;
+         }         
       }
-      else if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name) && scheduledDeliveryTime > 0)
-      {
-         return scheduledDeliveryTime;
-      }
+      
+      Object value = headers.get(PROPERTY_PREFIX + name);
 
-      Object value = properties.get(name);
-
       if (value == null)
       {
          throw new NumberFormatException("Message property '" + name + "' not set.");
@@ -681,7 +697,7 @@
 
    public float getFloatProperty(String name) throws JMSException
    {
-      Object value = properties.get(name);
+      Object value = headers.get(PROPERTY_PREFIX + name);
       if (value == null)
          return Float.valueOf(null).floatValue();
 
@@ -695,7 +711,7 @@
 
    public double getDoubleProperty(String name) throws JMSException
    {
-      Object value = properties.get(name);
+      Object value = headers.get(PROPERTY_PREFIX + name);
       if (value == null)
          return Double.valueOf(null).doubleValue();
 
@@ -711,16 +727,19 @@
 
    public String getStringProperty(String name) throws JMSException
    {
-      if (JMSX_DELIVERY_COUNT_PROP_NAME.equals(name))
-      {
-         return String.valueOf(deliveryCount);
+      if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name))
+      {         
+         if (this.scheduledDeliveryTime == 0)
+         {
+            throw new NumberFormatException("Message property '" + name + "' not set.");
+         }
+         else
+         {
+            return String.valueOf(scheduledDeliveryTime);
+         }         
       }
-      else if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name) && scheduledDeliveryTime > 0)
-      {
-         return String.valueOf(scheduledDeliveryTime);
-      }
-
-      Object value = properties.get(name);
+      
+      Object value = headers.get(PROPERTY_PREFIX + name);
       if (value == null)
          return null;
 
@@ -764,18 +783,43 @@
 
    public Object getObjectProperty(String name) throws JMSException                                                              
    {
-      return properties.get(name);
+      if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name))
+      {         
+         if (scheduledDeliveryTime == 0)
+         {
+            return null;
+         }
+         else
+         {
+            return new Long(scheduledDeliveryTime);
+         }         
+      }
+      
+      return headers.get(PROPERTY_PREFIX + name);
    }
 
    public Enumeration getPropertyNames() throws JMSException
    {
       HashSet set = new HashSet();
-      set.addAll(properties.keySet());
-      set.add(JMSX_DELIVERY_COUNT_PROP_NAME);
-      if (this.scheduledDeliveryTime > 0)
+      
+      Iterator iter = headers.keySet().iterator();
+      
+      while (iter.hasNext())
       {
+         String propName = (String)iter.next();
+         
+         if (propName.charAt(0) == PROPERTY_PREFIX_CHAR)
+         {
+            String name = propName.substring(1);
+            set.add(name);
+         }
+      }
+      
+      if (scheduledDeliveryTime != 0)
+      {
          set.add(JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME);
       }
+      
       return Collections.enumeration(set);
    }
 
@@ -783,103 +827,110 @@
    {
       Boolean b = Primitives.valueOf(value);
       checkProperty(name, b);
-      properties.put(name, b);
+      headers.put(PROPERTY_PREFIX + name, b);
    }
 
    public void setByteProperty(String name, byte value) throws JMSException
    {
       Byte b = new Byte(value);
       checkProperty(name, b);
-      properties.put(name, b);
+      headers.put(PROPERTY_PREFIX + name, b);
    }
 
    public void setShortProperty(String name, short value) throws JMSException
    {
       Short s = new Short(value);
       checkProperty(name, s);
-      properties.put(name, s);
+      headers.put(PROPERTY_PREFIX + name, s);
    }
 
    public void setIntProperty(String name, int value) throws JMSException
    {
       Integer i = new Integer(value);
       checkProperty(name, i);
-      properties.put(name, i);
+      headers.put(PROPERTY_PREFIX + name, i);
    }
 
    public void setLongProperty(String name, long value) throws JMSException
    {
+      // Optimisation - we don't actually store this as a header - but as an attribute      
       if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name))
-      {
+      {         
          this.scheduledDeliveryTime = value;
       }
       else
-      {
+      {      
          Long l = new Long(value);
          checkProperty(name, l);
-         properties.put(name, l);
-      }
+         headers.put(PROPERTY_PREFIX + name, l);      
+      }      
    }
 
    public void setFloatProperty(String name, float value) throws JMSException
    {
       Float f = new Float(value);
       checkProperty(name, f);
-      properties.put(name, f);
+      headers.put(PROPERTY_PREFIX + name, f);
    }
 
    public void setDoubleProperty(String name, double value) throws JMSException
    {
       Double d = new Double(value);
       checkProperty(name, d);
-      properties.put(name, d);
+      headers.put(PROPERTY_PREFIX + name, d);
    }
 
    public void setStringProperty(String name, String value) throws JMSException
    {
       checkProperty(name, value);
-      this.properties.put(name, value);
+      headers.put(PROPERTY_PREFIX + name, value);
    }
 
    public void setObjectProperty(String name, Object value) throws JMSException
    {
+      if (JMS_JBOSS_SCHEDULED_DELIVERY_PROP_NAME.equals(name) && value instanceof Long)
+      {         
+         this.scheduledDeliveryTime = ((Long)value).longValue();
+         return;
+      }
+      
       checkProperty(name, value);
 
       if (value instanceof Boolean)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof Byte)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof Short)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof Integer)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof Long)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof Float)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof Double)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value instanceof String)
       {
-         properties.put(name, value);
+         headers.put(PROPERTY_PREFIX + name, value);
       }
       else if (value == null)
       {
-         properties.put(name, null);
+         headers.put(PROPERTY_PREFIX + name, null);
       }
       else
       {
@@ -889,7 +940,7 @@
 
    // Public --------------------------------------------------------
    
-   public void doAfterSend() throws JMSException
+   public void doBeforeSend() throws JMSException
    {      
    }
 
@@ -897,20 +948,7 @@
    {
       return JBossMessage.TYPE;
    }   
-
-   /**
-    * @return a reference of the internal JMS property map.
-    */
-   public Map getJMSProperties()
-   {
-      return properties;
-   }
    
-   public void setJMSProperties(Map props)
-   {
-      this.properties = props;
-   }
-   
    public void copyPayload(Object payload) throws JMSException
    {      
    }
@@ -935,127 +973,73 @@
       return sb.toString();
    }
    
-   public JBossMessage doShallowCopy() throws JMSException
+   public JBossMessage doCopy() throws JMSException
    {
       return new JBossMessage(this);
    }
+      
+   public void acknowledge()
+   {
+      throw new IllegalStateException("Should not be handled here!");
+   }
    
-   public boolean isCorrelationIDBytes()
+   public void setMessageId(long messageID)
    {
-      return this.correlationIDBytes != null;
+      this.messageID = messageID;
    }
    
-   public void acknowledge()
+   public long getScheduledDeliveryTime()
    {
-      //do nothing - handled in thin delegate
+      return scheduledDeliveryTime;
    }
+        
+   /* Only used for testing */
+   public Map getJMSProperties()
+   {      
+      Map newHeaders = new HashMap();
+      
+      Iterator iter = headers.entrySet().iterator();
+      
+      while (iter.hasNext())
+      {
+         Map.Entry entry = (Map.Entry)iter.next();
+         
+         String key = (String)entry.getKey();
+         
+         if (key.charAt(0) == PROPERTY_PREFIX_CHAR)
+         {
+            newHeaders.put(key, entry.getValue());
+         }
+      }
+      
+      return newHeaders;
+   }
    
-   public void setMessageId(long messageID)
+   //Only used for testing
+   public boolean isCorrelationIDBytes()
    {
-      this.messageID = messageID;
+      return headers.get(CORRELATIONIDBYTES_HEADER_NAME) != null;
    }
+  
 
    // Streamable implementation ---------------------------------
    
    public void write(DataOutputStream out) throws Exception
    {
       super.write(out);
+                   
+      out.writeLong(scheduledDeliveryTime);
       
-      JBossDestination.writeDestination(out, destination);
-      
-      JBossDestination.writeDestination(out, replyToDestination);
-      
-      if (jmsType == null)
-      {
-         out.writeByte(NULL);
-      }
-      else
-      {
-         out.writeByte(STRING);
-         out.writeUTF(jmsType);
-      }
-            
-      StreamUtils.writeMap(out, properties, true);
-      
-      if (correlationID == null && correlationIDBytes == null)
-      {
-         out.writeByte(NULL);
-      }
-      else if (correlationIDBytes == null)
-      {
-         //String correlation id
-         out.writeByte(STRING);
-         
-         out.writeUTF(correlationID);
-      }
-      else
-      {
-         //Bytes correlation id
-         out.writeByte(BYTES);
-         
-         out.writeInt(correlationIDBytes.length);  
-         
-         out.write(correlationIDBytes);
-      }            
+      JBossDestination.writeDestination(out, destination);      
    }
 
    public void read(DataInputStream in) throws Exception
    {
       super.read(in);
-
-      destination = JBossDestination.readDestination(in);
-
-      replyToDestination = JBossDestination.readDestination(in);
- 
-      byte b = in.readByte();
-      if (b == NULL)
-      {
-         jmsType =  null;
-      }
-      else
-      {
-         jmsType = in.readUTF();
-      }
+           
+      scheduledDeliveryTime = in.readLong();
       
-      Map m = StreamUtils.readMap(in, true);
-      if (!(m instanceof HashMap))
-      {
-         properties =  new HashMap(m);
-      }
-      else
-      {
-         properties = (HashMap)m;
-      }
-
-      // correlation id
-      
-      b = in.readByte();
-      
-      if (b == NULL)
-      {
-         // No correlation id
-         correlationID = null;
-         
-         correlationIDBytes = null;
-      }
-      else if (b == STRING)
-      {
-         // String correlation id
-         correlationID = in.readUTF();
-         
-         correlationIDBytes = null;
-      }
-      else
-      {
-         // Bytes correlation id
-         correlationID = null;
-         
-         int len = in.readInt();
-         
-         correlationIDBytes = new byte[len];
-         
-         in.readFully(correlationIDBytes);
-      }
+      destination = JBossDestination.readDestination(in);
    }
 
    // Package protected ---------------------------------------------
@@ -1092,9 +1076,9 @@
       }
 
       if (name.regionMatches(false, 0, "JMSX", 0, 4) &&
-         !name.equals("JMSXGroupID") && !name.equals("JMSXGroupSeq"))
+         !name.equals("JMSXGroupID") && !name.equals("JMSXGroupSeq") && !name.equals("JMSXDeliveryCount"))
       {
-         throw new JMSException("Can only set JMSXGroupId, JMSXGroupSeq");
+         throw new JMSException("Can only set JMSXGroupId, JMSXGroupSeq, JMSXDeliveryCount");
       }           
    }
 

Modified: trunk/src/main/org/jboss/jms/message/JBossObjectMessage.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/JBossObjectMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/JBossObjectMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -22,14 +22,11 @@
 package org.jboss.jms.message;
 
 import java.io.Serializable;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.jms.JMSException;
 import javax.jms.ObjectMessage;
 
-import org.jboss.jms.destination.JBossDestination;
-
 /**
  * This class implements javax.jms.ObjectMessage
  * 
@@ -46,7 +43,7 @@
 
    private static final long serialVersionUID = -2374448267737763502L;
    
-   public static final byte TYPE = 3;
+   public static final byte TYPE = 2;
 
    // Attributes ----------------------------------------------------
 
@@ -72,23 +69,10 @@
    /*
     * This constructor is used to construct messages when retrieved from persistence storage
     */
-   public JBossObjectMessage(long messageID,
-         boolean reliable,
-         long expiration,
-         long timestamp,
-         byte priority,
-         Map coreHeaders,
-         byte[] payloadAsByteArray,         
-         String jmsType,
-         String correlationID,
-         byte[] correlationIDBytes,
-         JBossDestination destination,
-         JBossDestination replyTo,
-         HashMap jmsProperties)
+   public JBossObjectMessage(long messageID, boolean reliable, long expiration, long timestamp,
+                             byte priority, Map coreHeaders, byte[] payloadAsByteArray)
    {
-      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray,
-            jmsType, correlationID, correlationIDBytes, destination, replyTo, 
-            jmsProperties);
+      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray);
    }
 
 
@@ -132,12 +116,12 @@
 
    public Serializable getObject() throws JMSException
    {
-      return getPayload();     
+      return (Serializable)getPayload();     
    }
 
    // JBossMessage overrides ----------------------------------------
 
-   public JBossMessage doShallowCopy()
+   public JBossMessage doCopy()
    {
       return new JBossObjectMessage(this);
    }

Modified: trunk/src/main/org/jboss/jms/message/JBossStreamMessage.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/JBossStreamMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/JBossStreamMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,7 @@
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -34,7 +32,6 @@
 import javax.jms.MessageFormatException;
 import javax.jms.StreamMessage;
 
-import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.util.StreamUtils;
 import org.jboss.util.Primitives;
 
@@ -56,7 +53,7 @@
 
    private static final long serialVersionUID = 7469150228071568233L;
 
-   public static final byte TYPE = 4;
+   public static final byte TYPE = 6;
 
    // Attributes ----------------------------------------------------
 
@@ -93,23 +90,10 @@
    /*
     * This constructor is used to construct messages when retrieved from persistence storage
     */
-   public JBossStreamMessage(long messageID,
-         boolean reliable,
-         long expiration,
-         long timestamp,
-         byte priority,
-         Map coreHeaders,
-         byte[] payloadAsByteArray,         
-         String jmsType,
-         String correlationID,
-         byte[] correlationIDBytes,
-         JBossDestination destination,
-         JBossDestination replyTo,
-         HashMap jmsProperties)
+   public JBossStreamMessage(long messageID, boolean reliable, long expiration, long timestamp,
+                             byte priority, Map coreHeaders, byte[] payloadAsByteArray)
    {
-      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray,
-            jmsType, correlationID, correlationIDBytes, destination, replyTo, 
-            jmsProperties);
+      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray);
    }
 
    /**
@@ -155,7 +139,7 @@
       return JBossStreamMessage.TYPE;
    }
    
-   public void doAfterSend() throws JMSException
+   public void doBeforeSend() throws JMSException
    {      
       reset();
    }
@@ -682,7 +666,7 @@
 
    }
    
-   public JBossMessage doShallowCopy()
+   public JBossMessage doCopy()
    {
       return new JBossStreamMessage(this);
    }
@@ -691,12 +675,12 @@
 
    // Protected -----------------------------------------------------
 
-   protected void writePayload(DataOutputStream out, Serializable thePayload) throws Exception
+   protected void writePayload(DataOutputStream out, Object thePayload) throws Exception
    {
       StreamUtils.writeList(out, (List)thePayload);
    }
 
-   protected Serializable readPayload(DataInputStream in, int length)
+   protected Object readPayload(DataInputStream in, int length)
       throws Exception
    {
       return StreamUtils.readList(in);

Modified: trunk/src/main/org/jboss/jms/message/JBossTextMessage.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/JBossTextMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/JBossTextMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,14 +23,11 @@
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.Serializable;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.jms.JMSException;
 import javax.jms.TextMessage;
 
-import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.util.SafeUTF;
 
 /**
@@ -52,7 +49,7 @@
 
    private static final long serialVersionUID = -5661567664746852006L;
    
-   public static final byte TYPE = 5;
+   public static final byte TYPE = 3;
 
    // Attributes ----------------------------------------------------
 
@@ -78,23 +75,10 @@
    /*
     * This constructor is used to construct messages when retrieved from persistence storage
     */
-   public JBossTextMessage(long messageID,
-         boolean reliable,
-         long expiration,
-         long timestamp,
-         byte priority,
-         Map coreHeaders,
-         byte[] payloadAsByteArray,         
-         String jmsType,
-         String correlationID,
-         byte[] correlationIDBytes,
-         JBossDestination destination,
-         JBossDestination replyTo,
-         HashMap jmsProperties)
+   public JBossTextMessage(long messageID, boolean reliable, long expiration, long timestamp,
+                           byte priority, Map coreHeaders, byte[] payloadAsByteArray)
    {
-      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray,
-            jmsType, correlationID, correlationIDBytes, destination, replyTo, 
-            jmsProperties);
+      super(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray);
    }
 
    /**
@@ -144,7 +128,7 @@
 
    // JBossMessage override -----------------------------------------
    
-   public JBossMessage doShallowCopy()
+   public JBossMessage doCopy()
    {
       return new JBossTextMessage(this);
    }
@@ -153,12 +137,12 @@
 
    // Protected -----------------------------------------------------
 
-   protected void writePayload(DataOutputStream out, Serializable thePayload) throws Exception
+   protected void writePayload(DataOutputStream out, Object thePayload) throws Exception
    {
       SafeUTF.instance.safeWriteUTF(out, (String)thePayload);
    }
 
-   protected Serializable readPayload(DataInputStream in, int length)
+   protected Object readPayload(DataInputStream in, int length)
       throws Exception
    {
       return SafeUTF.instance.safeReadUTF(in);

Modified: trunk/src/main/org/jboss/jms/message/MessageProxy.java
===================================================================
--- trunk/src/main/org/jboss/jms/message/MessageProxy.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/message/MessageProxy.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,7 +23,6 @@
 
 import java.io.Serializable;
 import java.util.Enumeration;
-import java.util.HashMap;
 
 import javax.jms.Destination;
 import javax.jms.JMSException;
@@ -31,6 +30,7 @@
 import javax.jms.MessageNotWriteableException;
 
 import org.jboss.jms.delegate.SessionDelegate;
+import org.jboss.logging.Logger;
 
 /**
  * 
@@ -57,12 +57,10 @@
 
    private static final long serialVersionUID = 5903095946142192468L;
    
+   private static final Logger log = Logger.getLogger(MessageProxy.class);   
+   
    // Static --------------------------------------------------------
 
-   protected static final int STATE_NEW = 0;
-   protected static final int STATE_SENT = 1;
-   protected static final int STATE_RECEIVED = 2;
-
    // Attributes ----------------------------------------------------
 
    //The actual session delegate for the message - needed for doing recovery
@@ -71,45 +69,68 @@
    
    private transient boolean cc;
    
-   private transient boolean messageCopied;
-   
-   private transient boolean propertiesCopied;
-   
-   private transient boolean bodyCopied;
-
-   private transient int state;
-
-   private transient boolean propertiesReadOnly;   
-
    private int deliveryCount;
    
    private long deliveryId;
+             
+   private transient boolean needToCopyHeader;
    
+   private transient boolean needToCopyBody;
+    
+   public void beforeSend()
+   {
+      this.needToCopyHeader = true;
+      
+      this.needToCopyBody = true;           
+      
+      this.propertiesReadOnly = false;
+      
+      this.bodyReadOnly = false;
+   }
+   
+   private transient boolean propertiesReadOnly;   
+
    protected transient boolean bodyReadOnly;
+      
    
    protected JBossMessage message;
 
-
    // Constructors --------------------------------------------------
 
    public MessageProxy()
    {
    }
    
+   /*
+    * Constructor for a new message
+    */
    public MessageProxy(JBossMessage message)
    {
-      this.deliveryId = -1;
       this.message = message;
-      this.state = STATE_NEW;
-      this.deliveryCount = 0;
+      
+      this.needToCopyHeader = false;
+      
+      this.needToCopyBody = false;
    }
 
+   /*
+    * COnstructor for a message received by  a consumer
+    */
    public MessageProxy(long deliveryId, JBossMessage message, int deliveryCount)
    {
       this.deliveryId = deliveryId;
+      
       this.message = message;
-      this.state = STATE_NEW;
+      
       this.deliveryCount = deliveryCount;
+      
+      this.needToCopyHeader = true;
+      
+      this.needToCopyBody = true;
+      
+      this.propertiesReadOnly = true;
+      
+      this.bodyReadOnly = true;
    }
 
    // Message implementation ----------------------------------------
@@ -249,7 +270,7 @@
 
    public void clearProperties() throws JMSException
    {
-      propertiesClear();
+      headerChange();
       message.clearProperties();
       propertiesReadOnly = false;
    }
@@ -276,6 +297,7 @@
 
    public int getIntProperty(String name) throws JMSException
    {
+      //JMSDeliveryCount is always dealt within inside the proxy
       if ("JMSXDeliveryCount".equals(name))
       {
          return deliveryCount;
@@ -285,6 +307,7 @@
 
    public long getLongProperty(String name) throws JMSException
    {
+      //JMSDeliveryCount is always dealt within inside the proxy
       if ("JMSXDeliveryCount".equals(name))
       {
          return deliveryCount;
@@ -304,6 +327,7 @@
 
    public String getStringProperty(String name) throws JMSException
    {
+      //JMSDeliveryCount is always dealt within inside the proxy
       if ("JMSXDeliveryCount".equals(name))
       {
          return Integer.toString(deliveryCount);
@@ -325,7 +349,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setBooleanProperty(name, value);
    }
 
@@ -333,7 +357,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setByteProperty(name, value);
    }
 
@@ -341,7 +365,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setShortProperty(name, value);
    }
 
@@ -349,7 +373,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setIntProperty(name, value);
    }
 
@@ -357,7 +381,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setLongProperty(name, value);
    }
 
@@ -365,7 +389,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setFloatProperty(name, value);
    }
 
@@ -373,7 +397,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setDoubleProperty(name, value);
    }
 
@@ -381,7 +405,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setStringProperty(name, value);
    }
 
@@ -389,7 +413,7 @@
    {
       if (propertiesReadOnly)
          throw new MessageNotWriteableException("Properties are read-only");
-      propertyChange();
+      headerChange();
       message.setObjectProperty(name, value);
    }
 
@@ -404,7 +428,7 @@
 
    public void clearBody() throws JMSException
    {
-      bodyClear();
+      bodyChange();
       message.clearBody();
       bodyReadOnly = false;
    }
@@ -423,20 +447,6 @@
       return delegate;
    }
 
-   public void setSent()
-   {
-      state = STATE_SENT;
-   }
-
-   public void setReceived()
-   {
-      state = STATE_RECEIVED;
-
-      propertiesReadOnly = true;
-
-      bodyReadOnly = true;
-   }
-
    public JBossMessage getMessage()
    {
       return message;
@@ -468,94 +478,34 @@
 
    protected void headerChange() throws JMSException
    {
-      if ((isSent() || isReceived()))
+      if (needToCopyHeader)
       {
-         // A header value is to be changed - we must make a shallow copy of the message.
-         // This basically only copies the headers
          copyMessage();
       }
    }
 
-   protected void copyMessage() throws JMSException
-   {
-      if (!messageCopied)
+   protected void bodyChange() throws JMSException
+   {  
+      if (needToCopyBody)
       {
-         message = message.doShallowCopy();
-         messageCopied = true;
+         headerChange();
+                  
+         message.copyPayload(message.getPayload());
+         
+         needToCopyBody = false;
       }
    }
 
-   public boolean isSent()
+   // Private -------------------------------------------------------
+   
+   private void copyMessage() throws JMSException
    {
-      return state == STATE_SENT;
+      message = message.doCopy();
+         
+      needToCopyHeader = false;      
    }
 
-   public boolean isReceived()
-   {
-      return state == STATE_RECEIVED;
-   }
 
-   protected void propertyChange() throws JMSException
-   {
-      if (!propertiesCopied)
-      {
-         if (isSent())
-         {
-            //The message has been sent - we need to copy properties to avoid changing the properties
-            //of the sent message
-            copyMessage();
-            message.setJMSProperties(new HashMap(message.getJMSProperties()));
-
-         }
-         else if (isReceived())
-         {
-            //No need to copy - any attempt to set read only props will throw an exception
-         }
-      }
-   }
-
-   protected void propertiesClear() throws JMSException
-   {
-      if (isSent() || isReceived())
-      {
-         copyMessage();
-         message.setJMSProperties(new HashMap());
-         propertiesCopied = true;
-      }
-   }
-
-   protected void bodyClear() throws JMSException
-   {
-      if (isSent() || isReceived())
-      {
-         copyMessage();
-         bodyCopied = true;
-      }
-   }
-
-   protected void bodyChange() throws JMSException
-   {
-      if (isSent())
-      {
-         // The message has been sent - make a copy of the message to avoid changing the sent
-         // messages payload
-         copyMessage();
-
-         if (!bodyCopied)
-         {
-            message.copyPayload(message.getPayload());
-            bodyCopied = true;
-         }
-      }
-      else if (isReceived())
-      {
-         // Do nothing - any attempt to change the payload of the message should throw an exception
-         // (readonly)
-      }
-   }
-
-   // Private -------------------------------------------------------
-
    // Inner classes -------------------------------------------------
    
 }

Modified: trunk/src/main/org/jboss/jms/selector/Selector.java
===================================================================
--- trunk/src/main/org/jboss/jms/selector/Selector.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/selector/Selector.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -30,8 +30,6 @@
 
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.MessageReference;
-import org.jboss.messaging.core.Routable;
 
 
 /**
@@ -119,30 +117,17 @@
       return selector;
    }
 	
-	public synchronized boolean accept(Routable routable)
+	public synchronized boolean accept(org.jboss.messaging.core.message.Message message)
    {
       try
-      {			
-         org.jboss.messaging.core.Message m;
-         
-         //FIXME - We can get rid of this nasty comparisons once we change core
-         //to only deal with MessageRefernce instances
-         if (routable.isReference())
-         {
-            m = ((MessageReference)routable).getMessage();
-         }
-         else
-         {
-            m = (org.jboss.messaging.core.Message)routable;
-         }
-         
+      {			         
          //Only accept JMS messages
-         if (!(m instanceof Message))
+         if (!(message instanceof Message))
          {
             return false;
          }
          
-         Message mess = (Message)m;
+         Message mess = (Message)message;
          			
          // Set the identifiers values
          Iterator i = identifiers.values().iterator();

Modified: trunk/src/main/org/jboss/jms/server/JMSCondition.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/JMSCondition.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/JMSCondition.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,7 +21,7 @@
  */
 package org.jboss.jms.server;
 
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.Condition;
 
 /**

Modified: trunk/src/main/org/jboss/jms/server/ServerPeer.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -58,8 +58,8 @@
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.memory.MemoryManager;
 import org.jboss.messaging.core.memory.SimpleMemoryManager;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.plugin.contract.PostOffice;

Modified: trunk/src/main/org/jboss/jms/server/destination/ManagedQueue.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/destination/ManagedQueue.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/destination/ManagedQueue.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,8 +28,8 @@
 import org.jboss.jms.selector.Selector;
 import org.jboss.jms.server.messagecounter.MessageCounter;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
 import org.jboss.messaging.core.Queue;
+import org.jboss.messaging.core.message.Message;
 
 /**
  * A ManagedQueue

Modified: trunk/src/main/org/jboss/jms/server/destination/ManagedTopic.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/destination/ManagedTopic.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/destination/ManagedTopic.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -31,8 +31,8 @@
 import org.jboss.jms.server.messagecounter.MessageCounter;
 import org.jboss.jms.util.MessageQueueNameHelper;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
 import org.jboss.messaging.core.Queue;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.plugin.postoffice.Binding;
 
 /**

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -35,7 +35,6 @@
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Channel;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.Routable;
 
 /**
  * Concrete implementation of BrowserEndpoint.
@@ -139,11 +138,11 @@
             iterator = createIterator();
          }
 
-         Routable r = (Routable)iterator.next();
+         JBossMessage r = (JBossMessage)iterator.next();
    
          if (trace) { log.trace(this + " returning " + r); }
          
-         return (JBossMessage)r.getMessage();
+         return r;
       }   
       catch (Throwable t)
       {
@@ -179,7 +178,7 @@
          {
             if (iterator.hasNext())
             {
-               Message m = (Message)((Routable)iterator.next()).getMessage();
+               Message m = (Message)iterator.next();
                messages.add(m);
                i++;
             }

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -52,8 +52,8 @@
 import org.jboss.jms.util.ToString;
 import org.jboss.jms.wireformat.Dispatcher;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.MessageReference;
-import org.jboss.messaging.core.Routable;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PostOffice;
 import org.jboss.messaging.core.tx.MessagingXid;
@@ -631,7 +631,7 @@
       // the "local" queues, to reduce clutter and unnecessary "pull policy" revving.
       if (failedNodeID != null)
       {
-         msg.putHeader(Routable.FAILED_NODE_ID, failedNodeID);
+         msg.putHeader(Message.FAILED_NODE_ID, failedNodeID);
       }
 
       // We must reference the message *before* we send it the destination to be handled. This is
@@ -645,6 +645,13 @@
       {         
          ref = ms.reference(msg);
          
+         long schedDeliveryTime = msg.getScheduledDeliveryTime();
+         
+         if (schedDeliveryTime > 0)
+         {
+            ref.setScheduledDeliveryTime(schedDeliveryTime);
+         }
+         
          if (dest.isQueue())
          {
             if (!postOffice.route(ref, new JMSCondition(true, dest.getName()), tx))

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -27,7 +27,6 @@
 
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.message.JBossMessage;
-import org.jboss.jms.message.MessageProxy;
 import org.jboss.jms.selector.Selector;
 import org.jboss.jms.server.ConnectionManager;
 import org.jboss.jms.server.destination.TopicService;
@@ -39,11 +38,11 @@
 import org.jboss.messaging.core.Channel;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.Receiver;
-import org.jboss.messaging.core.Routable;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.PostOffice;
 import org.jboss.messaging.core.plugin.postoffice.Binding;
 import org.jboss.messaging.core.tx.Transaction;
@@ -177,7 +176,7 @@
          return null;
       }
       
-      if (ref.isExpired())
+      if (ref.getMessage().isExpired())
       {
          SimpleDelivery delivery = new SimpleDelivery(observer, ref, true);
          
@@ -206,7 +205,7 @@
    
          if (trace) { log.trace(this + " has startStopLock lock, preparing the message for delivery"); }
    
-         JBossMessage message = (JBossMessage)ref.getMessage();
+         Message message = ref.getMessage();
          
          boolean selectorRejected = !this.accept(message);
    
@@ -220,20 +219,12 @@
          long deliveryId =
             sessionEndpoint.addDelivery(delivery, id, dlq, expiryQueue, redeliveryDelay);
    
-         // We don't send the message as-is, instead we create a MessageProxy instance. This allows
-         // local fields such as deliveryCount to be handled by the proxy but global data to be
-         // fielded by the same underlying Message instance. This allows us to avoid expensive
-         // copying of messages
-   
-         MessageProxy mp = JBossMessage.
-            createThinDelegate(deliveryId, message, ref.getDeliveryCount());
-    
          // We send the message to the client on the current thread. The message is written onto the
          // transport and then the thread returns immediately without waiting for a response.
          
          Client callbackClient = callbackHandler.getCallbackClient();
          
-         ClientDelivery del = new ClientDelivery(mp, id);
+         ClientDelivery del = new ClientDelivery(message, id, deliveryId, ref.getDeliveryCount());
          
          Callback callback = new Callback(del);
            
@@ -296,7 +287,7 @@
 
    // Filter implementation ------------------------------------------------------------------------
 
-   public boolean accept(Routable r)
+   public boolean accept(Message msg)
    {
       boolean accept = true;
       
@@ -306,7 +297,7 @@
          // we do not want to do the check twice
          if (messageSelector != null)
          {
-            accept = messageSelector.accept(r);
+            accept = messageSelector.accept(msg);
    
             if (trace) { log.trace("message selector " + (accept ? "accepts " :  "DOES NOT accept ") + "the message"); }
          }
@@ -316,7 +307,7 @@
       {
          if (noLocal)
          {
-            int conId = ((JBossMessage)r).getConnectionID();
+            int conId = ((JBossMessage)msg).getConnectionID();
             
             if (trace) { log.trace("message connection id: " + conId + " current connection connection id: " + sessionEndpoint.getConnectionEndpoint().getConnectionID()); }   
                  

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -66,9 +66,9 @@
 import org.jboss.messaging.core.Channel;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
@@ -117,7 +117,7 @@
    
    public static final String JBOSS_MESSAGING_ORIG_DESTINATION = "JBM_ORIG_DESTINATION";
 
-   public static final String JBOSS_MESSAGING_ORIG_MESSAGEID = "JBM_ORIG_MESSAGEID";
+   public static final String JBOSS_MESSAGING_ORIG_MESSAGE_ID = "JBM_ORIG_MESSAGE_ID";
    
    public static final String JBOSS_MESSAGING_ACTUAL_EXPIRY_TIME = "JBM_ACTUAL_EXPIRY";
    
@@ -973,7 +973,7 @@
       //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  
-      boolean expired = cancel.isExpired() || rec.del.getReference().isExpired();
+      boolean expired = cancel.isExpired() || rec.del.getReference().getMessage().isExpired();
       
       //Note we check the flag *and* evaluate again, this is because the server value of maxDeliveries
       //might get changed after the client has sent the cancel - and we don't want to end up cancelling
@@ -1031,22 +1031,20 @@
       
       JBossMessage msg = ((JBossMessage)del.getReference().getMessage());
       
-      JBossMessage copy = msg.doShallowCopy();
+      JBossMessage copy = msg.doCopy();
       
       long newMessageId = sp.getMessageIDManager().getID();
       
       copy.setMessageId(newMessageId);
       
-      //reset delivery count and expiry
-      copy.setDeliveryCount(0);
-      
+      //reset expiry
       copy.setExpiration(0);
       
       String origMessageId = msg.getJMSMessageID();
       
       String origDest = msg.getJMSDestination().toString();
             
-      copy.setStringProperty(JBOSS_MESSAGING_ORIG_MESSAGEID, origMessageId);
+      copy.setStringProperty(JBOSS_MESSAGING_ORIG_MESSAGE_ID, origMessageId);
       
       copy.setStringProperty(JBOSS_MESSAGING_ORIG_DESTINATION, origDest);
       

Modified: trunk/src/main/org/jboss/jms/server/plugin/JDBCJMSUserManager.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/plugin/JDBCJMSUserManager.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/plugin/JDBCJMSUserManager.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -68,7 +68,7 @@
    protected Map getDefaultDMLStatements()
    {                
       Map map = new LinkedHashMap();
-      map.put("SELECT_PRECONF_CLIENTID", "SELECT CLIENTID FROM JMS_USER WHERE USERID=?");
+      map.put("SELECT_PRECONF_CLIENTID", "SELECT CLIENTID FROM JBM_USER WHERE USER_ID=?");
       return map;
    }
    
@@ -76,11 +76,11 @@
    {
       Map map = new LinkedHashMap();
       map.put("CREATE_USER_TABLE",
-              "CREATE TABLE JMS_USER (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128)," +
-              " PRIMARY KEY(USERID))");
+              "CREATE TABLE JBM_USER (USER_ID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128)," +
+              " PRIMARY KEY(USER_ID))");
       map.put("CREATE_ROLE_TABLE",
-              "CREATE TABLE JMS_ROLE (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL," +
-              " PRIMARY KEY(USERID, ROLEID))");
+              "CREATE TABLE JBM_ROLE (ROLE_ID VARCHAR(32) NOT NULL, USER_ID VARCHAR(32) NOT NULL," +
+              " PRIMARY KEY(USER_ID, ROLE_ID))");
       return map;
    }
 

Modified: trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -195,16 +195,12 @@
                         
                         packet = (ClientDelivery)callback.getParameter();
                         
-                        ((ClientDelivery)packet).setRemotingSessionID(req.getSessionId());
-                        
                         if (trace) { log.trace("Message delivery callback"); }
                      }
                      else if (callback.getParameter() instanceof ConnectionFactoryUpdate)
                      {
                         packet = (ConnectionFactoryUpdate)callback.getParameter();
                         
-                        ((ConnectionFactoryUpdate)packet).setRemotingSessionID(req.getSessionId());
-                        
                         if (trace) { log.trace("Connection factory update callback"); }
                      }
                   }
@@ -240,6 +236,12 @@
                // List of polled Callbacks, this is how messages are delivered when using
                // polled callbacks e.g. the HTTP transport
                
+               //Sanity check
+               if (((List)param).isEmpty())
+               {
+                  log.error("Got a polled callback list - but it is empty!!!");
+               }
+               
                packet = new PolledCallbacksDelivery((List)param, resp.getSessionId());             
             }
             else

Modified: trunk/src/main/org/jboss/jms/tx/ClientTransaction.java
===================================================================
--- trunk/src/main/org/jboss/jms/tx/ClientTransaction.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/tx/ClientTransaction.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -247,7 +247,7 @@
                JBossMessage m = (JBossMessage)iter2.next();
 
                out.writeByte(m.getType());
-
+             
                m.write(out);
             }
 
@@ -276,7 +276,7 @@
       state = in.readByte();
 
       int numSessions = in.readInt();
-
+      
       //Read in as a list since we don't want the extra overhead of putting into a map
       //which won't be used on the server side
       sessionStatesList = new ArrayList(numSessions);

Modified: trunk/src/main/org/jboss/jms/tx/TransactionRequest.java
===================================================================
--- trunk/src/main/org/jboss/jms/tx/TransactionRequest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/tx/TransactionRequest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -26,6 +26,7 @@
 
 import javax.transaction.xa.Xid;
 
+import org.jboss.logging.Logger;
 import org.jboss.messaging.core.tx.MessagingXid;
 import org.jboss.messaging.util.Streamable;
 
@@ -50,6 +51,8 @@
 {
    // Constants -----------------------------------------------------
    
+   private static final Logger log = Logger.getLogger(TransactionRequest.class);      
+   
    public final static byte ONE_PHASE_COMMIT_REQUEST = 0;
    public final static byte TWO_PHASE_PREPARE_REQUEST = 2;
    public final static byte TWO_PHASE_COMMIT_REQUEST = 3;

Modified: trunk/src/main/org/jboss/jms/wireformat/CallbackSupport.java
===================================================================
--- trunk/src/main/org/jboss/jms/wireformat/CallbackSupport.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/wireformat/CallbackSupport.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,9 +21,6 @@
  */
 package org.jboss.jms.wireformat;
 
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-
 import org.jboss.jms.client.remoting.CallbackManager;
 import org.jboss.remoting.InvocationRequest;
 import org.jboss.remoting.callback.Callback;
@@ -41,13 +38,6 @@
  */
 public abstract class CallbackSupport extends PacketSupport
 {      
-   protected String remotingSessionID;
-   
-   public void setRemotingSessionID(String sessionID)
-   {
-      this.remotingSessionID = sessionID;
-   }
-   
    public CallbackSupport()
    {      
    }
@@ -57,18 +47,6 @@
       super(id);
    }
 
-   public void read(DataInputStream is) throws Exception
-   {
-      remotingSessionID = is.readUTF();
-   }
-
-   public void write(DataOutputStream os) throws Exception
-   {
-      super.write(os);
-      
-      os.writeUTF(remotingSessionID);
-   }
-
    public Object getPayload()
    {
       // Basically remoting forces us to create this ridiculous pile of objects
@@ -82,7 +60,7 @@
       OnewayInvocation oi = new OnewayInvocation(ii);
 
       InvocationRequest request
-         = new InvocationRequest(remotingSessionID, CallbackManager.JMS_CALLBACK_SUBSYSTEM,
+         = new InvocationRequest(null, CallbackManager.JMS_CALLBACK_SUBSYSTEM,
                                  oi, ONE_WAY_METADATA, null, null);
       
       return request;

Modified: trunk/src/main/org/jboss/jms/wireformat/ClientDelivery.java
===================================================================
--- trunk/src/main/org/jboss/jms/wireformat/ClientDelivery.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/wireformat/ClientDelivery.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -24,8 +24,8 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
-import org.jboss.jms.message.JBossMessage;
-import org.jboss.jms.message.MessageProxy;
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageFactory;
 
 /**
@@ -43,13 +43,20 @@
 {
    // Constants -----------------------------------------------------
    
+   private static final Logger log = Logger.getLogger(ClientDelivery.class);
+   
+   
    // Static --------------------------------------------------------
    
    // Attributes ----------------------------------------------------
    
-   private MessageProxy msg;
+   private Message msg;
          
    private int consumerId;
+   
+   private long deliveryId;
+   
+   private int deliveryCount;
     
    // Constructors --------------------------------------------------
    
@@ -57,13 +64,17 @@
    {      
    }
 
-   public ClientDelivery(MessageProxy msg, int consumerId)
+   public ClientDelivery(Message msg, int consumerId, long deliveryId, int deliveryCount)
    {
       super (PacketSupport.CLIENT_DELIVERY);
       
       this.msg = msg;
       
       this.consumerId = consumerId;
+      
+      this.deliveryId = deliveryId;
+      
+      this.deliveryCount = deliveryCount;
    }
          
    // Streamable implementation
@@ -71,43 +82,41 @@
    
    public void write(DataOutputStream out) throws Exception
    {
+
       super.write(out);
       
       out.writeInt(consumerId);
-      
-      out.writeByte(msg.getMessage().getType());
 
-      out.writeInt(msg.getDeliveryCount());
-      
-      out.writeLong(msg.getDeliveryId());
+      out.writeInt(deliveryCount);
+ 
+      out.writeLong(deliveryId);
+   
+      out.writeByte(msg.getType());
+  
+      msg.write(out);   
 
-      msg.getMessage().write(out);          
-      
       out.flush();
    }
 
    public void read(DataInputStream in) throws Exception
    {
-      super.read(in);
-      
       consumerId = in.readInt();
       
+
+      deliveryCount = in.readInt();
+       
+      deliveryId = in.readLong();
+      
       byte type = in.readByte();
+                
+      msg = MessageFactory.createMessage(type);
       
-      int deliveryCount = in.readInt();
-      
-      long deliveryId = in.readLong();
-      
-      JBossMessage m = (JBossMessage)MessageFactory.createMessage(type);
-
-      m.read(in);
-
-      msg = JBossMessage.createThinDelegate(deliveryId, m, deliveryCount); 
+      msg.read(in);
    }
 
    // Public --------------------------------------------------------
    
-   public MessageProxy getMessage()
+   public Message getMessage()
    {
       return msg;
    }
@@ -116,6 +125,16 @@
    {
       return consumerId;
    }
+   
+   public long getDeliveryId()
+   {
+      return deliveryId;
+   }
+   
+   public int getDeliveryCount()
+   {
+      return deliveryCount;
+   }
 
    public String toString()
    {

Modified: trunk/src/main/org/jboss/jms/wireformat/ConnectionFactoryUpdate.java
===================================================================
--- trunk/src/main/org/jboss/jms/wireformat/ConnectionFactoryUpdate.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/wireformat/ConnectionFactoryUpdate.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -117,9 +117,7 @@
    // ---------------------------------------------------------------     
 
    public void read(DataInputStream is) throws Exception
-   {
-      super.read(is);
-      
+   {    
       int len = is.readInt();
       
       delegates = new ClientConnectionFactoryDelegate[len];

Modified: trunk/src/main/org/jboss/jms/wireformat/ConnectionSendTransactionRequest.java
===================================================================
--- trunk/src/main/org/jboss/jms/wireformat/ConnectionSendTransactionRequest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/wireformat/ConnectionSendTransactionRequest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -26,6 +26,7 @@
 
 import org.jboss.jms.server.endpoint.ConnectionEndpoint;
 import org.jboss.jms.tx.TransactionRequest;
+import org.jboss.logging.Logger;
 
 /**
  * 
@@ -39,6 +40,9 @@
  */
 public class ConnectionSendTransactionRequest extends RequestSupport
 {
+   private static final Logger log = Logger.getLogger(ConnectionSendTransactionRequest.class);
+   
+   
    private TransactionRequest req;
    private boolean retry;
    
@@ -87,7 +91,7 @@
    {
       super.write(os);
       
-      req.write(os);
+      req.write(os); 
 
       os.writeBoolean(retry);
       

Modified: trunk/src/main/org/jboss/jms/wireformat/PolledCallbacksDelivery.java
===================================================================
--- trunk/src/main/org/jboss/jms/wireformat/PolledCallbacksDelivery.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/wireformat/PolledCallbacksDelivery.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -27,9 +27,7 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.jboss.jms.message.JBossMessage;
-import org.jboss.jms.message.MessageProxy;
-import org.jboss.messaging.core.message.MessageFactory;
+import org.jboss.logging.Logger;
 import org.jboss.remoting.InvocationResponse;
 import org.jboss.remoting.callback.Callback;
 
@@ -44,6 +42,9 @@
  */
 public class PolledCallbacksDelivery extends PacketSupport
 {
+   private static final Logger log = Logger.getLogger(PolledCallbacksDelivery.class);
+   
+   
    private List callbacks;
    
    private String sessionID;
@@ -71,22 +72,13 @@
       
       for (int i = 0; i < len; i++)
       {
-         int consumerId = is.readInt();
+         //Read the method id int - we just throw it away
+         is.readInt();
          
-         byte type = is.readByte();
+         ClientDelivery delivery = new ClientDelivery();
          
-         int deliveryCount = is.readInt();
+         delivery.read(is);
          
-         long deliveryId = is.readLong();
-         
-         JBossMessage msg = (JBossMessage)MessageFactory.createMessage(type);
-
-         msg.read(is);
-
-         MessageProxy mp = JBossMessage.createThinDelegate(deliveryId, msg, deliveryCount); 
-         
-         ClientDelivery delivery = new ClientDelivery(mp, consumerId);
-         
          Callback cb = new Callback(delivery);
                   
          callbacks.add(cb);
@@ -98,9 +90,9 @@
       super.write(os);
       
       os.writeUTF(sessionID);
-      
+
       os.writeInt(callbacks.size());
-      
+
       Iterator iter = callbacks.iterator();
       
       while (iter.hasNext())
@@ -109,17 +101,7 @@
          
          ClientDelivery cd = (ClientDelivery)cb.getParameter();
          
-         os.writeInt(cd.getConsumerId());
-         
-         MessageProxy mp = cd.getMessage();
-         
-         os.writeByte(mp.getMessage().getType());
-
-         os.writeInt(mp.getDeliveryCount());
-         
-         os.writeLong(mp.getDeliveryId());
-
-         mp.getMessage().write(os);  
+         cd.write(os);  
       }
       
       os.flush();

Modified: trunk/src/main/org/jboss/jms/wireformat/SessionSendRequest.java
===================================================================
--- trunk/src/main/org/jboss/jms/wireformat/SessionSendRequest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/jms/wireformat/SessionSendRequest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -27,6 +27,7 @@
 
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.jms.server.endpoint.SessionEndpoint;
+import org.jboss.logging.Logger;
 import org.jboss.messaging.core.message.MessageFactory;
 
 /**
@@ -41,6 +42,9 @@
  */
 public class SessionSendRequest extends RequestSupport
 {
+   private static final Logger log = Logger.getLogger(SessionSendRequest.class);   
+   
+   
    private JBossMessage msg;
    private boolean retry;
    

Modified: trunk/src/main/org/jboss/messaging/core/ChannelSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/ChannelSupport.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/ChannelSupport.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -30,6 +30,7 @@
 
 import org.jboss.jms.server.MyTimeoutFactory;
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
@@ -205,7 +206,7 @@
       
       MessageReference ref = del.getReference();
       
-      if (ref.isReliable())
+      if (ref.getMessage().isReliable())
       {
          pm.updateDeliveryCount(this.channelID, ref);
       }
@@ -504,7 +505,7 @@
                
                MessageReference ref = (MessageReference)liter.next();
                
-               if (ref.getMessageID() == id.longValue())
+               if (ref.getMessage().getMessageID() == id.longValue())
                {
                   liter.remove();
                   
@@ -598,7 +599,7 @@
 
       synchronized (refLock)
       {
-         messageRefs.addFirst(ref, ref.getPriority());
+         messageRefs.addFirst(ref, ref.getMessage().getPriority());
       }
                   
       if (trace) { log.trace(this + " added " + ref + " back into state"); }
@@ -748,17 +749,7 @@
       ref = ref.copy();
 
       try
-      {
-         if (ref.isReliable() && !recoverable)
-         {
-            // Reliable reference in a non recoverable channel. We handle it as a non reliable
-            // reference. It's important that we set it to non reliable otherwise if the channel
-            // pages and is non recoverable a reliable ref will be paged in the database as reliable
-            // which makes them hard to remove on server restart. If we always page them as
-            // unreliable then it is easy to remove them.
-            ref.setReliable(false);               
-         }
-         
+      {  
          if (tx == null)
          {
             // Don't even attempt synchronous delivery for a reliable message when we have an
@@ -766,14 +757,14 @@
             // into the situation where we need to reliably store an active delivery of a reliable
             // message, which in these conditions cannot be done.
 
-            if (ref.isReliable() && !acceptReliableMessages)
+            if (ref.getMessage().isReliable() && !acceptReliableMessages)
             {
                log.error("Cannot handle reliable message " + ref +
                   " because the channel has a non-recoverable state!");
                return null;
             }
         
-            if (persist && ref.isReliable() && recoverable)
+            if (persist && ref.getMessage().isReliable() && recoverable)
             {
                // Reliable message in a recoverable state - also add to db
                if (trace) { log.trace(this + " adding " + ref + " to database non-transactionally"); }
@@ -805,7 +796,7 @@
          {
             if (trace) { log.trace(this + " adding " + ref + " to state " + (tx == null ? "non-transactionally" : "in transaction: " + tx)); }
 
-            if (ref.isReliable() && !acceptReliableMessages)
+            if (ref.getMessage().isReliable() && !acceptReliableMessages)
             {
                // this transaction has no chance to succeed, since a reliable
                // message cannot be
@@ -823,7 +814,7 @@
                if (trace) { log.trace(this + " added transactionally " + ref + " in memory"); }
             }
 
-            if (persist && ref.isReliable() && recoverable)
+            if (persist && ref.getMessage().isReliable() && recoverable)
             {
                // Reliable message in a recoverable state - also add to db
                if (trace) { log.trace(this + " adding " + ref + (tx == null ? " to database non-transactionally" : " in transaction: " + tx)); }
@@ -880,7 +871,7 @@
    {   
       if (tx == null)
       {                  
-         if (persist && recoverable && d.getReference().isReliable())
+         if (persist && recoverable && d.getReference().getMessage().isReliable())
          {
             pm.removeReference(channelID, d.getReference(), null);
          }
@@ -895,7 +886,7 @@
    
          if (trace) { log.trace(this + " added " + d + " to memory on transaction " + tx); }
    
-         if (recoverable && d.getReference().isReliable())
+         if (recoverable && d.getReference().getMessage().isReliable())
          {
             pm.removeReference(channelID, d.getReference(), tx);
          }
@@ -933,13 +924,13 @@
    
    protected void addReferenceInMemory(MessageReference ref) throws Exception
    {
-      if (ref.isReliable() && !acceptReliableMessages)
+      if (ref.getMessage().isReliable() && !acceptReliableMessages)
       {
          throw new IllegalStateException("Reliable reference " + ref +
                                          " cannot be added to non-recoverable state");
       }
 
-      messageRefs.addLast(ref, ref.getPriority());
+      messageRefs.addLast(ref, ref.getMessage().getPriority());
 
       if (trace){ log.trace(this + " added " + ref + " non-transactionally in memory"); }      
    }    

Modified: trunk/src/main/org/jboss/messaging/core/Delivery.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/Delivery.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/Delivery.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,6 +21,7 @@
   */
 package org.jboss.messaging.core;
 
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**

Modified: trunk/src/main/org/jboss/messaging/core/Filter.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/Filter.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/Filter.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,6 +21,8 @@
   */
 package org.jboss.messaging.core;
 
+import org.jboss.messaging.core.message.Message;
+
 /**
  * A filter encapsulates the logic of whether to accept a message or not. Filters are used when
  * browsing to restrict the messages browsed, or when routing messages.
@@ -34,11 +36,11 @@
 public interface Filter
 {
 	/**
-	 * Tests whether the routable should be accepted.
+	 * Tests whether the message should be accepted.
     *
-	 * @return true if the Filter accepts the routable - i.e. let's it pass.
+	 * @return true if the Filter accepts the message - i.e. let's it pass.
 	 */
-	boolean accept(Routable routable);
+	boolean accept(Message message);
    
    String getFilterString();
 }

Deleted: trunk/src/main/org/jboss/messaging/core/Message.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/Message.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/Message.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,51 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.messaging.core;
-
-import java.io.Serializable;
-
-/**
- * A message is a routable instance that has a payload. The payload is opaque to the messaging
- * system.
- *
- * When implementing this interface, make sure you override equals() and hashCode() such that two
- * Message instances with equals IDs are equal.
- *
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox"jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public interface Message extends Routable
-{
-   Serializable getPayload();
-   
-   byte[] getPayloadAsByteArray();
-    
-   boolean isPersisted();
-   
-   void setPersisted(boolean persisted);
-   
-   byte getType();
-   
-}

Deleted: trunk/src/main/org/jboss/messaging/core/MessageReference.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/MessageReference.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/MessageReference.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,44 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.messaging.core;
-
-/**
- * A "lightweight" message representative.
- *
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public interface MessageReference extends Routable
-{
-   int getInMemoryChannelCount();
-
-   long getPagingOrder();
-   
-   void setPagingOrder(long order);   
-   
-   void releaseMemoryReference();
-   
-   MessageReference copy();
-}

Modified: trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,6 +28,8 @@
 import java.util.Map;
 
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager.InitialLoadInfo;
@@ -296,8 +298,9 @@
   
       // Must flush the down cache first
       flushDownCache();
-           List refInfos = pm.getPagedReferenceInfos(channelID, firstPagingOrder, number);      
       
+      List refInfos = pm.getPagedReferenceInfos(channelID, firstPagingOrder, number);      
+      
       Map refMap = processReferences(refInfos);
 
       boolean loadedReliable = false;
@@ -313,7 +316,7 @@
          
          MessageReference ref = addFromRefInfo(info, refMap);
          
-         if (recoverable && ref.isReliable())
+         if (recoverable && ref.getMessage().isReliable())
          {
             loadedReliable = true;
          }
@@ -340,7 +343,7 @@
          // the store otherwise they may get loaded again, the next time we do a load
          // We can't delete them since they're reliable and haven't been acked yet
             
-         pm.updateReliableReferencesNotPagedInRange(channelID, firstPagingOrder, firstPagingOrder + number - 1, number - unreliableNumber);
+         pm.updateReferencesNotPagedInRange(channelID, firstPagingOrder, firstPagingOrder + number - 1, number - unreliableNumber);
       }
             
       firstPagingOrder += number;
@@ -420,7 +423,7 @@
    {     
       if (paging)
       {
-         if (ref.isReliable() && !acceptReliableMessages)
+         if (ref.getMessage().isReliable() && !acceptReliableMessages)
          {
             throw new IllegalStateException("Reliable reference " + ref +
                                             " cannot be added to non-recoverable state");
@@ -499,7 +502,7 @@
       {
          MessageReference ref = (MessageReference) iter.next();
            
-         if (ref.isReliable() && recoverable)
+         if (ref.getMessage().isReliable() && recoverable)
          {
             toUpdate.add(ref);
          }
@@ -549,18 +552,10 @@
       
       ref.setScheduledDeliveryTime(info.getScheduledDelivery());
       
-      //We ignore the reliable field from the message - this is because reliable might be true on the message
-      //but this is a non recoverable state
-      
-      //TODO - Really the message shouldn't have a reliable field at all,
-      //Reliability is an attribute of the message reference, not the message
-      
-      ref.setReliable(info.isReliable());
-            
       //Schedule the delivery if necessary, or just add to the in memory queue
       if (!checkAndSchedule(ref))
       {
-         messageRefs.addLast(ref, ref.getPriority());
+         messageRefs.addLast(ref, ref.getMessage().getPriority());
       }
       
       return ref;

Modified: trunk/src/main/org/jboss/messaging/core/Receiver.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/Receiver.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/Receiver.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,6 +21,7 @@
   */
 package org.jboss.messaging.core;
 
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**

Deleted: trunk/src/main/org/jboss/messaging/core/Routable.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/Routable.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/Routable.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,146 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.messaging.core;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.Set;
-
-import org.jboss.messaging.util.Streamable;
-
-/**
- * An atomic, self containted unit of data that is being routed by the messaging system.
- *
- * Each routable maintains a set of headers. Various messaging components can attach or remove
- * headers, primarily for message flow management purposes.
- *
- * @see org.jboss.messaging.core.Message
- * @see org.jboss.messaging.core.MessageReference
- *
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public interface Routable extends Streamable
-{
-   static final String REMOTE_ROUTABLE = "REMOTE_ROUTABLE";
-   static final String REPLICATOR_ID = "REPLICATOR_ID";
-   static final String COLLECTOR_ID = "COLLECTOR_ID";
-
-   static final String FAILED_NODE_ID = "FAILED_NODE_ID";
-
-   long getMessageID();
-
-   /**
-    * If it is a Message instance, then it returns itself, otherwise it will return the Message
-    * corresponding to this MessageReference.
-    */
-   Message getMessage(); // TODO 55 Shouldn't this method be on MessageReference interface rather than this interface??
-
-   boolean isReference();
-
-   /**
-    * @return true if the delivery must be guaranteed for this routable, false othewise.
-    */
-   boolean isReliable();
-   
-   void setReliable(boolean reliable);
-
-   /**
-    * @return the time (in GMT milliseconds) when this routable expires and must be removed
-    *         from the system. A zero value means this routable never expires.
-    */
-   long getExpiration();
-
-   boolean isExpired();
-   
-   void setExpiration(long expiration);
-   
-   
-   /**
-    * 
-    * @return The time in the future that delivery will be delayed until, or zero if
-    * no scheduled delivery will occur
-    */
-   long getScheduledDeliveryTime();
-   
-   void setScheduledDeliveryTime(long scheduledDeliveryTime);
-   
-
-   /**
-    * @return the time (in GMT milliseconds) when this routable was delivered to the provider.
-    */
-   long getTimestamp();
-   
-   byte getPriority();
-   
-   void setPriority(byte priority);
-
-   /**
-    * @return the number of times delivery has been attempted for this routable
-    */
-   int getDeliveryCount();
-   
-   void setDeliveryCount(int deliveryCount);
-   
-   /**
-    * Binds a header. If the header map previously contained a mapping for this name, the old value
-    * is replaced by the specified value.
-    *
-    * @return the value associated with the name or null if there is no mapping for the name. A null
-    *         can also indicate that the header map previously associated null with the specified
-    *         name.
-    */
-   Serializable putHeader(String name, Serializable value);
-
-   /**
-    * Returns the value corresponding to the header name. Returns null if the map contains no
-    * mapping for the name. A return value of null does not necessarily indicate that the map
-    * contains no mapping for the name; it's also possible that the map explicitly maps the name to
-    * null. The containsHeader() operation may be used to distinguish these two cases.
-    *
-    * @return the value associated with the header, or null if there is no mapping for the header.
-    */
-   Serializable getHeader(String name);
-
-   /**
-    * Removes the header.
-    *
-    * @return previous value associated with the header, or null if there was no mapping.
-    */
-   Serializable removeHeader(String name);
-
-   /**
-    * Returns true if the Routable contains the specified header.
-    */
-   boolean containsHeader(String name);
-
-   /**
-    * Returns a copy of the header name set.
-    */
-   Set getHeaderNames();
-   
-   Map getHeaders();
-
-}

Modified: trunk/src/main/org/jboss/messaging/core/SimpleDelivery.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/SimpleDelivery.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/SimpleDelivery.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -22,6 +22,7 @@
 package org.jboss.messaging.core;
 
 import org.jboss.logging.Logger;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**

Modified: trunk/src/main/org/jboss/messaging/core/local/FirstReceiverPointToPointRouter.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/local/FirstReceiverPointToPointRouter.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/local/FirstReceiverPointToPointRouter.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,10 +28,10 @@
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.Router;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**

Modified: trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,10 +25,10 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.PagingChannelSupport;
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
@@ -123,7 +123,7 @@
    
    public Delivery handle(DeliveryObserver sender, MessageReference ref, Transaction tx)
    {
-      if (filter == null || filter.accept(ref))
+      if (filter == null || filter.accept(ref.getMessage()))
       {
          return super.handle(sender, ref, tx);
       }

Modified: trunk/src/main/org/jboss/messaging/core/local/RoundRobinPointToPointRouter.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/local/RoundRobinPointToPointRouter.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/local/RoundRobinPointToPointRouter.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -27,10 +27,10 @@
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.Router;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**

Modified: trunk/src/main/org/jboss/messaging/core/message/CoreMessage.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/CoreMessage.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/message/CoreMessage.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -46,7 +46,7 @@
    public CoreMessage()
    {
    }
-
+   
    public CoreMessage(long messageID,
                       boolean reliable,
                       long expiration,
@@ -55,7 +55,7 @@
                       Map headers,
                       byte[] payload)
    {
-      super(messageID, reliable, expiration, timestamp, priority, 0, 0, headers, payload);
+      super(messageID, reliable, expiration, timestamp, priority, headers, payload);
    }
 
    // Public --------------------------------------------------------

Copied: trunk/src/main/org/jboss/messaging/core/message/Message.java (from rev 2182, trunk/src/main/org/jboss/messaging/core/Message.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/Message.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/message/Message.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -0,0 +1,123 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.messaging.core.message;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.messaging.util.Streamable;
+
+/**
+ * A message is a routable instance that has a payload. The payload is opaque to the messaging
+ * system.
+ *
+ * When implementing this interface, make sure you override equals() and hashCode() such that two
+ * Message instances with equals IDs are equal.
+ *
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @author <a href="mailto:tim.fox"jboss.com">Tim Fox</a>
+ * @version <tt>$Revision$</tt>
+ *
+ * $Id$
+ */
+public interface Message extends Streamable
+{
+   static final String FAILED_NODE_ID = "FAILED_NODE_ID";
+
+   long getMessageID();
+
+   /**
+    * @return true if the delivery must be guaranteed for this routable, false otherwise.
+    */
+   boolean isReliable();
+   
+   /**
+    * @return the time (in GMT milliseconds) when this routable expires and must be removed
+    *         from the system. A zero value means this routable never expires.
+    */
+   long getExpiration();
+
+   boolean isExpired();
+   
+   void setExpiration(long expiration);
+   
+   /**
+    * @return the time (in GMT milliseconds) when this routable was delivered to the provider.
+    */
+   long getTimestamp();
+   
+   byte getPriority();
+   
+   void setPriority(byte priority);
+
+   /**
+    * Binds a header. If the header map previously contained a mapping for this name, the old value
+    * is replaced by the specified value.
+    *
+    * @return the value associated with the name or null if there is no mapping for the name. A null
+    *         can also indicate that the header map previously associated null with the specified
+    *         name.
+    */
+   Object putHeader(String name, Object value);
+
+   /**
+    * Returns the value corresponding to the header name. Returns null if the map contains no
+    * mapping for the name. A return value of null does not necessarily indicate that the map
+    * contains no mapping for the name; it's also possible that the map explicitly maps the name to
+    * null. The containsHeader() operation may be used to distinguish these two cases.
+    *
+    * @return the value associated with the header, or null if there is no mapping for the header.
+    */
+   Object getHeader(String name);
+
+   /**
+    * Removes the header.
+    *
+    * @return previous value associated with the header, or null if there was no mapping.
+    */
+   Object removeHeader(String name);
+
+   /**
+    * Returns true if the Routable contains the specified header.
+    */
+   boolean containsHeader(String name);
+   
+   void setHeaders(Map headers);
+
+   /**
+    * Returns a copy of the header name set.
+    */
+   Set getHeaderNames();
+   
+   Map getHeaders();
+   
+   Object getPayload();
+   
+   byte[] getPayloadAsByteArray();
+    
+   boolean isPersisted();
+   
+   void setPersisted(boolean persisted);
+   
+   byte getType();
+   
+}

Modified: trunk/src/main/org/jboss/messaging/core/message/MessageFactory.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/MessageFactory.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/message/MessageFactory.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,17 +21,14 @@
   */
 package org.jboss.messaging.core.message;
 
-import java.util.HashMap;
 import java.util.Map;
 
-import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.message.JBossBytesMessage;
 import org.jboss.jms.message.JBossMapMessage;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.jms.message.JBossObjectMessage;
 import org.jboss.jms.message.JBossStreamMessage;
 import org.jboss.jms.message.JBossTextMessage;
-import org.jboss.messaging.core.Message;
 
 /**
  * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
@@ -50,34 +47,38 @@
    {
       Message m = null;
       
-      if (type == JBossMessage.TYPE)
+      if (type == JBossMessage.TYPE) //1
       {
          m = new JBossMessage();
       }
-      else if (type == JBossObjectMessage.TYPE)
+      else if (type == JBossObjectMessage.TYPE) //2
       {
          m = new JBossObjectMessage();
       }
-      else if (type == JBossTextMessage.TYPE)
+      else if (type == JBossTextMessage.TYPE)  //3
       {
          m = new JBossTextMessage();
       }
-      else if (type == JBossBytesMessage.TYPE)
+      else if (type == JBossBytesMessage.TYPE)  //4
       {
          m = new JBossBytesMessage();
       }
-      else if (type == JBossMapMessage.TYPE)
+      else if (type == JBossMapMessage.TYPE)  //5
       {
          m = new JBossMapMessage();
       }
-      else if (type == JBossStreamMessage.TYPE)
+      else if (type == JBossStreamMessage.TYPE) //6
       {
          m = new JBossStreamMessage();
       }
-      else if (type == CoreMessage.TYPE)
+      else if (type == CoreMessage.TYPE) //127
       {
          m = new CoreMessage();
       }
+      else
+      {
+         throw new IllegalArgumentException("Invalid type " + type);
+      }
      
       return m;
    }
@@ -90,16 +91,9 @@
                                        long expiration, 
                                        long timestamp,
                                        byte priority,
-                                       Map coreHeaders,
-                                       byte[] payloadAsByteArray,                                                                                    
-                                       byte type,
-                                       String jmsType,                                       
-                                       String correlationID,
-                                       byte[] correlationIDBytes,
-                                       JBossDestination destination,
-                                       JBossDestination replyTo, 
-                                       long scheduledDeliveryTime,
-                                       HashMap jmsProperties)
+                                       Map headers,
+                                       byte[] payload,                                                                                    
+                                       byte type)
 
    {
       Message m = null;
@@ -108,49 +102,43 @@
       {
          case JBossMessage.TYPE:
          {
-            m = new JBossMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders,
-                     payloadAsByteArray, jmsType, correlationID, correlationIDBytes,
-                     destination, replyTo, jmsProperties);
+            m = new JBossMessage(messageID, reliable, expiration, timestamp, priority, headers,
+                     payload);
             break;
          }
          case JBossObjectMessage.TYPE:
          {
-            m = new JBossObjectMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders,
-                     payloadAsByteArray, jmsType, correlationID, correlationIDBytes,
-                     destination, replyTo, jmsProperties);
+            m = new JBossObjectMessage(messageID, reliable, expiration, timestamp, priority, headers,
+                     payload);
             break;
          }
          case JBossTextMessage.TYPE:
          {
-            m = new JBossTextMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders,
-                     payloadAsByteArray, jmsType, correlationID, correlationIDBytes,
-                     destination, replyTo, jmsProperties);
+            m = new JBossTextMessage(messageID, reliable, expiration, timestamp, priority, headers,
+                     payload);
             break;
          }
          case JBossBytesMessage.TYPE:
          {
-            m = new JBossBytesMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders,
-                     payloadAsByteArray, jmsType, correlationID, correlationIDBytes,
-                     destination, replyTo, jmsProperties);
+            m = new JBossBytesMessage(messageID, reliable, expiration, timestamp, priority, headers,
+                     payload);
             break;
          }
          case JBossMapMessage.TYPE:
          {
-            m = new JBossMapMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders,
-                     payloadAsByteArray, jmsType, correlationID, correlationIDBytes,
-                     destination, replyTo, jmsProperties);
+            m = new JBossMapMessage(messageID, reliable, expiration, timestamp, priority, headers,
+                     payload);
             break;
          }
          case JBossStreamMessage.TYPE:
          {
-            m = new JBossStreamMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders,
-                     payloadAsByteArray, jmsType, correlationID, correlationIDBytes,
-                     destination, replyTo, jmsProperties);
+            m = new JBossStreamMessage(messageID, reliable, expiration, timestamp, priority, headers,
+                     payload);
             break;
          }
          case CoreMessage.TYPE:
          {
-            m = new CoreMessage(messageID, reliable, expiration, timestamp, priority, coreHeaders, payloadAsByteArray);
+            m = new CoreMessage(messageID, reliable, expiration, timestamp, priority, headers, payload);
             break;
          }
          default:

Copied: trunk/src/main/org/jboss/messaging/core/message/MessageHolder.java (from rev 2182, trunk/src/main/org/jboss/messaging/core/plugin/MessageHolder.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/MessageHolder.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/message/MessageHolder.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -0,0 +1,81 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+
+package org.jboss.messaging.core.message;
+
+
+/**
+ * 
+ * A MessageHolder.
+ * 
+ * @author <a href="tim.fox at jboss.com">Tim Fox</a>
+ * @version <tt>$Revision$</tt>
+ *
+ * $Id$
+ */
+class MessageHolder
+{
+   /*
+    * The number of channels *currently in memory* that hold a reference to the message
+    * We need this so we know when to evict the message from the store (when it reaches zero)
+    * Note that we also maintain a persistent channel count on the message itself.
+    * This is the total number of channels whether loaded in memory or not that hold a reference to the
+    * message and is needed to know when it is safe to remove the message from the db
+    */
+   private int inMemoryChannelCount;
+   
+   private Message msg;
+   
+   private SimpleMessageStore ms;
+   
+   public MessageHolder(Message msg, SimpleMessageStore ms)
+   {
+      this.msg = msg;
+      this.ms = ms;
+   }    
+   
+   public synchronized void incrementInMemoryChannelCount()
+   {            
+      inMemoryChannelCount++;
+   }
+   
+   public synchronized void decrementInMemoryChannelCount()
+   {
+      inMemoryChannelCount--;      
+
+      if (inMemoryChannelCount == 0)
+      {
+         // can remove the message from the message store
+         ms.forgetMessage(msg.getMessageID());
+      }
+   }
+   
+   public synchronized int getInMemoryChannelCount()
+   {
+      return inMemoryChannelCount;
+   }
+ 
+   public Message getMessage()
+   {
+      return msg;
+   }   
+}

Copied: trunk/src/main/org/jboss/messaging/core/message/MessageReference.java (from rev 2182, trunk/src/main/org/jboss/messaging/core/MessageReference.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/MessageReference.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/message/MessageReference.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -0,0 +1,65 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.messaging.core.message;
+
+
+/**
+ * A reference to a message.
+ * 
+ * 
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @version <tt>$Revision$</tt>
+ *
+ * $Id$
+ */
+public interface MessageReference
+{      
+   long getPagingOrder();
+   
+   void setPagingOrder(long order);   
+   
+   void releaseMemoryReference();
+   
+   MessageReference copy();
+   
+   Message getMessage();
+   
+   /**
+    * 
+    * @return The time in the future that delivery will be delayed until, or zero if
+    * no scheduled delivery will occur
+    */
+   long getScheduledDeliveryTime();
+   
+   void setScheduledDeliveryTime(long scheduledDeliveryTime);
+   
+   /**
+    * @return the number of times delivery has been attempted for this routable
+    */
+   int getDeliveryCount();
+   
+   void setDeliveryCount(int deliveryCount);
+   
+   
+
+}

Modified: trunk/src/main/org/jboss/messaging/core/message/MessageSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/MessageSupport.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/message/MessageSupport.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -26,9 +26,11 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
-import org.jboss.messaging.core.Message;
+import org.jboss.logging.Logger;
 import org.jboss.messaging.util.StreamUtils;
 
 
@@ -41,14 +43,31 @@
  *
  * $Id$
  */
-public abstract class MessageSupport extends RoutableSupport implements Message
+public abstract class MessageSupport implements Message
 {
    // Constants -----------------------------------------------------
+   
+   private static final Logger log = Logger.getLogger(MessageSupport.class);   
     
    // Attributes ----------------------------------------------------
    
+   private boolean trace = log.isTraceEnabled();
+   
+   protected long messageID;
+   
+   protected boolean reliable;
+   
+   /** GMT milliseconds at which this message expires. 0 means never expires **/
+   protected long expiration;
+   
+   protected long timestamp;
+   
+   protected Map headers;
+   
+   protected byte priority;
+   
    // Must be hidden from subclasses
-   private transient Serializable payload;
+   private transient Object payload;
    
    // Must be hidden from subclasses
    private byte[] payloadAsByteArray;
@@ -57,84 +76,138 @@
    
    // Constructors --------------------------------------------------
 
-   /**
-    * Required by externalization.
+   /*
+    * Construct a message for deserialization or streaming
     */
    public MessageSupport()
    {
    }
 
-   /**
-    * @param messageID
+   /*
+    * Construct a message using default values
     */
    public MessageSupport(long messageID)
    {
-      super(messageID);
+      this(messageID, false, 0, System.currentTimeMillis(), (byte)4, null, null);
    }
 
-   public MessageSupport(long messageID, Serializable payload)
+   /*
+    * Construct a message using specified values
+    */
+   public MessageSupport(long messageID,
+                         boolean reliable,
+                         long expiration,
+                         long timestamp,
+                         byte priority,
+                         Map headers,
+                         byte[] payloadAsByteArray)                         
    {
-      super(messageID);
-      this.payload = payload;
+      this.messageID = messageID;
+      this.reliable = reliable;
+      this.expiration = expiration;
+      this.timestamp = timestamp;
+      this.priority = priority;
+      if (headers == null)
+      {
+         this.headers = new HashMap();
+      }
+      else
+      {
+         this.headers = new HashMap(headers);
+      }
+            
+      this.payloadAsByteArray = payloadAsByteArray;
    }
-   
-   public MessageSupport(long messageID, boolean reliable, Serializable payload)
+
+   /*
+    * Copy constructor
+    * 
+    * Does a shallow copy of the payload
+    */
+   protected MessageSupport(MessageSupport that)
    {
-      this(messageID, reliable, Long.MAX_VALUE, payload);
+      this.messageID = that.messageID;
+      this.reliable = that.reliable;
+      this.expiration = that.expiration;
+      this.timestamp = that.timestamp;
+      this.headers = new HashMap(that.headers);
+      this.priority = that.priority;  
+      this.payload = that.payload;
+      this.payloadAsByteArray = that.payloadAsByteArray;
    }
 
-   public MessageSupport(long messageID, boolean reliable)
+   // Message implementation ----------------------------------------
+
+   public long getMessageID()
    {
-      this(messageID, reliable, Long.MAX_VALUE, null);
+      return messageID;
    }
 
-   public MessageSupport(long messageID, boolean reliable, long timeToLive)
+   public boolean isReliable()
    {
-      this(messageID, reliable, timeToLive, null);
+      return reliable;
    }
 
-   public MessageSupport(long messageID,
-                         boolean reliable,
-                         long timeToLive,
-                         Serializable payload)
+   public long getExpiration()
    {
-      super(messageID, reliable, timeToLive);
-      this.payload = payload;
+      return expiration;
    }
+   
+   public void setExpiration(long expiration)
+   {
+      this.expiration = expiration;
+   }
 
-   /*
-    * This constructor is used to create a message from persistent storage
-    */
-   public MessageSupport(long messageID,
-                         boolean reliable,
-                         long expiration,
-                         long timestamp,
-                         byte priority,
-                         int deliveryCount,  
-                         long scheduledDeliveryTime,
-                         Map headers,
-                         byte[] payloadAsByteArray)                         
+   public long getTimestamp()
    {
-      super(messageID, reliable, expiration, timestamp, priority, deliveryCount, scheduledDeliveryTime, headers);
-      this.payloadAsByteArray = payloadAsByteArray;
+      return timestamp;
    }
+   
+   public Object putHeader(String name, Object value)
+   {
+      return headers.put(name, value);
+   }
 
-   protected MessageSupport(MessageSupport that)
+   public Object getHeader(String name)
    {
-      super(that);
-      this.payload = that.payload;
-      this.payloadAsByteArray = that.payloadAsByteArray;
+      return headers.get(name);
    }
 
-   // Routable implementation ---------------------------------------
+   public Object removeHeader(String name)
+   {
+      return headers.remove(name);
+   }
 
-   public Message getMessage()
+   public boolean containsHeader(String name)
    {
-      return this;
+      return headers.containsKey(name);
    }
 
-   // Message implementation ----------------------------------------
-
+   public Set getHeaderNames()
+   {
+      return headers.keySet();
+   }
+   
+   public Map getHeaders()
+   {
+      return headers;
+   }
+   
+   public void setHeaders(Map headers)
+   {
+      this.headers = headers;
+   }
+   
+   public byte getPriority()
+   {
+      return priority;
+   }
+   
+   public void setPriority(byte priority)
+   {
+      this.priority = priority;
+   }
+   
    public boolean isReference()
    {
       return false;
@@ -181,7 +254,7 @@
     * Warning! Calling getPayload will cause the payload to be deserialized so should not be called
     *          on the server.
     */
-   public synchronized Serializable getPayload()
+   public synchronized Object getPayload()
    {
       if (payload != null)
       {
@@ -235,6 +308,23 @@
       this.persisted = persisted;
    }
    
+   public boolean isExpired()
+   {
+      if (expiration == 0)
+      {
+         return false;
+      }
+      long overtime = System.currentTimeMillis() - expiration;
+      if (overtime >= 0)
+      {
+         // discard it
+         if (trace) { log.trace(this + " expired by " + overtime + " ms"); }
+         
+         return true;
+      }
+      return false;
+   }
+   
 
    // Public --------------------------------------------------------
 
@@ -252,15 +342,6 @@
       return that.messageID == this.messageID;
    }
 
-   /**
-    * @return a reference of the internal header map.
-    */
-   public Map getHeaders()
-   {
-      return headers;
-   }
-
-
    public int hashCode()
    {
       return (int)((this.messageID >>> 32) ^ this.messageID);
@@ -271,17 +352,30 @@
       return "M["+messageID+"]";
    }
    
+   
+   
    // Streamable implementation ---------------------------------
-
+   
    public void write(DataOutputStream out) throws Exception
    {
-      super.write(out);
+      out.writeLong(messageID);
       
+      out.writeBoolean(reliable);
+      
+      out.writeLong(expiration);
+      
+      out.writeLong(timestamp);
+      
+      StreamUtils.writeMap(out, headers, true);
+      
+      out.writeByte(priority);
+      
       byte[] bytes = getPayloadAsByteArray();
             
       if (bytes != null)
       {
          out.writeInt(bytes.length);
+         
          out.write(bytes);
       }
       else
@@ -292,8 +386,18 @@
 
    public void read(DataInputStream in) throws Exception
    {
-      super.read(in);
+      messageID = in.readLong();
+          
+      reliable = in.readBoolean();
       
+      expiration = in.readLong();
+      
+      timestamp = in.readLong();
+      
+      headers = StreamUtils.readMap(in, true);
+
+      priority = in.readByte();
+      
       int length = in.readInt();
       
       if (length == 0)
@@ -304,6 +408,7 @@
       else
       {
          payloadAsByteArray = new byte[length];
+         
          in.readFully(payloadAsByteArray);
       }     
    }
@@ -316,7 +421,7 @@
     * Override this if you want more sophisticated payload externalization.
     * @throws Exception TODO
     */
-   protected void writePayload(DataOutputStream out, Serializable thePayload) throws Exception
+   protected void writePayload(DataOutputStream out, Object thePayload) throws Exception
    {
       StreamUtils.writeObject(out, thePayload, true, true);
    }
@@ -325,10 +430,10 @@
     * Override this if you want more sophisticated payload externalization.
     * @throws Exception TODO
     */
-   protected Serializable readPayload(DataInputStream in, int length)
+   protected Object readPayload(DataInputStream in, int length)
       throws Exception
    {
-      return (Serializable)StreamUtils.readObject(in, true);
+      return StreamUtils.readObject(in, true);
    }
 
    /**

Deleted: trunk/src/main/org/jboss/messaging/core/message/RoutableSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/RoutableSupport.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/message/RoutableSupport.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,304 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.messaging.core.message;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Routable;
-import org.jboss.messaging.util.StreamUtils;
-
-/**
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public abstract class RoutableSupport implements Routable
-{
-   // Constants -----------------------------------------------------
-
-   private static final Logger log = Logger.getLogger(RoutableSupport.class);
-   
-   // Static --------------------------------------------------------
-         
-   // Attributes ----------------------------------------------------
-
-   private boolean trace = log.isTraceEnabled();
-   
-   protected long messageID;
-   protected boolean reliable;
-   /** GMT milliseconds at which this message expires. 0 means never expires **/
-   protected long expiration;
-   protected long timestamp;
-   protected Map headers;
-   protected byte priority;
-   protected int deliveryCount;   
-   protected long scheduledDeliveryTime;
-
-   // Constructors --------------------------------------------------
-
-   /**
-    * Required by externalization.
-    */
-   public RoutableSupport()
-   {
-   }
-
-   /**
-    * Constructs a generic Routable that is not reliable and does not expire.
-    */
-   public RoutableSupport(long messageID)
-   {
-      this(messageID, false, Long.MAX_VALUE);
-   }
-
-   /**
-    * Constructs a generic Routable that does not expire.
-    */
-   public RoutableSupport(long messageID, boolean reliable)
-   {
-      this(messageID, reliable, Long.MAX_VALUE);
-   }
-
-   public RoutableSupport(long messageID, boolean reliable, long timeToLive)
-   {
-      this(messageID,
-           reliable,
-           timeToLive == Long.MAX_VALUE ? 0 : System.currentTimeMillis() + timeToLive,
-           System.currentTimeMillis(),
-           (byte)4,        
-           0,
-           0,
-           null);
-   }
-
-   public RoutableSupport(long messageID,
-                          boolean reliable, 
-                          long expiration, 
-                          long timestamp,
-                          byte priority,
-                          int deliveryCount, 
-                          long scheduledDeliveryTime,
-                          Map headers)
-   {
-      this.messageID = messageID;
-      this.reliable = reliable;
-      this.expiration = expiration;
-      this.timestamp = timestamp;
-      this.priority = priority;
-      this.deliveryCount = deliveryCount;
-      this.scheduledDeliveryTime = scheduledDeliveryTime;
-      if (headers == null)
-      {
-         this.headers = new HashMap();
-      }
-      else
-      {
-         this.headers = new HashMap(headers);
-      }
-   }
-   
-   protected RoutableSupport(RoutableSupport other)
-   {
-      this.messageID = other.messageID;
-      this.reliable = other.reliable;
-      this.expiration = other.expiration;
-      this.timestamp = other.timestamp;
-      this.headers = new HashMap(other.headers);
-      this.deliveryCount = other.deliveryCount;
-      this.priority = other.priority;  
-      this.scheduledDeliveryTime = other.scheduledDeliveryTime;
-   }
-
-   // Routable implementation ---------------------------------------
-
-   public long getMessageID()
-   {
-      return messageID;
-   }
-
-   public boolean isReliable()
-   {
-      return reliable;
-   }
-
-   public long getExpiration()
-   {
-      return expiration;
-   }
-   
-   public void setExpiration(long expiration)
-   {
-      this.expiration = expiration;
-   }
-
-   public long getTimestamp()
-   {
-      return timestamp;
-   }
- 
-   public void setReliable(boolean reliable)
-   {
-      this.reliable = reliable;
-   }
-   
-   public int getDeliveryCount()
-   {
-      return deliveryCount;
-   }
-   
-   public void incrementDeliveryCount()
-   {
-      deliveryCount++;   
-   }
-   
-   public void decrementDeliveryCount()
-   {
-      deliveryCount--;
-   }
-   
-   public void setDeliveryCount(int deliveryCount)
-   {
-      this.deliveryCount = deliveryCount;
-   }
-
-   public Serializable putHeader(String name, Serializable value)
-   {
-      return (Serializable)headers.put(name, value);
-   }
-
-   public Serializable getHeader(String name)
-   {
-      return (Serializable)headers.get(name);
-   }
-
-   public Serializable removeHeader(String name)
-   {
-      return (Serializable)headers.remove(name);
-   }
-
-   public boolean containsHeader(String name)
-   {
-      return headers.containsKey(name);
-   }
-
-   public Set getHeaderNames()
-   {
-      return headers.keySet();
-   }
-   
-   public Map getHeaders()
-   {
-      return headers;
-   }
-   
-   public byte getPriority()
-   {
-      return priority;
-   }
-   
-   public void setPriority(byte priority)
-   {
-      this.priority = priority;
-   }
-   
-   public long getScheduledDeliveryTime()
-   {
-      return scheduledDeliveryTime;
-   }
-
-   public void setScheduledDeliveryTime(long scheduledDeliveryTime)
-   {
-      this.scheduledDeliveryTime = scheduledDeliveryTime;
-   }
-   
-   // Streamable implementation ---------------------------------
-   
-   public void write(DataOutputStream out) throws Exception
-   {      
-      out.writeLong(messageID);
-      out.writeBoolean(reliable);
-      out.writeLong(expiration);
-      out.writeLong(timestamp);
-      StreamUtils.writeMap(out, headers, true);
-      out.writeByte(priority);
-      out.writeInt(deliveryCount);
-      out.writeLong(scheduledDeliveryTime);
-   }
-
-   public void read(DataInputStream in) throws Exception
-   {     
-      messageID = in.readLong();
-      reliable = in.readBoolean();
-      expiration = in.readLong();
-      timestamp = in.readLong();
-      Map m = StreamUtils.readMap(in, true);
-      if (!(m instanceof HashMap))
-      {
-         headers =  new HashMap(m);
-      }
-      else
-      {
-         headers = (HashMap)m;
-      }
-      priority = in.readByte();
-      deliveryCount = in.readInt();
-      scheduledDeliveryTime = in.readLong();
-   }
-   
-   // Public --------------------------------------------------------
-
-   public boolean isExpired()
-   {
-      if (expiration == 0)
-      {
-         return false;
-      }
-      long overtime = System.currentTimeMillis() - expiration;
-      if (overtime >= 0)
-      {
-         // discard it
-         if (trace) { log.trace(this + " expired by " + overtime + " ms"); }
-         
-         return true;
-      }
-      return false;
-   }
-
-   public String toString()
-   {
-      StringBuffer sb = new StringBuffer("RoutableSupport[");
-      sb.append(messageID);
-      sb.append("]");
-      return sb.toString();
-   }
-
-   // Protected -------------------------------------------------------
- 
-}

Copied: trunk/src/main/org/jboss/messaging/core/message/SimpleMessageReference.java (from rev 2182, trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageReference.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/SimpleMessageReference.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/message/SimpleMessageReference.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -0,0 +1,181 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.messaging.core.message;
+
+import java.util.Map;
+
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.plugin.contract.MessageStore;
+
+/**
+ * A Simple MessageReference implementation.
+ * 
+ * Note that we do not need WeakReferences to message/holder objects since with the new
+ * lazy loading schema we guarantee that if a message ref is in memory - it's corresponding message is
+ * in memory too
+ *
+ * @author <a href="mailto:tim.fox at jboss.com>Tim Fox</a>
+ * @version <tt>1.3</tt>
+ *
+ * SimpleMessageReference.java,v 1.3 2006/02/23 17:45:57 timfox Exp
+ */
+public class SimpleMessageReference implements MessageReference
+{   
+   private static final Logger log = Logger.getLogger(SimpleMessageReference.class);
+   
+   // Attributes ----------------------------------------------------
+
+   private boolean trace = log.isTraceEnabled();
+   
+   protected transient MessageStore ms;
+   
+   private MessageHolder holder;
+   
+   private long pagingOrder = -1;
+   
+   private boolean released;
+      
+   private int deliveryCount;   
+   
+   private long scheduledDeliveryTime;
+   
+   
+   // Constructors --------------------------------------------------
+
+   /**
+    * Required by externalization.
+    */
+   public SimpleMessageReference()
+   {
+      if (trace) { log.trace("Creating using default constructor"); }
+   }
+
+   public SimpleMessageReference(SimpleMessageReference other)
+   {
+      this.ms = other.ms;
+      
+      this.holder = other.holder;
+      
+      this.pagingOrder = other.pagingOrder;
+      
+      this.released = other.released;
+      
+      this.deliveryCount = other.deliveryCount;
+      
+      this.scheduledDeliveryTime = other.scheduledDeliveryTime;            
+   }
+   
+   protected SimpleMessageReference(MessageHolder holder, MessageStore ms)
+   {
+      this.holder = holder;
+      
+      this.ms = ms;
+   }
+
+   // Message implementation ----------------------------------------
+
+   public boolean isReference()
+   {
+      return true;
+   }
+
+   // MessageReference implementation -------------------------------
+   
+   public int getDeliveryCount()
+   {
+      return deliveryCount;
+   }
+   
+   public void setDeliveryCount(int deliveryCount)
+   {
+      this.deliveryCount = deliveryCount;
+   }
+   
+   public long getScheduledDeliveryTime()
+   {
+      return scheduledDeliveryTime;
+   }
+
+   public void setScheduledDeliveryTime(long scheduledDeliveryTime)
+   {
+      this.scheduledDeliveryTime = scheduledDeliveryTime;
+   }
+      
+   public Message getMessage()
+   {
+      return holder.getMessage();
+   }         
+   
+   public void releaseMemoryReference()
+   {
+      if (released)
+      {
+         //Do nothing -
+         //It's possible releaseMemoryReference can be called more than once on a reference since it's
+         //allowable that acknowledge is called more than once for a delivery and each call will call this
+         //method - so we don't want to throw an exception
+         return;
+      }
+      holder.decrementInMemoryChannelCount();
+      
+      released = true;
+   }
+   
+   public int getInMemoryChannelCount()
+   {
+      return holder.getInMemoryChannelCount();
+   }
+  
+   public long getPagingOrder()
+   {
+      return pagingOrder;
+   }
+   
+   public void setPagingOrder(long order)
+   {
+      this.pagingOrder = order;
+   }
+   
+   public MessageReference copy()
+   {
+      SimpleMessageReference ref = new SimpleMessageReference(this);
+      
+      ref.holder.incrementInMemoryChannelCount();
+      
+      return ref;
+   }
+   
+   // Public --------------------------------------------------------
+
+   public String toString()
+   {
+      return "Reference[" + getMessage().getMessageID() + "]:" + (getMessage().isReliable() ? "RELIABLE" : "NON-RELIABLE");
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------   
+   
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}
\ No newline at end of file

Copied: trunk/src/main/org/jboss/messaging/core/message/SimpleMessageStore.java (from rev 2182, trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageStore.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/SimpleMessageStore.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/message/SimpleMessageStore.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -0,0 +1,173 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.messaging.core.message;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.plugin.contract.MessageStore;
+
+/**
+ * A MessageStore implementation.
+ * 
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @version <tt>$Revision$</tt>
+ *
+ * $Id$
+ */
+public class SimpleMessageStore implements MessageStore
+{
+   // Constants -----------------------------------------------------
+
+   private static final Logger log = Logger.getLogger(SimpleMessageStore.class);
+
+   // Static --------------------------------------------------------
+   
+   // Attributes ----------------------------------------------------
+   
+   private boolean trace = log.isTraceEnabled();
+ 
+   // <messageID - MessageHolder>
+   private Map messages;
+
+   // Constructors --------------------------------------------------
+
+   public SimpleMessageStore()
+   {  
+      messages = new HashMap();
+
+      log.debug(this + " initialized");
+   }
+
+   // MessageStore implementation ---------------------------
+
+   public Object getInstance()
+   {
+      return this;
+   }
+
+   // TODO If we can assume that the message is not known to the store before
+   // (true when sending messages)
+   // Then we can avoid synchronizing on this and use a ConcurrentHashmap
+   // Which will give us much better concurrency for many threads
+   public MessageReference reference(Message m)
+   {
+      MessageHolder holder;
+      
+      synchronized (this)
+      {         
+         holder = (MessageHolder)messages.get(new Long(m.getMessageID()));
+         
+         if (holder == null)
+         {      
+            holder = addMessage(m);
+         }
+      }
+      holder.incrementInMemoryChannelCount();
+      
+      MessageReference ref = new SimpleMessageReference(holder, this);
+      
+      if (trace) { log.trace(this + " generated " + ref + " for " + m); }
+      
+      return ref;
+   }
+
+   public MessageReference reference(long messageID)
+   {
+      MessageHolder holder;
+      
+      synchronized (this)
+      {
+         holder = (MessageHolder)messages.get(new Long(messageID));         
+      }
+      
+      if (holder == null)
+      {
+         return null;
+      }
+       
+      MessageReference ref = new SimpleMessageReference(holder, this);
+      
+      if (trace) { log.trace(this + " generates " + ref + " for " + messageID); }
+      
+      holder.incrementInMemoryChannelCount();
+      
+      return ref;      
+   }
+   
+
+   public boolean forgetMessage(long messageID)
+   {
+      return messages.remove(new Long(messageID)) != null;
+   }
+   
+   public int size()
+   {
+      return messages.size();
+   }
+   
+   public List messageIds()
+   {
+      return new ArrayList(messages.keySet());
+   }
+   
+   // MessagingComponent implementation --------------------------------
+   
+   public void start() throws Exception
+   {
+      //NOOP
+   }
+   
+   public void stop() throws Exception
+   {
+      //NOOP
+   }
+
+   // Public --------------------------------------------------------
+   
+   public String toString()
+   {
+      return "MemoryStore[" + System.identityHashCode(this) + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+   
+   protected MessageHolder addMessage(Message m)
+   {
+      MessageHolder holder = new MessageHolder(m, this);
+      
+      messages.put(new Long(m.getMessageID()), holder);
+      
+      return holder;
+   }
+   
+   // Private -------------------------------------------------------
+   
+   // Inner classes -------------------------------------------------   
+      
+}

Modified: trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -49,21 +49,16 @@
 import javax.transaction.TransactionManager;
 import javax.transaction.xa.Xid;
 
-import org.jboss.jms.destination.JBossDestination;
-import org.jboss.jms.destination.JBossQueue;
-import org.jboss.jms.destination.JBossTopic;
-import org.jboss.jms.message.JBossMessage;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
-import org.jboss.messaging.core.message.CoreMessage;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageFactory;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.message.MessageSupport;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
+import org.jboss.messaging.core.tx.MessagingXid;
 import org.jboss.messaging.core.tx.PreparedTxInfo;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TxCallback;
-import org.jboss.messaging.core.tx.MessagingXid;
 import org.jboss.messaging.util.JDBCUtil;
 import org.jboss.messaging.util.StreamUtils;
 import org.jboss.messaging.util.Util;
@@ -158,10 +153,7 @@
          }
          wrap.end();
       }
-        
-      //We can't remnove unreliable data since it might introduce holes into the paging order
-      //removeUnreliableMessageData();
-         
+             
       log.debug(this + " started");
    }
    
@@ -177,13 +169,13 @@
    
    public List getMessageChannelPairRefsForTx(long transactionId) throws Exception
    {
-      String sql = this.getSQLStatement("SELECT_MESSAGEID_FOR_REF");
+      String sql = this.getSQLStatement("SELECT_MESSAGE_ID_FOR_REF");
       return getMessageChannelPair(sql, transactionId);
    }
    
    public List getMessageChannelPairAcksForTx(long transactionId) throws Exception
    {
-      String sql = this.getSQLStatement("SELECT_MESSAGEID_FOR_ACK");
+      String sql = this.getSQLStatement("SELECT_MESSAGE_ID_FOR_ACK");
       return getMessageChannelPair(sql, transactionId);
    }
    
@@ -425,7 +417,7 @@
                   numParams = size % maxParams;
                }
                StringBuffer buff = new StringBuffer(getSQLStatement("LOAD_MESSAGES"));
-               buff.append(" WHERE ").append(getSQLStatement("MESSAGEID_COLUMN")).append(" IN (");
+               buff.append(" WHERE ").append(getSQLStatement("MESSAGE_ID_COLUMN")).append(" IN (");
                for (int i = 0; i < numParams; i++)
                {
                   buff.append("?");
@@ -454,83 +446,27 @@
                rs = ps.executeQuery();
                
                while (rs.next())
-               {
-                  
-//                  "SELECT MESSAGEID, RELIABLE, EXPIRATION, TIMESTAMP, " +
-//                  "PRIORITY, COREHEADERS, PAYLOAD, CHANNELCOUNT, TYPE, JMSTYPE, CORRELATIONID, " +
-//                  "CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES " +
-//                  "FROM JMS_MESSAGE"
-                  
-                  
+               {       
                   long messageId = rs.getLong(1);
+                  
                   boolean reliable = rs.getString(2).equals("Y");
+                  
                   long expiration = rs.getLong(3);
+                  
                   long timestamp = rs.getLong(4);
-                  byte priority = rs.getByte(5);                  
-                  byte[] bytes = getBytes(rs, 6);
-                  HashMap coreHeaders = bytesToMap(bytes);
-                  byte[] payload = getBytes(rs, 7);
                   
-
-                  //TODO - We are mixing concerns here
-                  //The basic JDBCPersistencManager should *only* know about core messages - not 
-                  //JBossMessages - we should subclass JBDCPersistenceManager and the JBossMessage
-                  //specific code in a subclass
+                  byte priority = rs.getByte(5);        
                   
-                  byte type = rs.getByte(8);
+                  byte[] bytes = getBytes(rs, 6);
                   
-                  Message m;
+                  HashMap headers = bytesToMap(bytes);
                   
-                  if (type != CoreMessage.TYPE)
-                  {
-                     //JBossMessage
-                     String jmsType = rs.getString(9);
-                     String correlationID = rs.getString(10);
-                     byte[] correlationIDBytes = rs.getBytes(11);
-                     String destination = rs.getString(12);
-                     String replyTo = rs.getString(13);
-                     boolean replyToExists = !rs.wasNull();
-                     bytes = getBytes(rs, 14);
-                     HashMap jmsProperties = bytesToMap(bytes);
-                     
-                     JBossDestination dest;
-                     if (destination.charAt(0) == 'Q')
-                     {
-                        dest = new JBossQueue(destination.substring(1, destination.length()));
-                     }
-                     else
-                     {
-                        dest = new JBossTopic(destination.substring(1, destination.length()));
-                     }
-                     
-                     JBossDestination replyToDest = null;
-                     
-                     if (replyToExists)
-                     {
-                        if (replyTo.charAt(0) == 'Q')
-                        {
-                           replyToDest = new JBossQueue(replyTo.substring(1, replyTo.length()));
-                        }
-                        else
-                        {
-                           replyToDest = new JBossTopic(replyTo.substring(1, replyTo.length()));
-                        }
-                     }
-                         
-                     m = MessageFactory.createMessage(messageId, reliable, expiration, timestamp, priority,
-                                                      coreHeaders, payload,
-                                                      type, jmsType, correlationID, correlationIDBytes,
-                                                      dest, replyToDest, 0,
-                                                      jmsProperties);
-                  }
-                  else
-                  {
-                     m = MessageFactory.createMessage(messageId, reliable, expiration, timestamp, priority,
-                                                          coreHeaders, payload, type,
-                                                          null, null, null, null, null, 0, null);
-                  }
+                  byte[] payload = getBytes(rs, 7);
                   
+                  byte type = rs.getByte(8);
                   
+                  Message m = MessageFactory.createMessage(messageId, reliable, expiration, timestamp, priority,
+                                                           headers, payload, type);
                   msgs.add(m);
                }
                
@@ -620,7 +556,7 @@
          {
             psInsertReference = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE_REF"));
             psInsertMessage = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE"));
-            psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+            psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
          }
          
          while (iter.hasNext())
@@ -658,7 +594,7 @@
             if (!usingBatchUpdates)
             {
                psInsertMessage = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE"));
-               psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+               psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
             }
                                                                                      
             //Maybe we need to persist the message itself
@@ -765,7 +701,7 @@
             {
                int[] rowsMessage = updateWithRetryBatch(psUpdateMessage);
                
-               if (trace) { logBatchUpdate(getSQLStatement("INC_CHANNELCOUNT"), rowsMessage, "updated"); }
+               if (trace) { logBatchUpdate(getSQLStatement("INC_CHANNEL_COUNT"), rowsMessage, "updated"); }
             }
             
             psInsertReference.close();
@@ -861,7 +797,7 @@
          {
             psDeleteReference = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE_REF"));
             psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-            psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+            psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
          }
          
          while (iter.hasNext())
@@ -892,7 +828,7 @@
             if (!usingBatchUpdates)
             {
                psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-               psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+               psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
             }
                
             Message m = ref.getMessage();
@@ -938,7 +874,7 @@
             
             rowsReference = updateWithRetryBatch(psUpdateMessage);
             
-            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNELCOUNT"), rowsReference, "updated"); }
+            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNEL_COUNT"), rowsReference, "updated"); }
             
             rowsReference = updateWithRetryBatch(psDeleteMessage);
             
@@ -1011,9 +947,9 @@
       }      
    }
    
-   public void updateReliableReferencesNotPagedInRange(long channelID, long orderStart, long orderEnd, long num) throws Exception
+   public void updateReferencesNotPagedInRange(long channelID, long orderStart, long orderEnd, long num) throws Exception
    {
-      if (trace) { log.trace("Updating reliable references for channel " + channelID + " between " + orderStart + " and " + orderEnd); }
+      if (trace) { log.trace("Updating paaged references for channel " + channelID + " between " + orderStart + " and " + orderEnd); }
       
       Connection conn = null;
       PreparedStatement ps = null;
@@ -1025,7 +961,7 @@
       {
          conn = ds.getConnection();
          
-         ps = conn.prepareStatement(getSQLStatement("UPDATE_RELIABLE_REFS_NOT_PAGED"));
+         ps = conn.prepareStatement(getSQLStatement("UPDATE_REFS_NOT_PAGED"));
                  
          ps.setLong(1, orderStart);
          
@@ -1041,7 +977,7 @@
             {
                int rows = updateWithRetry(ps);
                  
-               if (trace) { log.trace(JDBCUtil.statementToString(getSQLStatement("UPDATE_RELIABLE_REFS_NOT_PAGED"), new Long(channelID),
+               if (trace) { log.trace(JDBCUtil.statementToString(getSQLStatement("UPDATE_REFS_NOT_PAGED"), new Long(channelID),
                                       new Long(orderStart), new Long(orderEnd)) + " updated " + rows + " rows"); }
                if (tries > 0)
                {
@@ -1137,7 +1073,7 @@
             
             psUpdateReference.setLong(1, ref.getPagingOrder());
 
-            psUpdateReference.setLong(2, ref.getMessageID());
+            psUpdateReference.setLong(2, ref.getMessage().getMessageID());
             
             psUpdateReference.setLong(3, channelID);
             
@@ -1229,8 +1165,7 @@
             long msgId = rs.getLong(1);     
             int deliveryCount = rs.getInt(2);
             int pageOrd = rs.getInt(3);
-            boolean reliable = rs.getString(4).equals("Y");
-            long sched = rs.getLong(5);
+            long sched = rs.getLong(4);
             
             //Sanity check
             if (pageOrd != ord)
@@ -1238,7 +1173,7 @@
                throw new IllegalStateException("Unexpected pageOrd: " + pageOrd + " expected: " + ord);
             }
             
-            ReferenceInfo ri = new ReferenceInfo(msgId, deliveryCount, reliable, sched);
+            ReferenceInfo ri = new ReferenceInfo(msgId, deliveryCount, sched);
             
             refs.add(ri);
             ord++;
@@ -1352,10 +1287,9 @@
          {
             long msgId = rs.getLong(1);            
             int deliveryCount = rs.getInt(2);
-            boolean reliable = rs.getString(3).equals("Y");
-            long sched = rs.getLong(4);
+            long sched = rs.getLong(3);
             
-            ReferenceInfo ri = new ReferenceInfo(msgId, deliveryCount, reliable, sched);
+            ReferenceInfo ri = new ReferenceInfo(msgId, deliveryCount, sched);
             
             if (count < fullSize)
             {
@@ -1470,7 +1404,7 @@
             else
             {
                //Update the message's channel count
-               psMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+               psMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
                
                incrementChannelCount(m, psMessage);
             }
@@ -1541,13 +1475,13 @@
        
       try
       {                                    
-         psReference = conn.prepareStatement(getSQLStatement("UPDATE_DELIVERYCOUNT"));
+         psReference = conn.prepareStatement(getSQLStatement("UPDATE_DELIVERY_COUNT"));
          
          psReference.setInt(1, ref.getDeliveryCount());
          
          psReference.setLong(2, channelID);
          
-         psReference.setLong(3, ref.getMessageID());
+         psReference.setLong(3, ref.getMessage().getMessageID());
          
          int rows = updateWithRetry(psReference);
 
@@ -1630,7 +1564,7 @@
             
             //Update the messages channel count
             
-            psUpdate = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+            psUpdate = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
             
             decrementChannelCount(m, psUpdate);
             
@@ -1787,7 +1721,7 @@
       {
          conn = ds.getConnection();
 
-         st = conn.prepareStatement(getSQLStatement("SELECT_EXISTS_REF_MESSAGEID"));
+         st = conn.prepareStatement(getSQLStatement("SELECT_EXISTS_REF_MESSAGE_ID"));
          st.setLong(1, messageID);
 
          rs = st.executeQuery();
@@ -1928,7 +1862,7 @@
          {
             psReference = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE_REF"));
             psInsertMessage = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE"));
-            psIncMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+            psIncMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
          }
 
          for(Iterator i = refsToAdd.iterator(); i.hasNext(); )
@@ -1963,7 +1897,7 @@
             if (!batch)
             {
                psInsertMessage = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE"));
-               psIncMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+               psIncMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
             }
                          
             boolean added;
@@ -2030,7 +1964,7 @@
             if (messageUpdatesInBatch)
             {
                int[] rowsMessage = updateWithRetryBatch(psIncMessage);
-               if (trace) { logBatchUpdate(getSQLStatement("INC_CHANNELCOUNT"), rowsMessage, "updated"); }
+               if (trace) { logBatchUpdate(getSQLStatement("INC_CHANNEL_COUNT"), rowsMessage, "updated"); }
             }
             
             psReference.close();
@@ -2051,7 +1985,7 @@
          {
             psReference = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE_REF"));
             psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-            psDecMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+            psDecMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
          }
 
          
@@ -2081,7 +2015,7 @@
             if (!batch)
             {
                psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-               psDecMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+               psDecMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
             }
             
             Message m = pair.ref.getMessage();
@@ -2124,7 +2058,7 @@
             
             rows = updateWithRetryBatch(psDecMessage);
             
-            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNELCOUNT"), rows, "updated"); }
+            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNEL_COUNT"), rows, "updated"); }
 
             rows = updateWithRetryBatch(psDeleteMessage);
             
@@ -2256,7 +2190,7 @@
          if (batch)
          {
             psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-            psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+            psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
          }
                   
          iter = refsToRemove.iterator();
@@ -2269,7 +2203,7 @@
             if (!batch)
             {
                psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-               psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+               psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
             }
             
             Message m = ref.getMessage();
@@ -2311,7 +2245,7 @@
          {
             int[] rows = updateWithRetryBatch(psUpdateMessage);
             
-            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNELCOUNT"), rows, "updated"); }
+            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNEL_COUNT"), rows, "updated"); }
             
             psUpdateMessage.close();
             psUpdateMessage = null;
@@ -2420,7 +2354,7 @@
          {
             psReference = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE_REF"));
             psInsertMessage = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE"));
-            psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+            psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
          }
          
          while (iter.hasNext())
@@ -2451,7 +2385,7 @@
             if (!batch)
             {
                psInsertMessage = conn.prepareStatement(getSQLStatement("INSERT_MESSAGE"));
-               psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNELCOUNT"));
+               psUpdateMessage = conn.prepareStatement(getSQLStatement("INC_CHANNEL_COUNT"));
             }
             
             Message m = pair.ref.getMessage();
@@ -2525,7 +2459,7 @@
             {
                int[] rowsMessage = updateWithRetryBatch(psUpdateMessage);
                
-               if (trace) { logBatchUpdate(getSQLStatement("INC_CHANNELCOUNT"), rowsMessage, "updated"); }
+               if (trace) { logBatchUpdate(getSQLStatement("INC_CHANNEL_COUNT"), rowsMessage, "updated"); }
             }
             
             psReference.close();
@@ -2679,7 +2613,7 @@
          if (batch)
          {
             psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-            psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+            psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
          }
                                  
          while (iter.hasNext())
@@ -2689,7 +2623,7 @@
             if (!batch)
             {
                psDeleteMessage = conn.prepareStatement(getSQLStatement("DELETE_MESSAGE"));
-               psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNELCOUNT"));
+               psUpdateMessage = conn.prepareStatement(getSQLStatement("DEC_CHANNEL_COUNT"));
             }
             
             Message m = pair.ref.getMessage();
@@ -2731,7 +2665,7 @@
          {
             int[] rows = updateWithRetryBatch(psUpdateMessage);
             
-            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNELCOUNT"), rows, "updated"); }
+            if (trace) { logBatchUpdate(getSQLStatement("DEC_CHANNEL_COUNT"), rows, "updated"); }
             
             rows = updateWithRetryBatch(psDeleteMessage);
             
@@ -2882,7 +2816,7 @@
       if (trace) { log.trace("adding " + ref + " to channel " + channelID); }
       
       ps.setLong(1, channelID);
-      ps.setLong(2, ref.getMessageID());
+      ps.setLong(2, ref.getMessage().getMessageID());
       ps.setNull(3, Types.BIGINT);
       ps.setString(4, "C");
       ps.setLong(5, getOrdering());
@@ -2895,8 +2829,7 @@
          ps.setNull(6, Types.BIGINT);
       }
       ps.setInt(7, ref.getDeliveryCount());
-      ps.setString(8, ref.isReliable() ? "Y" : "N");
-      ps.setLong(9, ref.getScheduledDeliveryTime());
+      ps.setLong(8, ref.getScheduledDeliveryTime());
    }
    
    protected void removeReference(long channelID, MessageReference ref, PreparedStatement ps)
@@ -2904,7 +2837,7 @@
    {
       if (trace) { log.trace("removing " + ref + " from channel " + channelID); }
       
-      ps.setLong(1, ref.getMessageID());
+      ps.setLong(1, ref.getMessage().getMessageID());
       ps.setLong(2, channelID);      
    }
    
@@ -2914,14 +2847,13 @@
       if (trace) { log.trace("adding " + ref + " to channel " + channelID + (tx == null ? " non-transactionally" : " on transaction: " + tx)); }
       
       ps.setLong(1, channelID);
-      ps.setLong(2, ref.getMessageID());
+      ps.setLong(2, ref.getMessage().getMessageID());
       ps.setLong(3, tx.getId());
       ps.setString(4, "+");
       ps.setLong(5, getOrdering());
       ps.setNull(6, Types.BIGINT);      
       ps.setInt(7, ref.getDeliveryCount());
-      ps.setString(8, ref.isReliable() ? "Y" : "N");
-      ps.setLong(9, ref.getScheduledDeliveryTime());
+      ps.setLong(8, ref.getScheduledDeliveryTime());
    }
    
    protected void prepareToRemoveReference(long channelID, MessageReference ref, Transaction tx, PreparedStatement ps)
@@ -2934,7 +2866,7 @@
       }
       
       ps.setLong(1, tx.getId()); 
-      ps.setLong(2, ref.getMessageID());
+      ps.setLong(2, ref.getMessage().getMessageID());
       ps.setLong(3, channelID);           
    }
    
@@ -3064,20 +2996,10 @@
       
       DataInputStream dais = new DataInputStream(bis);
       
-      Map m = StreamUtils.readMap(dais, true);
+      HashMap map = StreamUtils.readMap(dais, true);
       
       dais.close();
-      
-      HashMap map;
-      if (!(m instanceof HashMap))
-      {
-         map = new HashMap(m);
-      }
-      else
-      {
-         map = (HashMap) m;
-      }
-      
+            
       return map;
    }
    
@@ -3106,7 +3028,7 @@
       ps.setLong(4, m.getTimestamp());
       ps.setByte(5, m.getPriority());
       
-      //Core headers
+      //headers
       byte[] bytes = mapToBytes(((MessageSupport) m).getHeaders());
       if (bytes != null)
       {
@@ -3117,8 +3039,6 @@
          ps.setNull(6, Types.LONGVARBINARY);
       }
       
-      // now set the fields from org.jboss.messaging.core.Message
-      
       byte[] payload = m.getPayloadAsByteArray();
       if (payload != null)
       {
@@ -3130,79 +3050,9 @@
       }
       
       //The number of channels that hold a reference to the message - initially always 1
-      ps.setInt(8, 1);
+      ps.setInt(8, 1);     
       
-      //Now set the fields from org.joss.jms.message.JBossMessage if appropriate
-      
-      //TODO - We are mixing concerns here
-      //The basic JDBCPersistencManager should *only* know about core messages - not 
-      //JBossMessages - we should subclass JBDCPersistenceManager and the JBossMessage
-      //specific code in a subclass
-      if (m instanceof JBossMessage)
-      {
-         JBossMessage jbm = (JBossMessage) m;
-         
-         ps.setByte(9, jbm.getType());
-         if (jbm.getJMSType() != null)
-         {
-            ps.setString(10, jbm.getJMSType());
-         }
-         else
-         {
-            ps.setNull(10, Types.VARCHAR);
-         }
-         if (jbm.getJMSCorrelationID() != null)
-         {
-            ps.setString(11, jbm.getJMSCorrelationID());
-         }
-         else
-         {
-            ps.setNull(11, Types.VARCHAR);
-         }
-         if (jbm.getJMSCorrelationIDAsBytes() != null)
-         {
-            ps.setBytes(12, jbm.getJMSCorrelationIDAsBytes());
-         }
-         else
-         {
-            ps.setNull(12, Types.BINARY);
-         }
-         
-         JBossDestination jbd = (JBossDestination) jbm.getJMSDestination();
-        
-         ps.setString(13, (jbd.isQueue() ? "Q" : "T") + jbd);
-         
-         JBossDestination replyTo = (JBossDestination) jbm.getJMSReplyTo();
-         if (replyTo == null)
-         {
-            ps.setNull(14, Types.BIGINT);
-         }
-         else
-         {            
-            ps.setString(14, (replyTo.isQueue() ? "Q" : "T") + replyTo);
-         }
-         
-         //jms properties
-         bytes = mapToBytes(jbm.getJMSProperties());
-         if (bytes != null)
-         {
-            setBytes(ps, 15, bytes);
-         }
-         else
-         {
-            ps.setNull(15, Types.LONGVARBINARY);
-         }
-      }
-      else
-      {
-         ps.setByte(9, m.getType());
-         ps.setNull(10, Types.VARCHAR);
-         ps.setNull(11, Types.VARCHAR);
-         ps.setNull(12, Types.BINARY);
-         ps.setNull(13, Types.BIGINT);
-         ps.setNull(14, Types.BIGINT);
-         ps.setNull(15, Types.LONGVARBINARY);
-      }
+      ps.setByte(9, m.getType());
    }
    
    /**
@@ -3343,31 +3193,28 @@
       Map map = new LinkedHashMap();
       //Message reference
       map.put("CREATE_MESSAGE_REFERENCE",
-              "CREATE TABLE JMS_MESSAGE_REFERENCE (CHANNELID BIGINT, " +
-              "MESSAGEID BIGINT, TRANSACTIONID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, " +
-              "DELIVERYCOUNT INTEGER, RELIABLE CHAR(1), LOADED CHAR(1), SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNELID, MESSAGEID))"); //CHANGED
-      map.put("CREATE_IDX_MESSAGE_REF_TX", "CREATE INDEX JMS_MESSAGE_REF_TX ON JMS_MESSAGE_REFERENCE (TRANSACTIONID)");
-      map.put("CREATE_IDX_MESSAGE_REF_ORD", "CREATE INDEX JMS_MESSAGE_REF_ORD ON JMS_MESSAGE_REFERENCE (ORD)");
-      map.put("CREATE_IDX_MESSAGE_REF_PAGE_ORD", "CREATE INDEX JMS_MESSAGE_REF__PAGE_ORD ON JMS_MESSAGE_REFERENCE (PAGE_ORD)");
-      map.put("CREATE_IDX_MESSAGE_REF_MESSAGEID", "CREATE INDEX JMS_MESSAGE_REF_MESSAGEID ON JMS_MESSAGE_REFERENCE (MESSAGEID)");
-      map.put("CREATE_IDX_MESSAGE_REF_RELIABLE", "CREATE INDEX JMS_MESSAGE_REF_RELIABLE ON JMS_MESSAGE_REFERENCE (RELIABLE)");
-      map.put("CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY", "CREATE INDEX JMS_MESSAGE_REF_SCHED_DELIVERY ON JMS_MESSAGE_REFERENCE (SCHED_DELIVERY)");
+              "CREATE TABLE JBM_MSG_REF (CHANNEL_ID BIGINT, " +
+              "MESSAGE_ID BIGINT, TRANSACTION_ID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, " +
+              "DELIVERY_COUNT INTEGER, LOADED CHAR(1), SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))"); //CHANGED
+      map.put("CREATE_IDX_MESSAGE_REF_TX", "CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)");
+      map.put("CREATE_IDX_MESSAGE_REF_ORD", "CREATE INDEX JBM_MSG_REF_ORD ON JBM_MSG_REF (ORD)");
+      map.put("CREATE_IDX_MESSAGE_REF_PAGE_ORD", "CREATE INDEX JBM_MSG_REF__PAGE_ORD ON JBM_MSG_REF (PAGE_ORD)");
+      map.put("CREATE_IDX_MESSAGE_REF_MESSAGE_ID", "CREATE INDEX JBM_MSG_REF_MESSAGE_ID ON JBM_MSG_REF (MESSAGE_ID)");      
+      map.put("CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY", "CREATE INDEX JBM_MSG_REF_SCHED_DELIVERY ON JBM_MSG_REF (SCHED_DELIVERY)");
       //Message
       map.put("CREATE_MESSAGE",
-              "CREATE TABLE JMS_MESSAGE (MESSAGEID BIGINT, RELIABLE CHAR(1), " +
-              "EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY TINYINT, COREHEADERS LONGVARBINARY, " +
-              "PAYLOAD LONGVARBINARY, CHANNELCOUNT INTEGER, TYPE TINYINT, JMSTYPE VARCHAR(255), CORRELATIONID VARCHAR(255), " +
-              "CORRELATIONID_BYTES VARBINARY(254), DESTINATION VARCHAR(255), REPLYTO VARCHAR(255), " +
-              "JMSPROPERTIES LONGVARBINARY, " +
-              "PRIMARY KEY (MESSAGEID))"); 
+              "CREATE TABLE JBM_MSG (MESSAGE_ID BIGINT, RELIABLE CHAR(1), " +
+              "EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY TINYINT, HEADERS LONGVARBINARY, " +
+              "PAYLOAD LONGVARBINARY, CHANNEL_COUNT INTEGER, TYPE TINYINT, " +
+              "PRIMARY KEY (MESSAGE_ID))"); 
       //Transaction
       map.put("CREATE_TRANSACTION",
-              "CREATE TABLE JMS_TRANSACTION (" +
-              "TRANSACTIONID BIGINT, BRANCH_QUAL VARBINARY(254), " +
-              "FORMAT_ID INTEGER, GLOBAL_TXID VARBINARY(254), PRIMARY KEY (TRANSACTIONID))");
+              "CREATE TABLE JBM_TX (" +
+              "TRANSACTION_ID BIGINT, BRANCH_QUAL VARBINARY(254), " +
+              "FORMAT_ID INTEGER, GLOBAL_TXID VARBINARY(254), PRIMARY KEY (TRANSACTION_ID))");
       //Counter
       map.put("CREATE_COUNTER",
-              "CREATE TABLE JMS_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))");
+              "CREATE TABLE JBM_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))");
       return map;
    }
       
@@ -3376,59 +3223,58 @@
       Map map = new LinkedHashMap();
       //Message reference
       map.put("INSERT_MESSAGE_REF",
-              "INSERT INTO JMS_MESSAGE_REFERENCE (CHANNELID, MESSAGEID, TRANSACTIONID, STATE, ORD, PAGE_ORD, DELIVERYCOUNT, RELIABLE, SCHED_DELIVERY) " +
-              "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); //CHANGED
-      map.put("DELETE_MESSAGE_REF", "DELETE FROM JMS_MESSAGE_REFERENCE WHERE MESSAGEID=? AND CHANNELID=? AND STATE='C'");
+              "INSERT INTO JBM_MSG_REF (CHANNEL_ID, MESSAGE_ID, TRANSACTION_ID, STATE, ORD, PAGE_ORD, DELIVERY_COUNT, SCHED_DELIVERY) " +
+              "VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
+      map.put("DELETE_MESSAGE_REF", "DELETE FROM JBM_MSG_REF WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'");
       map.put("UPDATE_MESSAGE_REF",
-              "UPDATE JMS_MESSAGE_REFERENCE SET TRANSACTIONID=?, STATE='-' " +
-              "WHERE MESSAGEID=? AND CHANNELID=? AND STATE='C'");
-      map.put("UPDATE_PAGE_ORDER", "UPDATE JMS_MESSAGE_REFERENCE SET PAGE_ORD = ? WHERE MESSAGEID=? AND CHANNELID=?");
-      map.put("COMMIT_MESSAGE_REF1", "UPDATE JMS_MESSAGE_REFERENCE SET STATE='C', TRANSACTIONID = NULL WHERE TRANSACTIONID=? AND STATE='+'");
-      map.put("COMMIT_MESSAGE_REF2", "DELETE FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID=? AND STATE='-'");
-      map.put("ROLLBACK_MESSAGE_REF1", "DELETE FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID=? AND STATE='+'");
-      map.put("ROLLBACK_MESSAGE_REF2", "UPDATE JMS_MESSAGE_REFERENCE SET STATE='C', TRANSACTIONID = NULL WHERE TRANSACTIONID=? AND STATE='-'");
+              "UPDATE JBM_MSG_REF SET TRANSACTION_ID=?, STATE='-' " +
+              "WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'");
+      map.put("UPDATE_PAGE_ORDER", "UPDATE JBM_MSG_REF SET PAGE_ORD = ? WHERE MESSAGE_ID=? AND CHANNEL_ID=?");
+      map.put("COMMIT_MESSAGE_REF1", "UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='+'");
+      map.put("COMMIT_MESSAGE_REF2", "DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='-'");
+      map.put("ROLLBACK_MESSAGE_REF1", "DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'");
+      map.put("ROLLBACK_MESSAGE_REF2", "UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'");
       map.put("LOAD_PAGED_REFS",
-              "SELECT MESSAGEID, DELIVERYCOUNT, PAGE_ORD, RELIABLE, SCHED_DELIVERY FROM JMS_MESSAGE_REFERENCE " +
-              "WHERE CHANNELID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD"); //CHANGED
+              "SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF " +
+              "WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD");
       map.put("LOAD_UNPAGED_REFS",
-              "SELECT MESSAGEID, DELIVERYCOUNT, RELIABLE, SCHED_DELIVERY FROM JMS_MESSAGE_REFERENCE WHERE STATE = 'C' " +
-              "AND CHANNELID = ? AND PAGE_ORD IS NULL ORDER BY ORD"); //CHANGED
-      map.put("UPDATE_RELIABLE_REFS_NOT_PAGED", "UPDATE JMS_MESSAGE_REFERENCE SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNELID=?");       
-      map.put("SELECT_MIN_MAX_PAGE_ORD", "SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ?");
-      map.put("SELECT_EXISTS_REF", "SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID = ? AND MESSAGEID = ?");
-      map.put("SELECT_EXISTS_REF_MESSAGEID", "SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE MESSAGEID = ?");
-      map.put("UPDATE_DELIVERYCOUNT", "UPDATE JMS_MESSAGE_REFERENCE SET DELIVERYCOUNT = ? WHERE CHANNELID = ? AND MESSAGEID = ?");
+              "SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' " +
+              "AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD");
+      
+      map.put("UPDATE_REFS_NOT_PAGED", "UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?");       
+      map.put("SELECT_MIN_MAX_PAGE_ORD", "SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?");
+      map.put("SELECT_EXISTS_REF", "SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?");
+      map.put("SELECT_EXISTS_REF_MESSAGE_ID", "SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE MESSAGE_ID = ?");
+      map.put("UPDATE_DELIVERY_COUNT", "UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?");
       //Message
       map.put("LOAD_MESSAGES",
-              "SELECT MESSAGEID, RELIABLE, EXPIRATION, TIMESTAMP, " +
-              "PRIORITY, COREHEADERS, PAYLOAD, TYPE, JMSTYPE, CORRELATIONID, " +
-              "CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES " +
-              "FROM JMS_MESSAGE");
+              "SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, " +
+              "PRIORITY, HEADERS, PAYLOAD, TYPE " +
+              "FROM JBM_MSG");
       map.put("INSERT_MESSAGE",
-              "INSERT INTO JMS_MESSAGE (MESSAGEID, RELIABLE, EXPIRATION, " +
-              "TIMESTAMP, PRIORITY, COREHEADERS, PAYLOAD, CHANNELCOUNT, TYPE, JMSTYPE, CORRELATIONID, " +
-              "CORRELATIONID_BYTES, DESTINATION, REPLYTO, JMSPROPERTIES) " +
-              "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
-      map.put("INC_CHANNELCOUNT", "UPDATE JMS_MESSAGE SET CHANNELCOUNT = CHANNELCOUNT + 1 WHERE MESSAGEID=?");
-      map.put("DEC_CHANNELCOUNT", "UPDATE JMS_MESSAGE SET CHANNELCOUNT = CHANNELCOUNT - 1 WHERE MESSAGEID=?");
-      map.put("DELETE_MESSAGE", "DELETE FROM JMS_MESSAGE WHERE MESSAGEID=? AND CHANNELCOUNT = 0");
-      map.put("MESSAGEID_COLUMN", "MESSAGEID");
-      map.put("MESSAGE_EXISTS", "SELECT MESSAGEID FROM JMS_MESSAGE WHERE MESSAGEID = ?");
+              "INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, " +
+              "TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, CHANNEL_COUNT, TYPE) " +           
+              "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" );
+      map.put("INC_CHANNEL_COUNT", "UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT + 1 WHERE MESSAGE_ID=?");
+      map.put("DEC_CHANNEL_COUNT", "UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT - 1 WHERE MESSAGE_ID=?");
+      map.put("DELETE_MESSAGE", "DELETE FROM JBM_MSG WHERE MESSAGE_ID=? AND CHANNEL_COUNT = 0");
+      map.put("MESSAGE_ID_COLUMN", "MESSAGE_ID");
+      map.put("MESSAGE_EXISTS", "SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ?");
       //Transaction
       map.put("INSERT_TRANSACTION",
-              "INSERT INTO JMS_TRANSACTION (TRANSACTIONID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) " +
+              "INSERT INTO JBM_TX (TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) " +
               "VALUES(?, ?, ?, ?)");
-      map.put("DELETE_TRANSACTION", "DELETE FROM JMS_TRANSACTION WHERE TRANSACTIONID = ?");
-      map.put("SELECT_PREPARED_TRANSACTIONS", "SELECT TRANSACTIONID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JMS_TRANSACTION");
-      map.put("SELECT_MESSAGEID_FOR_REF", "SELECT MESSAGEID, CHANNELID FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID = ? AND STATE = '+' ORDER BY ORD");
-      map.put("SELECT_MESSAGEID_FOR_ACK", "SELECT MESSAGEID, CHANNELID FROM JMS_MESSAGE_REFERENCE WHERE TRANSACTIONID = ? AND STATE = '-' ORDER BY ORD");
+      map.put("DELETE_TRANSACTION", "DELETE FROM JBM_TX WHERE TRANSACTION_ID = ?");
+      map.put("SELECT_PREPARED_TRANSACTIONS", "SELECT TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JBM_TX");
+      map.put("SELECT_MESSAGE_ID_FOR_REF", "SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '+' ORDER BY ORD");
+      map.put("SELECT_MESSAGE_ID_FOR_ACK", "SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '-' ORDER BY ORD");
       
       //Counter
-      map.put("UPDATE_COUNTER", "UPDATE JMS_COUNTER SET NEXT_ID = ? WHERE NAME=?");
-      map.put("SELECT_COUNTER", "SELECT NEXT_ID FROM JMS_COUNTER WHERE NAME=?");
-      map.put("INSERT_COUNTER", "INSERT INTO JMS_COUNTER (NAME, NEXT_ID) VALUES (?, ?)");
+      map.put("UPDATE_COUNTER", "UPDATE JBM_COUNTER SET NEXT_ID = ? WHERE NAME=?");
+      map.put("SELECT_COUNTER", "SELECT NEXT_ID FROM JBM_COUNTER WHERE NAME=?");
+      map.put("INSERT_COUNTER", "INSERT INTO JBM_COUNTER (NAME, NEXT_ID) VALUES (?, ?)");
       //Other
-      map.put("SELECT_ALL_CHANNELS", "SELECT DISTINCT(CHANNELID) FROM JMS_MESSAGE_REFERENCE");      
+      map.put("SELECT_ALL_CHANNELS", "SELECT DISTINCT(CHANNEL_ID) FROM JBM_MSG_REF");      
       return map;
    }
    
@@ -3740,8 +3586,8 @@
          MessageReference ref1 = (MessageReference)o1;
          MessageReference ref2 = (MessageReference)o2;
 
-         long id1 = ref1.getMessageID();         
-         long id2 = ref2.getMessageID(); 
+         long id1 = ref1.getMessage().getMessageID();         
+         long id2 = ref2.getMessage().getMessageID(); 
          
          return (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1));
       }      

Deleted: trunk/src/main/org/jboss/messaging/core/plugin/MessageHolder.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/MessageHolder.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/MessageHolder.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,82 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-
-package org.jboss.messaging.core.plugin;
-
-import org.jboss.messaging.core.Message;
-
-/**
- * 
- * A MessageHolder.
- * 
- * @author <a href="tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-class MessageHolder
-{
-   /*
-    * The number of channels *currently in memory* that hold a reference to the message
-    * We need this so we know when to evict the message from the store (when it reaches zero)
-    * Note that we also maintain a persistent channel count on the message itself.
-    * This is the total number of channels whether loaded in memory or not that hold a reference to the
-    * message and is needed to know when it is safe to remove the message from the db
-    */
-   private int inMemoryChannelCount;
-   
-   private Message msg;
-   
-   private SimpleMessageStore ms;
-   
-   public MessageHolder(Message msg, SimpleMessageStore ms)
-   {
-      this.msg = msg;
-      this.ms = ms;
-   }    
-   
-   public synchronized void incrementInMemoryChannelCount()
-   {            
-      inMemoryChannelCount++;
-   }
-   
-   public synchronized void decrementInMemoryChannelCount()
-   {
-      inMemoryChannelCount--;      
-
-      if (inMemoryChannelCount == 0)
-      {
-         // can remove the message from the message store
-         ms.forgetMessage(msg.getMessageID());
-      }
-   }
-   
-   public synchronized int getInMemoryChannelCount()
-   {
-      return inMemoryChannelCount;
-   }
- 
-   public Message getMessage()
-   {
-      return msg;
-   }   
-}

Deleted: trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageReference.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageReference.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageReference.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,196 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.messaging.core.plugin;
-
-import java.util.Map;
-
-import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
-import org.jboss.messaging.core.message.RoutableSupport;
-import org.jboss.messaging.core.plugin.contract.MessageStore;
-
-/**
- * A Simple MessageReference implementation.
- * 
- * Note that we do not need WeakReferences to message/holder objects since with the new
- * lazy loading schema we guarantee that if a message ref is in memory - it's corresponding message is
- * in memory too
- *
- * @author <a href="mailto:tim.fox at jboss.com>Tim Fox</a>
- * @version <tt>1.3</tt>
- *
- * SimpleMessageReference.java,v 1.3 2006/02/23 17:45:57 timfox Exp
- */
-public class SimpleMessageReference extends RoutableSupport implements MessageReference
-{   
-   private static final Logger log = Logger.getLogger(SimpleMessageReference.class);
-   
-   // Attributes ----------------------------------------------------
-
-   private boolean trace = log.isTraceEnabled();
-   
-   protected transient MessageStore ms;
-   
-   private MessageHolder holder;
-   
-   private long pagingOrder = -1;
-   
-   private boolean released;
-   
-   // Constructors --------------------------------------------------
-
-   /**
-    * Required by externalization.
-    */
-   public SimpleMessageReference()
-   {
-      if (trace) { log.trace("Creating using default constructor"); }
-   }
-
-   /**
-    * Creates a reference based on a given message.
-    */
-   public SimpleMessageReference(MessageHolder holder, MessageStore ms)
-   {
-      this(holder.getMessage().getMessageID(), holder.getMessage().isReliable(),
-           holder.getMessage().getExpiration(), holder.getMessage().getTimestamp(),
-           holder.getMessage().getHeaders(), holder.getMessage().getDeliveryCount(),
-           holder.getMessage().getPriority(), holder.getMessage().getScheduledDeliveryTime(), ms);
-
-      this.holder = holder;
-   }
-   
-   /*
-    * Creates a WeakMessageReference as a shallow copy of another
-    * TODO - By using a proxy pattern similarly to how the MessageProxies are done
-    * we can prevent unnecessary copying of MessageReference data since most of it is read only :)
-    */
-   public SimpleMessageReference(SimpleMessageReference other)
-   {
-      this(other.getMessageID(), other.isReliable(), other.getExpiration(),
-           other.getTimestamp(), other.getHeaders(), other.getDeliveryCount(),
-           other.getPriority(), other.getScheduledDeliveryTime(), other.ms);
-      
-      this.headers = other.headers;
-      this.holder = other.holder;
-   }
-   
-   protected SimpleMessageReference(long messageID, boolean reliable, long expiration,
-                                    long timestamp, Map headers, int deliveryCount,
-                                    byte priority, long scheduledDeliveryTime, MessageStore ms)
-   {
-      super(messageID, reliable, expiration, timestamp, priority, 0, scheduledDeliveryTime, headers);
-      this.deliveryCount = deliveryCount;
-      this.ms = ms;
-   }
-
-   // Message implementation ----------------------------------------
-
-   public boolean isReference()
-   {
-      return true;
-   }
-
-   // MessageReference implementation -------------------------------
-   
-   public Message getMessage()
-   {
-      return holder.getMessage();
-   }         
-   
-   public void releaseMemoryReference()
-   {
-      if (released)
-      {
-         //Do nothing -
-         //It's possible releaseMemoryReference can be called more than once on a reference since it's
-         //allowable that acknowledge is called more than once for a delivery and each call will call this
-         //method - so we don't want to throw an exception
-         return;
-      }
-      holder.decrementInMemoryChannelCount();
-      
-      released = true;
-   }
-   
-   public int getInMemoryChannelCount()
-   {
-      return holder.getInMemoryChannelCount();
-   }
-  
-   public long getPagingOrder()
-   {
-      return pagingOrder;
-   }
-   
-   public void setPagingOrder(long order)
-   {
-      this.pagingOrder = order;
-   }
-   
-   public MessageReference copy()
-   {
-      SimpleMessageReference ref = new SimpleMessageReference(this);
-      
-      ref.holder.incrementInMemoryChannelCount();
-      
-      return ref;
-   }
-   
-   // Public --------------------------------------------------------
-
-   public boolean equals(Object o)
-   {
-      if (this == o)
-      {
-         return true;
-      }
-
-      if (!(o instanceof SimpleMessageReference))
-      {
-         return false;
-      }
-      
-      SimpleMessageReference that = (SimpleMessageReference)o;
-      
-      return this.messageID == that.messageID;
-   }
-
-   public int hashCode()
-   {      
-      return (int)((this.messageID >>> 32) ^ this.messageID);
-   }
-
-   public String toString()
-   {
-      return "Reference[" + messageID + "]:" + (isReliable() ? "RELIABLE" : "NON-RELIABLE");
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------   
-   
-   // Private -------------------------------------------------------
-
-   // Inner classes -------------------------------------------------
-}
\ No newline at end of file

Deleted: trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageStore.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageStore.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/SimpleMessageStore.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,175 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.messaging.core.plugin;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
-import org.jboss.messaging.core.plugin.contract.MessageStore;
-
-/**
- * A MessageStore implementation.
- * 
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public class SimpleMessageStore implements MessageStore
-{
-   // Constants -----------------------------------------------------
-
-   private static final Logger log = Logger.getLogger(SimpleMessageStore.class);
-
-   // Static --------------------------------------------------------
-   
-   // Attributes ----------------------------------------------------
-   
-   private boolean trace = log.isTraceEnabled();
- 
-   // <messageID - MessageHolder>
-   private Map messages;
-
-   // Constructors --------------------------------------------------
-
-   public SimpleMessageStore()
-   {  
-      messages = new HashMap();
-
-      log.debug(this + " initialized");
-   }
-
-   // MessageStore implementation ---------------------------
-
-   public Object getInstance()
-   {
-      return this;
-   }
-
-   // TODO If we can assume that the message is not known to the store before
-   // (true when sending messages)
-   // Then we can avoid synchronizing on this and use a ConcurrentHashmap
-   // Which will give us much better concurrency for many threads
-   public MessageReference reference(Message m)
-   {
-      MessageHolder holder;
-      
-      synchronized (this)
-      {         
-         holder = (MessageHolder)messages.get(new Long(m.getMessageID()));
-         
-         if (holder == null)
-         {      
-            holder = addMessage(m);
-         }
-      }
-      holder.incrementInMemoryChannelCount();
-      
-      MessageReference ref = new SimpleMessageReference(holder, this);
-      
-      if (trace) { log.trace(this + " generated " + ref + " for " + m); }
-      
-      return ref;
-   }
-
-   public MessageReference reference(long messageID)
-   {
-      MessageHolder holder;
-      
-      synchronized (this)
-      {
-         holder = (MessageHolder)messages.get(new Long(messageID));         
-      }
-      
-      if (holder == null)
-      {
-         return null;
-      }
-       
-      MessageReference ref = new SimpleMessageReference(holder, this);
-      
-      if (trace) { log.trace(this + " generates " + ref + " for " + messageID); }
-      
-      holder.incrementInMemoryChannelCount();
-      
-      return ref;      
-   }
-   
-
-   public boolean forgetMessage(long messageID)
-   {
-      return messages.remove(new Long(messageID)) != null;
-   }
-   
-   public int size()
-   {
-      return messages.size();
-   }
-   
-   public List messageIds()
-   {
-      return new ArrayList(messages.keySet());
-   }
-   
-   // MessagingComponent implementation --------------------------------
-   
-   public void start() throws Exception
-   {
-      //NOOP
-   }
-   
-   public void stop() throws Exception
-   {
-      //NOOP
-   }
-
-   // Public --------------------------------------------------------
-   
-   public String toString()
-   {
-      return "MemoryStore[" + System.identityHashCode(this) + "]";
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-   
-   protected MessageHolder addMessage(Message m)
-   {
-      MessageHolder holder = new MessageHolder(m, this);
-      
-      messages.put(new Long(m.getMessageID()), holder);
-      
-      return holder;
-   }
-   
-   // Private -------------------------------------------------------
-   
-   // Inner classes -------------------------------------------------   
-      
-}

Modified: trunk/src/main/org/jboss/messaging/core/plugin/contract/Condition.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/contract/Condition.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/contract/Condition.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,7 +21,7 @@
  */
 package org.jboss.messaging.core.plugin.contract;
 
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.MessageReference;
 
 /**
  * A Condition

Modified: trunk/src/main/org/jboss/messaging/core/plugin/contract/MessageStore.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/contract/MessageStore.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/contract/MessageStore.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -6,8 +6,8 @@
  */
 package org.jboss.messaging.core.plugin.contract;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 
 /**
  * An interface to a referencing/dereferencing message store.

Modified: trunk/src/main/org/jboss/messaging/core/plugin/contract/PersistenceManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/contract/PersistenceManager.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/contract/PersistenceManager.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -22,10 +22,9 @@
 package org.jboss.messaging.core.plugin.contract;
 
 import java.util.List;
-import java.util.Map;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**
@@ -65,7 +64,7 @@
     
    void updatePageOrder(long channelID, List references) throws Exception;
    
-   void updateReliableReferencesNotPagedInRange(long channelID, long orderStart, long orderEnd, long num) throws Exception;
+   void updateReferencesNotPagedInRange(long channelID, long orderStart, long orderEnd, long num) throws Exception;
             
    List getPagedReferenceInfos(long channelID, long orderStart, long number) throws Exception;
    
@@ -118,18 +117,14 @@
       
       private int deliveryCount;
       
-      private boolean reliable;
-      
       private long scheduledDelivery;
       
-      public ReferenceInfo(long msgId, int deliveryCount, boolean reliable, long scheduledDelivery)
+      public ReferenceInfo(long msgId, int deliveryCount, long scheduledDelivery)
       {
          this.messageId = msgId;
          
          this.deliveryCount = deliveryCount;
          
-         this.reliable = reliable;
-         
          this.scheduledDelivery = scheduledDelivery;
       }    
       
@@ -143,11 +138,6 @@
          return deliveryCount;
       }      
       
-      public boolean isReliable()
-      {
-         return reliable;
-      }
-      
       public long getScheduledDelivery()
       {
          return scheduledDelivery;

Modified: trunk/src/main/org/jboss/messaging/core/plugin/contract/PostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/contract/PostOffice.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/contract/PostOffice.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,8 +23,8 @@
 
 import java.util.Collection;
 
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.postoffice.Binding;
 import org.jboss.messaging.core.tx.Transaction;
 

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -44,9 +44,10 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.Filter;
 import org.jboss.messaging.core.FilterFactory;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageReference;
 import org.jboss.messaging.core.plugin.JDBCSupport;
 import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.contract.Condition;
@@ -301,7 +302,7 @@
          {
             boolean startInternalTx = false;
 
-            if (tx == null && ref.isReliable())
+            if (tx == null && ref.getMessage().isReliable())
             {
                if (bd.getDurableCount() > 1)
                {
@@ -435,7 +436,7 @@
                        out.println("<tr><td>Reference#</td><td>Message</td></tr>");
                        for (Iterator i = undelivered.iterator();i.hasNext();)
                        {
-                           MessageReference reference = (MessageReference)i.next();
+                           SimpleMessageReference reference = (SimpleMessageReference)i.next();
                            out.println("<tr><td>" + reference.getInMemoryChannelCount() +
                               "</td><td>" + reference.getMessage() +"</td></tr>");
                        }
@@ -878,7 +879,7 @@
       Map map = new LinkedHashMap();
 
       map.put("INSERT_BINDING",
-              "INSERT INTO JMS_POSTOFFICE (" +
+              "INSERT INTO JBM_POSTOFFICE (" +
                  "POSTOFFICE_NAME, " +
                  "NODE_ID, " +
                  "QUEUE_NAME, " +
@@ -890,7 +891,7 @@
               "VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
 
       map.put("DELETE_BINDING",
-              "DELETE FROM JMS_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?");
+              "DELETE FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?");
 
       map.put("LOAD_BINDINGS",
               "SELECT " +
@@ -901,7 +902,7 @@
                  "CHANNEL_ID, " +
                  "IS_FAILED_OVER, " +
                  "FAILED_NODE_ID " +
-                 "FROM JMS_POSTOFFICE WHERE POSTOFFICE_NAME  = ?");
+                 "FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME  = ?");
 
       return map;
    }
@@ -910,7 +911,7 @@
    {
       Map map = new LinkedHashMap();
       map.put("CREATE_POSTOFFICE_TABLE",
-              "CREATE TABLE JMS_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER," +
+              "CREATE TABLE JBM_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER," +
               "QUEUE_NAME VARCHAR(1023), CONDITION VARCHAR(1023), " +
               "SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER CHAR(1), " +
               "FAILED_NODE_ID INTEGER)");

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/CastMessagesCallback.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/CastMessagesCallback.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/CastMessagesCallback.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -26,7 +26,7 @@
 import java.util.Map;
 
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.plugin.contract.Condition;
 import org.jboss.messaging.core.tx.TransactionException;
 import org.jboss.messaging.core.tx.TxCallback;

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -55,8 +55,8 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.Filter;
 import org.jboss.messaging.core.FilterFactory;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.contract.Condition;
 import org.jboss.messaging.core.plugin.contract.ConditionFactory;
@@ -631,7 +631,7 @@
       }
    }
 
-   public void routeFromCluster(org.jboss.messaging.core.Message message,
+   public void routeFromCluster(org.jboss.messaging.core.message.Message message,
                                 String routingKeyText,
                                 Map queueNameNodeIdMap) throws Exception
    {
@@ -938,7 +938,7 @@
    }
 
    public void handleMessagePullResult(int remoteNodeId, long holdingTxId,
-                                       String queueName, org.jboss.messaging.core.Message message) throws Throwable
+                                       String queueName, org.jboss.messaging.core.message.Message message) throws Throwable
    {
       if (trace) { log.trace(this.currentNodeId + " handling pull result " + message + " for " + queueName); }
 
@@ -1092,7 +1092,7 @@
          {
             if (trace) { log.trace(this + " found " + cb); }
 
-            if (tx == null && ref.isReliable())
+            if (tx == null && ref.getMessage().isReliable())
             {
                if (!(cb.getDurableCount() == 0 ||
                     (cb.getDurableCount() == 1 && cb.getLocalDurableCount() == 1)))

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultRouter.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultRouter.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultRouter.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,9 +28,9 @@
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
-import org.jboss.messaging.core.Routable;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 /**
@@ -91,7 +91,7 @@
          // If the message arrived over a failed-over connection, try to send the message to its
          // corresponding "failed-over" queue.
 
-         Integer failedNodeID = (Integer)ref.getHeader(Routable.FAILED_NODE_ID);
+         Integer failedNodeID = (Integer)ref.getMessage().getHeader(Message.FAILED_NODE_ID);
 
          if (failedNodeID != null)
          {

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,6 +25,8 @@
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.*;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.plugin.contract.PostOffice;
@@ -146,7 +148,7 @@
    {
       if (trace) { log.trace(this + " handling " + ref + " from cluster"); }
 
-      if (filter != null && !filter.accept(ref))
+      if (filter != null && !filter.accept(ref.getMessage()))
       {
          Delivery del = new SimpleDelivery(this, ref, true, false);
          
@@ -393,7 +395,7 @@
                                                name,
                                                del.getReference().getMessage());
                         
-               if (!del.getReference().isReliable())
+               if (!del.getReference().getMessage().isReliable())
                {
                   //We can ack it now
                   del.acknowledge(null);

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageHolder.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageHolder.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageHolder.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,7 +25,7 @@
 import java.io.DataOutputStream;
 import java.util.Map;
 
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageFactory;
 import org.jboss.messaging.util.StreamUtils;
 import org.jboss.messaging.util.Streamable;

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageRequest.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageRequest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/MessageRequest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,7 +25,7 @@
 import java.io.DataOutputStream;
 import java.util.Map;
 
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageFactory;
 import org.jboss.messaging.util.StreamUtils;
 

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,7 +25,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 
 /**

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessageResultRequest.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessageResultRequest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessageResultRequest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,7 +25,7 @@
 import java.io.DataOutputStream;
 
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageFactory;
 
 /**

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessagesRequest.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessagesRequest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PullMessagesRequest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -119,7 +119,7 @@
       //We store the channelID of one of the channels that the message was persisted in
       //it doesn't matter which one since they were all inserted in the same tx
       
-      if (office.referenceExistsInStorage(checkChannelID, reliableDelivery.getReference().getMessageID()))
+      if (office.referenceExistsInStorage(checkChannelID, reliableDelivery.getReference().getMessage().getMessageID()))
       {
          //We should rollback
          return false;

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,9 +28,9 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
 
@@ -86,13 +86,13 @@
    {
       if (trace) { log.trace(this + " handling " + reference); }
 
-      if (filter != null && !filter.accept(reference))
+      if (filter != null && !filter.accept(reference.getMessage()))
       {
          if (trace) { log.trace(this + " rejecting " + reference + " because it doesn't match filter"); }
          return new SimpleDelivery(this, reference, false, false);
       }
 
-      if (recoverable && reference.isReliable())
+      if (recoverable && reference.getMessage().isReliable())
       {
          try
          {
@@ -144,7 +144,7 @@
 
    public void acknowledge(Delivery d, Transaction tx) throws Throwable
    {
-      if (recoverable && d.getReference().isReliable())
+      if (recoverable && d.getReference().getMessage().isReliable())
       {
          pm.removeReference(this.channelID, d.getReference(), tx);
       }

Modified: trunk/src/main/org/jboss/messaging/core/tx/TransactionRepository.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/tx/TransactionRepository.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/core/tx/TransactionRepository.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -30,10 +30,10 @@
 
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Delivery;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.MessagingComponent;
@@ -315,7 +315,7 @@
             
             Queue queue = binding.getQueue();
                         
-            if (trace) log.trace("Destination for message[ID=" + ref.getMessageID() + "] is: " + queue);
+            if (trace) log.trace("Destination for message[ID=" + ref.getMessage().getMessageID() + "] is: " + queue);
    
             queue.handle(null, ref, tx);
          }
@@ -367,7 +367,7 @@
             
             Queue queue = binding.getQueue();
    
-            if (trace) log.trace("Destination for message[ID=" + ref.getMessageID() + "] is: " + queue);
+            if (trace) log.trace("Destination for message[ID=" + ref.getMessage().getMessageID() + "] is: " + queue);
    
             //Create a new delivery - note that it must have a delivery observer otherwise acknowledge will fail
             Delivery del = new SimpleDelivery(queue, ref);

Modified: trunk/src/main/org/jboss/messaging/util/StreamUtils.java
===================================================================
--- trunk/src/main/org/jboss/messaging/util/StreamUtils.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/src/main/org/jboss/messaging/util/StreamUtils.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -36,11 +36,10 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.jboss.jms.destination.JBossDestination;
 import org.jboss.serial.io.JBossObjectInputStream;
 import org.jboss.serial.io.JBossObjectOutputStream;
 
-
-
 /**
  * A StreamUtils
  *
@@ -82,6 +81,8 @@
    
    public static final byte SERIALIZABLE = 12;
    
+   public static final byte DESTINATION = 13;
+   
    private static boolean useJBossSerialization = false;
    
    public static void setUseJBossSerialization(boolean use)
@@ -114,6 +115,11 @@
                value = in.readUTF();
             }
             break;
+         case DESTINATION:
+         {
+            value = JBossDestination.readDestination(in);
+            break;
+         }
          case MAP:
          {
             value = readMap(in, false);
@@ -164,7 +170,6 @@
             }
                         
             value = (Serializable)ois.readObject();
-            ois.close();
             break;
          }              
          default :
@@ -197,6 +202,11 @@
             out.writeUTF((String)object);
          }
       }
+      else if (object instanceof JBossDestination)
+      {
+         out.writeByte(DESTINATION);
+         JBossDestination.writeDestination(out, (JBossDestination)object);
+      }
       else if (containerTypes && object instanceof Map)
       {
          out.writeByte(MAP);
@@ -264,7 +274,7 @@
          }
                   
          oos.writeObject(object);
-         oos.close();
+         oos.flush();
       }
       else
       {
@@ -310,21 +320,11 @@
          }
          else
          {
-            if (!(me.getKey() instanceof Serializable))
-            {
-               throw new IOException("Key in map must be Serializable: " + me.getKey());
-            }
-            writeObject(out, (Serializable)me.getKey(), false, false);
+            writeObject(out, me.getKey(), false, false);
          }
-
-         Object value = me.getValue();
-         if (value != null && !(value instanceof Serializable))
-         {
-            throw new IOException("Value in map must be Serializable: " + value);
-         }
-         
+        
          // write the value
-         writeObject(out, (Serializable)value, false, false);
+         writeObject(out, me.getValue(), false, false);
       }      
    }
    

Modified: trunk/tests/build.xml
===================================================================
--- trunk/tests/build.xml	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/build.xml	2007-02-08 10:50:26 UTC (rev 2202)
@@ -366,10 +366,13 @@
            default remoting configuration (socket)
       -->
       <antcall target="remote-tests"/>
+      <!--
       <antcall target="remote-tests">
          <param name="test.remoting" value="http"/>
       </antcall>
+      -->
       <antcall target="clustering-tests"/>
+
    </target>
 
    <target name="http-tests" depends="tests-jar, prepare-testdirs, clear-test-logs">
@@ -635,6 +638,9 @@
             <fileset dir="${build.tests.classes}">
                <include name="**/jms/**/*Test.class"/>
                <include name="**/thirdparty/**/*Test.class"/>
+
+               <exclude name="**/jms/bridge/**/*Test.class"/>
+
                <exclude name="**/messaging/graveyard/**/*Test.class"/>
                <exclude name="**/jms/WireFormatTest.class"/>
                <exclude name="**/jms/stress/**"/>

Modified: trunk/tests/etc/log4j.xml
===================================================================
--- trunk/tests/etc/log4j.xml	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/etc/log4j.xml	2007-02-08 10:50:26 UTC (rev 2202)
@@ -47,8 +47,8 @@
    </category>
 
    <category name="org.jboss.remoting">
-      <!-- <priority value="TRACE" class="org.jboss.logging.XLevel"/> -->
-      <priority value="DEBUG"/>
+      <priority value="TRACE" class="org.jboss.logging.XLevel"/>
+      <!-- <priority value="DEBUG"/> -->
    </category>
 
    <category name="org.jboss">
@@ -82,7 +82,8 @@
    </category>
 
    <category name="org.jboss.jms.server.remoting.JMSWireFormat">
-      <priority value="DEBUG"/>
+      <priority value="TRACE" class="org.jboss.logging.XLevel"/>
+      <!-- <priority value="DEBUG"/> -->
    </category>
 
    <root>

Modified: trunk/tests/src/org/jboss/test/messaging/MessagingTestCase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/MessagingTestCase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/MessagingTestCase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -181,7 +181,7 @@
       try
       {
          conn = ds.getConnection();
-         String sql = "SELECT * FROM JMS_POSTOFFICE";
+         String sql = "SELECT * FROM JBM_POSTOFFICE";
          ps = conn.prepareStatement(sql);
          
          rs = ps.executeQuery();
@@ -232,7 +232,7 @@
       try
       {
          conn = ds.getConnection();
-         String sql = "SELECT * FROM JMS_MESSAGE_REFERENCE";
+         String sql = "SELECT * FROM JBM_MSG_REF";
          ps = conn.prepareStatement(sql);
          
          rs = ps.executeQuery();
@@ -245,7 +245,7 @@
             
             ps.close();
             
-            ps = conn.prepareStatement("SELECT * FROM JMS_MESSAGE");
+            ps = conn.prepareStatement("SELECT * FROM JBM_MSG");
             
             rs = ps.executeQuery();
            

Modified: trunk/tests/src/org/jboss/test/messaging/core/BrokenReceiver.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/BrokenReceiver.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/BrokenReceiver.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -27,9 +27,9 @@
 
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 
 

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -16,8 +16,8 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.util.NotYetImplementedException;

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleCondition.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleCondition.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleCondition.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,7 +21,7 @@
  */
 package org.jboss.test.messaging.core;
 
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.Condition;
 
 /**

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -24,9 +24,9 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionRepository;

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleFilter.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleFilter.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleFilter.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -22,7 +22,7 @@
 package org.jboss.test.messaging.core;
 
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.Routable;
+import org.jboss.messaging.core.message.Message;
 
 /**
  * A SimpleFilter
@@ -42,9 +42,9 @@
       this.idMatch = idMatch;
    }
 
-   public boolean accept(Routable routable)
+   public boolean accept(Message message)
    {
-      return routable.getMessageID() == idMatch;
+      return message.getMessageID() == idMatch;
    }
 
    public String getFilterString()

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -31,11 +31,10 @@
 import org.jboss.messaging.core.Channel;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
-import org.jboss.messaging.core.Routable;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TxCallback;
 import org.jboss.util.id.GUID;
@@ -296,7 +295,7 @@
       }
    }
 
-   public void acknowledge(Routable r, Transaction tx) throws Throwable
+   public void acknowledge(Message r, Transaction tx) throws Throwable
    {
       log.debug(this + " acknowledging "  + r);
 
@@ -336,7 +335,7 @@
       }
    }
 
-   public void cancel(Routable r) throws Throwable
+   public void cancel(Message r) throws Throwable
    {
       Object[] touple = null;
       Delivery d = null;

Modified: trunk/tests/src/org/jboss/test/messaging/core/local/RoundRobinPointToPointRouterTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/local/RoundRobinPointToPointRouterTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/local/RoundRobinPointToPointRouterTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,14 +23,18 @@
 
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.Router;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.RoundRobinPointToPointRouter;
-import org.jboss.messaging.core.plugin.SimpleMessageReference;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageReference;
+import org.jboss.messaging.core.message.SimpleMessageStore;
+import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.MessagingTestCase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
 /**
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
@@ -45,6 +49,8 @@
    // Static --------------------------------------------------------
    
    // Attributes ----------------------------------------------------
+   
+   protected MessageStore ms;
 
    // Constructors --------------------------------------------------
 
@@ -58,11 +64,17 @@
    public void setUp() throws Exception
    {
       super.setUp();
+      
+      ms = new SimpleMessageStore();
+      
+      ms.start();
    }
 
    public void tearDown() throws Exception
    {
       super.tearDown();
+      
+      ms.stop();
    }
 
    // Public --------------------------------------------------------
@@ -82,8 +94,10 @@
          router.add(receivers[i]);
       }
       
-      MessageReference ref = new SimpleMessageReference();
+      Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
       
+      MessageReference ref = ms.reference(msg);
+            
       Delivery del = router.handle(null, ref, null);
       assertNotNull(del);
       checkReceiverGotRef(receivers, 0);
@@ -173,8 +187,10 @@
       
       receivers[9].closed = true;
       
-      MessageReference ref = new SimpleMessageReference();
+      Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
       
+      MessageReference ref = ms.reference(msg);
+      
       Delivery del = router.handle(null, ref, null);
       assertNotNull(del);
       checkReceiverGotRef(receivers, 0);
@@ -246,8 +262,10 @@
       }
       
       
-      MessageReference ref = new SimpleMessageReference();
+      Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
       
+      MessageReference ref = ms.reference(msg);
+      
       Delivery del = router.handle(null, ref, null);
       assertNull(del);
 
@@ -283,8 +301,10 @@
       
       receivers[9].selectorMatches = false;
       
-      MessageReference ref = new SimpleMessageReference();
+      Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
       
+      MessageReference ref = ms.reference(msg);
+      
       Delivery del = router.handle(null, ref, null);
       assertNotNull(del);
       checkReceiverGotRef(receivers, 0);
@@ -355,8 +375,10 @@
       }
       
       
-      MessageReference ref = new SimpleMessageReference();
+      Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
       
+      MessageReference ref = ms.reference(msg);
+      
       Delivery del = router.handle(null, ref, null);
       assertNotNull(del);
       assertFalse(del.isSelectorAccepted());
@@ -375,8 +397,10 @@
    {
       Router router = new RoundRobinPointToPointRouter();
 
-      MessageReference ref = new SimpleMessageReference();
+      Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
       
+      MessageReference ref = ms.reference(msg);
+      
       Delivery del = router.handle(null, ref, null);
       assertNull(del);
       
@@ -403,7 +427,12 @@
          public void run()
          {
             // sends the message to the router on a separate thread
-            router.handle(null, new SimpleMessageReference(), null);
+            
+            Message msg = CoreMessageFactory.createCoreMessage(123, true, null);
+            
+            MessageReference ref = ms.reference(msg);
+            
+            router.handle(null, ref, null);
          }
       }, "Message sending thread");
 

Modified: trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,14 +28,14 @@
 
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
 import org.jboss.messaging.core.message.CoreMessage;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
@@ -159,8 +159,7 @@
             Object o = j.next();
             Message m = (Message)o;
             
-
-            if (a[i].getMessageID() == m.getMessageID() &&
+            if (a[i].getMessage().getMessageID() == m.getMessageID() &&
                 m.getPayload().equals(a[i].getMessage().getPayload()))
             {
                j.remove();
@@ -187,7 +186,7 @@
             Delivery d = (Delivery)j.next();
             MessageReference ref = d.getReference();
 
-            if (a[i].getReference().getMessageID() == ref.getMessageID())
+            if (a[i].getReference().getMessage().getMessageID() == ref.getMessage().getMessageID())
             {
                j.remove();
                break;
@@ -541,6 +540,8 @@
 
       MessageReference ref = createReference(0, true, "payload");
       SimpleDeliveryObserver observer = new SimpleDeliveryObserver();
+      
+      log.info("ref is reliable:" + ref.getMessage().isReliable());
 
       // non-transacted send, reliable message, one message
       Delivery delivery = queue.handle(observer, ref, null);

Modified: trunk/tests/src/org/jboss/test/messaging/core/message/CoreMessageTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/message/CoreMessageTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/message/CoreMessageTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,7 +21,7 @@
 */
 package org.jboss.test.messaging.core.message;
 
-import org.jboss.test.messaging.core.message.base.MessageSupportTestBase;
+import org.jboss.test.messaging.core.message.base.RoutableSupportTestBase;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 
 
@@ -31,7 +31,7 @@
  *
  * $Id$
  */
-public class CoreMessageTest extends MessageSupportTestBase
+public class CoreMessageTest extends RoutableSupportTestBase
 {
    // Constants -----------------------------------------------------
 
@@ -54,7 +54,7 @@
 
    protected void setUp() throws Exception
    {
-      rs = CoreMessageFactory.createCoreMessage(0);
+      ms = CoreMessageFactory.createCoreMessage(0);
 
       super.setUp();
 
@@ -64,7 +64,7 @@
    protected void tearDown() throws Exception
    {
       super.tearDown();
-      rs = null;
+      ms = null;
    }
 
    // Private -------------------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/core/message/JBossMessageTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/message/JBossMessageTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/message/JBossMessageTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -24,7 +24,7 @@
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.messaging.core.message.MessageFactory;
 import org.jboss.messaging.core.message.MessageSupport;
-import org.jboss.test.messaging.core.message.base.MessageSupportTestBase;
+import org.jboss.test.messaging.core.message.base.RoutableSupportTestBase;
 
 
 /**
@@ -33,7 +33,7 @@
  *
  * $Id$
  */
-public class JBossMessageTest extends MessageSupportTestBase
+public class JBossMessageTest extends RoutableSupportTestBase
 {
    // Constants -----------------------------------------------------
 
@@ -56,9 +56,8 @@
 
    protected void setUp() throws Exception
    {
-      rs = (MessageSupport)MessageFactory.createMessage(0, false, 0, 0, (byte)4, null,
-                                                             null, JBossMessage.TYPE,
-                                                             null, null, null, null, null, 0, null);
+      ms = (MessageSupport)MessageFactory.createMessage(0, false, 0, 0, (byte)4, null,
+                                                             null, JBossMessage.TYPE);
       super.setUp();
       log.debug("setup done");
    }
@@ -66,7 +65,7 @@
    protected void tearDown() throws Exception
    {
       super.tearDown();
-      rs = null;
+      ms = null;
    }
 
    // Private -------------------------------------------------------

Deleted: trunk/tests/src/org/jboss/test/messaging/core/message/SimpleMessageReferenceTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/message/SimpleMessageReferenceTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/message/SimpleMessageReferenceTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,93 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* 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.test.messaging.core.message;
-
-import java.util.Set;
-
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.message.RoutableSupport;
-import org.jboss.messaging.core.plugin.SimpleMessageReference;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
-import org.jboss.messaging.core.plugin.contract.MessageStore;
-import org.jboss.test.messaging.core.message.base.RoutableSupportTestBase;
-import org.jboss.test.messaging.util.CoreMessageFactory;
-
-/**
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public class SimpleMessageReferenceTest extends RoutableSupportTestBase
-{
-   // Constants -----------------------------------------------------
-
-   // Static --------------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   public SimpleMessageReferenceTest(String name)
-   {
-      super(name);
-   }
-
-   // Public --------------------------------------------------------
-
-   public void testHeader()
-   {
-      SimpleMessageReference ref = (SimpleMessageReference)rs;
-      Set headerNames = ref.getHeaderNames();
-      assertTrue(headerNames.contains("headerName01"));
-      assertEquals("headerValue01", ref.getHeader("headerName01"));
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   protected void setUp() throws Exception
-   {
-      Message m = CoreMessageFactory.createCoreMessage(0);
-      m.putHeader("headerName01", "headerValue01");
-
-      MessageStore ms = new SimpleMessageStore();
-
-      rs = (RoutableSupport)ms.reference(m);
-
-      super.setUp();
-
-      log.debug("setup done");
-   }
-
-   protected void tearDown() throws Exception
-   {
-      super.tearDown();
-      rs = null;
-   }
-
-   // Private -------------------------------------------------------
-
-   // Inner classes -------------------------------------------------
-
-}

Deleted: trunk/tests/src/org/jboss/test/messaging/core/message/base/MessageSupportTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/message/base/MessageSupportTestBase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/message/base/MessageSupportTestBase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1,65 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* 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.test.messaging.core.message.base;
-
-/**
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- */
-public class MessageSupportTestBase extends RoutableSupportTestBase
-{
-   // Constants -----------------------------------------------------
-
-   // Static --------------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   public MessageSupportTestBase(String name)
-   {
-      super(name);
-   }
-
-   // Public --------------------------------------------------------
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   protected void setUp() throws Exception
-   {
-      super.setUp();
-   }
-
-   protected void tearDown() throws Exception
-   {
-      super.tearDown();
-   }
-
-   // Private -------------------------------------------------------
-
-   // Inner classes -------------------------------------------------
-
-}

Modified: trunk/tests/src/org/jboss/test/messaging/core/message/base/RoutableSupportTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/message/base/RoutableSupportTestBase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/message/base/RoutableSupportTestBase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -21,8 +21,8 @@
 */
 package org.jboss.test.messaging.core.message.base;
 
+import org.jboss.messaging.core.message.MessageSupport;
 import org.jboss.test.messaging.MessagingTestCase;
-import org.jboss.messaging.core.message.RoutableSupport;
 
 
 /**
@@ -39,7 +39,7 @@
 
    // Attributes ----------------------------------------------------
 
-   protected RoutableSupport rs;
+   protected MessageSupport ms;
 
    // Constructors --------------------------------------------------
 
@@ -52,11 +52,11 @@
 
    public void testNullAsHeaderValue() throws Exception
    {
-      rs.putHeader("someHeader", null);
-      assertTrue(rs.containsHeader("someHeader"));
-      assertNull(rs.getHeader("someHeader"));
-      assertNull(rs.removeHeader("someHeader"));
-      assertFalse(rs.containsHeader("someHeader"));
+      ms.putHeader("someHeader", null);
+      assertTrue(ms.containsHeader("someHeader"));
+      assertNull(ms.getHeader("someHeader"));
+      assertNull(ms.removeHeader("someHeader"));
+      assertFalse(ms.containsHeader("someHeader"));
    }
 
    // Package protected ---------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,9 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,9 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,9 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,9 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,9 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,9 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,8 +23,8 @@
 
 import org.jboss.messaging.core.local.PagingFilteredQueue;
 import org.jboss.messaging.core.message.CoreMessage;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.test.messaging.MessagingTestCase;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,10 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,10 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,10 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,10 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,10 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,10 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.util.CoreMessageFactory;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,12 +23,12 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
 import org.jboss.messaging.core.plugin.LockMap;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.tx.TransactionRepository;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -35,12 +35,12 @@
 import org.jboss.messaging.core.Channel;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionRepository;
@@ -138,7 +138,7 @@
       while (iter.hasNext())
       {
          Long id = (Long)iter.next();
-         assertEquals(refs[i].getMessageID(), id.longValue());
+         assertEquals(refs[i].getMessage().getMessageID(), id.longValue());
          i++;
       }
    }
@@ -183,7 +183,7 @@
             return null;
          }
          
-         assertEquals(refs[consumeCount + count].getMessageID(), ref.getMessageID());
+         assertEquals(refs[consumeCount + count].getMessage().getMessageID(), ref.getMessage().getMessageID());
          
          SimpleDelivery del = new SimpleDelivery(observer, ref);
          
@@ -429,7 +429,7 @@
       List msgIds = new ArrayList();
 
       String sql =
-         "SELECT MESSAGEID, ORD, PAGE_ORD FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID=? ORDER BY ORD";
+         "SELECT MESSAGE_ID, ORD, PAGE_ORD FROM JBM_MSG_REF WHERE CHANNEL_ID=? ORDER BY ORD";
       PreparedStatement ps = conn.prepareStatement(sql);
       ps.setLong(1, channelId);
    
@@ -472,7 +472,7 @@
       List msgIds = new ArrayList();
  
       String sql =
-         "SELECT MESSAGEID, ORD, PAGE_ORD FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID=? ORDER BY PAGE_ORD";
+         "SELECT MESSAGE_ID, ORD, PAGE_ORD FROM JBM_MSG_REF WHERE CHANNEL_ID=? ORDER BY PAGE_ORD";
       PreparedStatement ps = conn.prepareStatement(sql);
       ps.setLong(1, channelId);
    
@@ -512,8 +512,8 @@
 
       Connection conn = ds.getConnection();
       String sql =
-         "SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE " +
-         "CHANNELID=? AND PAGE_ORD IS NOT NULL ORDER BY PAGE_ORD";
+         "SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE " +
+         "CHANNEL_ID=? AND PAGE_ORD IS NOT NULL ORDER BY PAGE_ORD";
 
       PreparedStatement ps = conn.prepareStatement(sql);
       ps.setLong(1, channelId);
@@ -552,7 +552,7 @@
       mgr.begin();
 
       Connection conn = ds.getConnection();
-      String sql = "SELECT MESSAGEID FROM JMS_MESSAGE ORDER BY MESSAGEID";
+      String sql = "SELECT MESSAGE_ID FROM JBM_MSG ORDER BY MESSAGE_ID";
       PreparedStatement ps = conn.prepareStatement(sql);
       
       ResultSet rs = ps.executeQuery();

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/JDBCPersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/JDBCPersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/JDBCPersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -37,11 +37,11 @@
 import javax.transaction.xa.Xid;
 
 import org.jboss.messaging.core.Channel;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
@@ -350,56 +350,56 @@
       List refIds = getReferenceIds(channel1.getChannelID());
       assertNotNull(refIds);
       assertEquals(10, refIds.size());
-      assertTrue(refIds.contains(new Long(ref1.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref2.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref3.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref4.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref5.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref6.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref7.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref8.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref9.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref10.getMessageID())));
+      assertTrue(refIds.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref10.getMessage().getMessageID())));
       
       refIds = getReferenceIds(channel2.getChannelID());
       assertNotNull(refIds);
       assertEquals(5, refIds.size());
-      assertTrue(refIds.contains(new Long(ref11.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref12.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref13.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref14.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref15.getMessageID())));
+      assertTrue(refIds.contains(new Long(ref11.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref12.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref13.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref14.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref15.getMessage().getMessageID())));
      
       
       List msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(10, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref3.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref4.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref5.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref6.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref7.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref8.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref9.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref10.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref10.getMessage().getMessageID())));
       
       List msgIds = new ArrayList();
-      msgIds.add(new Long(ref3.getMessageID()));
-      msgIds.add(new Long(ref4.getMessageID()));
-      msgIds.add(new Long(ref7.getMessageID()));
-      msgIds.add(new Long(ref9.getMessageID()));
-      msgIds.add(new Long(ref1.getMessageID()));
+      msgIds.add(new Long(ref3.getMessage().getMessageID()));
+      msgIds.add(new Long(ref4.getMessage().getMessageID()));
+      msgIds.add(new Long(ref7.getMessage().getMessageID()));
+      msgIds.add(new Long(ref9.getMessage().getMessageID()));
+      msgIds.add(new Long(ref1.getMessage().getMessageID()));
       
       List ms = pm.getMessages(msgIds);
       assertNotNull(ms);
       assertEquals(5, ms.size());
-      assertTrue(containsMessage(ms, ref3.getMessageID()));
-      assertTrue(containsMessage(ms, ref4.getMessageID()));
-      assertTrue(containsMessage(ms, ref7.getMessageID()));
-      assertTrue(containsMessage(ms, ref9.getMessageID()));
-      assertTrue(containsMessage(ms, ref1.getMessageID()));
+      assertTrue(containsMessage(ms, ref3.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref4.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref7.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref9.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref1.getMessage().getMessageID()));
       
       refs = new ArrayList();
       refs.add(ref12);
@@ -411,23 +411,23 @@
       refIds = getReferenceIds(channel2.getChannelID());
       assertNotNull(refIds);
       assertEquals(1, refIds.size());
-      assertTrue(refIds.contains(new Long(ref11.getMessageID())));
+      assertTrue(refIds.contains(new Long(ref11.getMessage().getMessageID())));
       
       ms = getMessageIds();
 
       assertNotNull(ms);
       assertEquals(10, ms.size());
       
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref3.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref4.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref5.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref6.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref7.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref8.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref9.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref10.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref10.getMessage().getMessageID())));
      
       
       refs = new ArrayList();
@@ -439,13 +439,13 @@
       refIds = getReferenceIds(channel1.getChannelID());
       assertNotNull(refIds);
       assertEquals(7, refIds.size());
-      assertTrue(refIds.contains(new Long(ref4.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref5.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref6.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref7.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref8.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref9.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref10.getMessageID())));
+      assertTrue(refIds.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref10.getMessage().getMessageID())));
      
       
       ms = getMessageIds();
@@ -453,14 +453,14 @@
       assertNotNull(ms);
       assertEquals(8, ms.size());
       
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref4.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref5.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref6.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref7.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref8.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref9.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref10.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref10.getMessage().getMessageID())));
       
       refs = new ArrayList();
       refs.add(ref11);
@@ -534,16 +534,16 @@
       
       assertEquals(10, refInfos.size());
       
-      assertEquals(ref1.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
-      assertEquals(ref2.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
-      assertEquals(ref3.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
-      assertEquals(ref4.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
-      assertEquals(ref5.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());
-      assertEquals(ref6.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(5)).getMessageId());
-      assertEquals(ref7.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(6)).getMessageId());
-      assertEquals(ref8.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(7)).getMessageId());
-      assertEquals(ref9.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(8)).getMessageId());
-      assertEquals(ref10.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(9)).getMessageId());
+      assertEquals(ref1.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
+      assertEquals(ref2.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
+      assertEquals(ref3.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
+      assertEquals(ref4.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
+      assertEquals(ref5.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());
+      assertEquals(ref6.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(5)).getMessageId());
+      assertEquals(ref7.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(6)).getMessageId());
+      assertEquals(ref8.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(7)).getMessageId());
+      assertEquals(ref9.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(8)).getMessageId());
+      assertEquals(ref10.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(9)).getMessageId());
       
       refInfos = pm.getPagedReferenceInfos(channel.getChannelID(), 3, 5);
       
@@ -551,13 +551,13 @@
       
       assertEquals(5, refInfos.size());
       
-      assertEquals(ref4.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
-      assertEquals(ref5.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
-      assertEquals(ref6.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
-      assertEquals(ref7.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
-      assertEquals(ref8.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());
+      assertEquals(ref4.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
+      assertEquals(ref5.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
+      assertEquals(ref6.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
+      assertEquals(ref7.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
+      assertEquals(ref8.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());
     
-      pm.updateReliableReferencesNotPagedInRange(channel.getChannelID(), 0, 3, 4);
+      pm.updateReferencesNotPagedInRange(channel.getChannelID(), 0, 3, 4);
       
       refInfos = pm.getPagedReferenceInfos(channel.getChannelID(), 5, 5);
       
@@ -565,11 +565,11 @@
       
       assertEquals(5, refInfos.size());
           
-      assertEquals(ref6.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
-      assertEquals(ref7.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
-      assertEquals(ref8.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
-      assertEquals(ref9.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
-      assertEquals(ref10.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());                
+      assertEquals(ref6.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
+      assertEquals(ref7.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
+      assertEquals(ref8.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
+      assertEquals(ref9.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
+      assertEquals(ref10.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());                
    }
      
    public void testGetMessages() throws Throwable
@@ -605,47 +605,47 @@
       List refIds = getReferenceIds(channel.getChannelID());
       assertNotNull(refIds);
       assertEquals(10, refIds.size());
-      assertTrue(refIds.contains(new Long(ref1.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref2.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref3.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref4.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref5.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref6.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref7.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref8.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref9.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref10.getMessageID())));
+      assertTrue(refIds.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref10.getMessage().getMessageID())));
       
       List msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(10, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref3.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref4.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref5.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref6.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref7.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref8.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref9.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref10.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref10.getMessage().getMessageID())));
       
       List msgIds = new ArrayList();
-      msgIds.add(new Long(ref3.getMessageID()));
-      msgIds.add(new Long(ref4.getMessageID()));
-      msgIds.add(new Long(ref7.getMessageID()));
-      msgIds.add(new Long(ref9.getMessageID()));
-      msgIds.add(new Long(ref1.getMessageID()));
+      msgIds.add(new Long(ref3.getMessage().getMessageID()));
+      msgIds.add(new Long(ref4.getMessage().getMessageID()));
+      msgIds.add(new Long(ref7.getMessage().getMessageID()));
+      msgIds.add(new Long(ref9.getMessage().getMessageID()));
+      msgIds.add(new Long(ref1.getMessage().getMessageID()));
       
       List ms = pm.getMessages(msgIds);
       assertNotNull(ms);
       assertEquals(5, ms.size());
         
-      assertTrue(containsMessage(ms, ref3.getMessageID()));
-      assertTrue(containsMessage(ms, ref4.getMessageID()));
-      assertTrue(containsMessage(ms, ref7.getMessageID()));
-      assertTrue(containsMessage(ms, ref9.getMessageID()));
-      assertTrue(containsMessage(ms, ref1.getMessageID()));
+      assertTrue(containsMessage(ms, ref3.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref4.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref7.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref9.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref1.getMessage().getMessageID()));
         
    }
    
@@ -694,16 +694,16 @@
       assertNotNull(refInfos);
       assertEquals(10, refInfos.size());
       
-      assertEquals(ref1.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
-      assertEquals(ref2.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
-      assertEquals(ref3.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
-      assertEquals(ref4.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
-      assertEquals(ref5.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());
-      assertEquals(ref6.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(5)).getMessageId());
-      assertEquals(ref7.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(6)).getMessageId());
-      assertEquals(ref8.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(7)).getMessageId());
-      assertEquals(ref9.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(8)).getMessageId());
-      assertEquals(ref10.getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(9)).getMessageId());          
+      assertEquals(ref1.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(0)).getMessageId());
+      assertEquals(ref2.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(1)).getMessageId());
+      assertEquals(ref3.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(2)).getMessageId());
+      assertEquals(ref4.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(3)).getMessageId());
+      assertEquals(ref5.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(4)).getMessageId());
+      assertEquals(ref6.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(5)).getMessageId());
+      assertEquals(ref7.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(6)).getMessageId());
+      assertEquals(ref8.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(7)).getMessageId());
+      assertEquals(ref9.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(8)).getMessageId());
+      assertEquals(ref10.getMessage().getMessageID(), ((PersistenceManager.ReferenceInfo)refInfos.get(9)).getMessageId());          
    }
       
    
@@ -754,46 +754,46 @@
       List refIds = getReferenceIds(channel.getChannelID());
       assertNotNull(refIds);
       assertEquals(10, refIds.size());
-      assertTrue(refIds.contains(new Long(ref1.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref2.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref3.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref4.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref5.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref6.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref7.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref8.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref9.getMessageID())));
-      assertTrue(refIds.contains(new Long(ref10.getMessageID())));
+      assertTrue(refIds.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(refIds.contains(new Long(ref10.getMessage().getMessageID())));
       
       List msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(10, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref3.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref4.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref5.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref6.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref7.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref8.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref9.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref10.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref5.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref6.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref7.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref8.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref9.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref10.getMessage().getMessageID())));
       
       List msgIds = new ArrayList();
-      msgIds.add(new Long(ref3.getMessageID()));
-      msgIds.add(new Long(ref4.getMessageID()));
-      msgIds.add(new Long(ref7.getMessageID()));
-      msgIds.add(new Long(ref9.getMessageID()));
-      msgIds.add(new Long(ref1.getMessageID()));
+      msgIds.add(new Long(ref3.getMessage().getMessageID()));
+      msgIds.add(new Long(ref4.getMessage().getMessageID()));
+      msgIds.add(new Long(ref7.getMessage().getMessageID()));
+      msgIds.add(new Long(ref9.getMessage().getMessageID()));
+      msgIds.add(new Long(ref1.getMessage().getMessageID()));
       
       List ms = pm.getMessages(msgIds);
       assertNotNull(ms);
       assertEquals(5, ms.size());
-      assertTrue(containsMessage(ms, ref3.getMessageID()));
-      assertTrue(containsMessage(ms, ref4.getMessageID()));
-      assertTrue(containsMessage(ms, ref7.getMessageID()));
-      assertTrue(containsMessage(ms, ref9.getMessageID()));
-      assertTrue(containsMessage(ms, ref1.getMessageID()));   
+      assertTrue(containsMessage(ms, ref3.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref4.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref7.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref9.getMessage().getMessageID()));
+      assertTrue(containsMessage(ms, ref1.getMessage().getMessageID()));   
    }
    
    
@@ -878,13 +878,11 @@
       
       //Attributes from org.jboss.messaging.core.Message
       assertEquals(m1.getMessageID(), m2.getMessageID());
-      assertEquals(m1.isReference(), m2.isReference());
       assertEquals(m1.isReliable(), m2.isReliable());
       assertEquals(m1.getExpiration(), m2.getExpiration());
       assertEquals(m1.isExpired(), m2.isExpired());
       assertEquals(m1.getTimestamp(), m2.getTimestamp());
       assertEquals(m1.getPriority(), m2.getPriority());
-      assertEquals(m1.getDeliveryCount(), m2.getDeliveryCount());
       Map m1Headers = m1.getHeaders();
       Map m2Headers = m2.getHeaders();
       checkMapsEquivalent(m1Headers, m2Headers);
@@ -1211,14 +1209,14 @@
       List refs = getReferenceIds(channel.getChannelID());
       assertNotNull(refs);
       assertEquals(2, refs.size());
-      assertTrue(refs.contains(new Long(ref1.getMessageID())));
-      assertTrue(refs.contains(new Long(ref2.getMessageID())));
+      assertTrue(refs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refs.contains(new Long(ref2.getMessage().getMessageID())));
       
       List msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(2, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
 
       log.debug("ref1 and ref2 are there");
 
@@ -1235,14 +1233,14 @@
       refs = getReferenceIds(channel.getChannelID());
       assertNotNull(refs);
       assertEquals(2, refs.size());
-      assertTrue(refs.contains(new Long(ref1.getMessageID())));
-      assertTrue(refs.contains(new Long(ref2.getMessageID())));  
+      assertTrue(refs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refs.contains(new Long(ref2.getMessage().getMessageID())));  
       
       msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(2, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
       
       //commit transaction
       tx.commit();
@@ -1253,16 +1251,16 @@
       refs = getReferenceIds(channel.getChannelID());
       assertNotNull(refs);
       assertEquals(3, refs.size()); 
-      assertTrue(refs.contains(new Long(ref3.getMessageID())));
-      assertTrue(refs.contains(new Long(ref4.getMessageID())));  
-      assertTrue(refs.contains(new Long(ref5.getMessageID())));
+      assertTrue(refs.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(refs.contains(new Long(ref4.getMessage().getMessageID())));  
+      assertTrue(refs.contains(new Long(ref5.getMessage().getMessageID())));
       
       msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(3, msgs.size());
-      assertTrue(msgs.contains(new Long(ref3.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref4.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref5.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref3.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref4.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref5.getMessage().getMessageID())));
    }
          
    protected void doTransactionRollback(boolean xa, boolean batch) throws Throwable
@@ -1310,14 +1308,14 @@
       List refs = getReferenceIds(channel.getChannelID());
       assertNotNull(refs);
       assertEquals(2, refs.size());
-      assertTrue(refs.contains(new Long(ref1.getMessageID())));
-      assertTrue(refs.contains(new Long(ref2.getMessageID())));      
+      assertTrue(refs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refs.contains(new Long(ref2.getMessage().getMessageID())));      
       
       List msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(2, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
       
       
       
@@ -1334,14 +1332,14 @@
       refs = getReferenceIds(channel.getChannelID());
       assertNotNull(refs);
       assertEquals(2, refs.size());
-      assertTrue(refs.contains(new Long(ref1.getMessageID())));
-      assertTrue(refs.contains(new Long(ref2.getMessageID())));  
+      assertTrue(refs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refs.contains(new Long(ref2.getMessage().getMessageID())));  
       
       msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(2, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));
       
       //rollback transaction
       tx.rollback();
@@ -1349,14 +1347,14 @@
       refs = getReferenceIds(channel.getChannelID());
       assertNotNull(refs);
       assertEquals(2, refs.size());
-      assertTrue(refs.contains(new Long(ref1.getMessageID())));
-      assertTrue(refs.contains(new Long(ref2.getMessageID())));  
+      assertTrue(refs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(refs.contains(new Long(ref2.getMessage().getMessageID())));  
       
       msgs = getMessageIds();
       assertNotNull(msgs);
       assertEquals(2, msgs.size());
-      assertTrue(msgs.contains(new Long(ref1.getMessageID())));
-      assertTrue(msgs.contains(new Long(ref2.getMessageID())));          
+      assertTrue(msgs.contains(new Long(ref1.getMessage().getMessageID())));
+      assertTrue(msgs.contains(new Long(ref2.getMessage().getMessageID())));          
    }
    
    
@@ -1371,7 +1369,7 @@
       mgr.begin();
 
       Connection conn = ds.getConnection();
-      String sql = "SELECT MESSAGEID FROM JMS_MESSAGE_REFERENCE WHERE CHANNELID=? ORDER BY ORD";
+      String sql = "SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE CHANNEL_ID=? ORDER BY ORD";
       PreparedStatement ps = conn.prepareStatement(sql);
       ps.setLong(1, channelId);
    
@@ -1409,7 +1407,7 @@
       mgr.begin();
 
       Connection conn = ds.getConnection();
-      String sql = "SELECT MESSAGEID FROM JMS_MESSAGE ORDER BY MESSAGEID";
+      String sql = "SELECT MESSAGE_ID FROM JBM_MSG ORDER BY MESSAGE_ID";
       PreparedStatement ps = conn.prepareStatement(sql);
       
       ResultSet rs = ps.executeQuery();

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/SimpleMessageStoreTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/SimpleMessageStoreTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/SimpleMessageStoreTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,7 +23,7 @@
 
 import org.jboss.test.messaging.core.plugin.base.MessageStoreTestBase;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 
 /**
  * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/base/MessageStoreTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/base/MessageStoreTestBase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/base/MessageStoreTestBase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,11 +25,11 @@
 import java.util.Iterator;
 import java.util.Map;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.test.messaging.MessagingTestCase;
 import org.jboss.test.messaging.tools.jmx.ServiceContainer;
 import org.jboss.test.messaging.util.CoreMessageFactory;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 
 
@@ -66,16 +66,15 @@
     */
    public static void assertCorrectReference(MessageReference ref, Message m)
    {
-      assertTrue(ref.isReference());
-      assertEquals(m.getMessageID(), ref.getMessageID());
-      assertEquals(m.isReliable(), ref.isReliable());
-      assertEquals(m.getExpiration(), ref.getExpiration());
-      assertEquals(m.getTimestamp(), ref.getTimestamp());
-      assertEquals(m.getPriority(), ref.getPriority());
+      assertEquals(m.getMessageID(), ref.getMessage().getMessageID());
+      assertEquals(m.isReliable(), ref.getMessage().isReliable());
+      assertEquals(m.getExpiration(), ref.getMessage().getExpiration());
+      assertEquals(m.getTimestamp(), ref.getMessage().getTimestamp());
+      assertEquals(m.getPriority(), ref.getMessage().getPriority());
       assertEquals(0, ref.getDeliveryCount());
 
       Map messageHeaders = m.getHeaders();
-      Map refHeaders = ref.getHeaders();
+      Map refHeaders = ref.getMessage().getHeaders();
       assertEquals(messageHeaders.size(), refHeaders.size());
 
       for(Iterator i = messageHeaders.keySet().iterator(); i.hasNext(); )
@@ -322,11 +321,11 @@
       MessageReference ref = ms.reference(m);
       assertCorrectReference(ref, m);
       
-      MessageReference ref2 = ms.reference(ref.getMessageID());
+      MessageReference ref2 = ms.reference(ref.getMessage().getMessageID());
       assertNotNull(ref2);      
       assertCorrectReference(ref2, m);
       
-      MessageReference ref3 = ms.reference(ref.getMessageID());
+      MessageReference ref3 = ms.reference(ref.getMessage().getMessageID());
       assertNotNull(ref3);      
       assertCorrectReference(ref3, m);
       
@@ -334,7 +333,7 @@
       ref2.releaseMemoryReference();
       ref3.releaseMemoryReference();
       
-      MessageReference ref4 = ms.reference(ref.getMessageID());
+      MessageReference ref4 = ms.reference(ref.getMessage().getMessageID());
             
       assertNull(ref4);                
    }

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -26,12 +26,12 @@
 
 import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.messaging.core.FilterFactory;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Queue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.contract.Condition;
 import org.jboss.messaging.core.plugin.contract.ConditionFactory;
 import org.jboss.messaging.core.plugin.contract.MessageStore;

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,9 +25,9 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.PostOffice;
 import org.jboss.messaging.core.plugin.postoffice.Binding;
 import org.jboss.messaging.core.tx.Transaction;

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,9 +25,9 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.postoffice.Binding;
 import org.jboss.messaging.core.plugin.postoffice.cluster.LocalClusteredQueue;

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,8 +28,8 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.postoffice.cluster.ClusteredQueue;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultMessagePullPolicy;
 import org.jboss.messaging.core.plugin.postoffice.cluster.MessagePullPolicy;

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,10 +28,10 @@
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
 import org.jboss.messaging.core.Filter;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.postoffice.cluster.ClusterRouter;
 import org.jboss.messaging.core.plugin.postoffice.cluster.ClusteredQueue;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultRouter;

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,8 +23,8 @@
 
 import java.util.List;
 
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultClusteredPostOffice;
 import org.jboss.messaging.core.plugin.postoffice.cluster.LocalClusteredQueue;
 import org.jboss.messaging.core.tx.Transaction;
@@ -117,8 +117,7 @@
 
          for (int i = 0; i < NUM_MESSAGES; i++)
          {
-            Message msg = CoreMessageFactory.createCoreMessage(i);
-            msg.setReliable(true);
+            Message msg = CoreMessageFactory.createCoreMessage(i, true, null);
 
             MessageReference ref = ms.reference(msg);
 
@@ -256,8 +255,7 @@
 
          for (int i = 0; i < NUM_MESSAGES; i++)
          {
-            Message msg = CoreMessageFactory.createCoreMessage(i);
-            msg.setReliable(true);
+            Message msg = CoreMessageFactory.createCoreMessage(i, true, null);
 
             MessageReference ref = ms.reference(msg);
 

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -28,10 +28,10 @@
 import org.jboss.messaging.core.Channel;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.DeliveryObserver;
-import org.jboss.messaging.core.Message;
-import org.jboss.messaging.core.MessageReference;
 import org.jboss.messaging.core.Receiver;
 import org.jboss.messaging.core.SimpleDelivery;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultClusteredPostOffice;
 import org.jboss.messaging.core.plugin.postoffice.cluster.LocalClusteredQueue;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultMessagePullPolicy;
@@ -146,8 +146,7 @@
                                     true, true, (QueuedExecutor) pool.get(), -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
-         Message msg = CoreMessageFactory.createCoreMessage(1);
-         msg.setReliable(true);
+         Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
 
          MessageReference ref = ms.reference(msg);
 
@@ -245,8 +244,7 @@
                                     true, true, (QueuedExecutor) pool.get(), -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
-         Message msg = CoreMessageFactory.createCoreMessage(1);
-         msg.setReliable(true);
+         Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
 
          MessageReference ref = ms.reference(msg);
 
@@ -350,8 +348,7 @@
                                     true, true, (QueuedExecutor) pool.get(), -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
-         Message msg = CoreMessageFactory.createCoreMessage(1);
-         msg.setReliable(true);
+         Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
 
          MessageReference ref = ms.reference(msg);
 
@@ -451,8 +448,7 @@
                                     true, true, (QueuedExecutor) pool.get(), -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
-         Message msg = CoreMessageFactory.createCoreMessage(1);
-         msg.setReliable(true);
+         Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
 
          MessageReference ref = ms.reference(msg);
 

Modified: trunk/tests/src/org/jboss/test/messaging/jms/DLQTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/DLQTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/DLQTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -459,7 +459,7 @@
             //Check the headers
             String origDest = tm.getStringProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ORIG_DESTINATION);
             
-            String origMessageId = tm.getStringProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ORIG_MESSAGEID);
+            String origMessageId = tm.getStringProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ORIG_MESSAGE_ID);
             
             assertEquals(queue.toString(), origDest);
             

Modified: trunk/tests/src/org/jboss/test/messaging/jms/ExpiryQueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/ExpiryQueueTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/ExpiryQueueTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -409,7 +409,7 @@
             //Check the headers
             String origDest = tm.getStringProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ORIG_DESTINATION);
             
-            String origMessageId = tm.getStringProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ORIG_MESSAGEID);
+            String origMessageId = tm.getStringProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ORIG_MESSAGE_ID);
             
             long actualExpiryTime = tm.getLongProperty(ServerSessionEndpoint.JBOSS_MESSAGING_ACTUAL_EXPIRY_TIME);
             

Modified: trunk/tests/src/org/jboss/test/messaging/jms/MessageCleanupTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/MessageCleanupTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/MessageCleanupTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -40,7 +40,7 @@
 import javax.transaction.TransactionManager;
 
 import org.jboss.jms.client.JBossConnectionFactory;
-import org.jboss.messaging.core.plugin.SimpleMessageStore;
+import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.test.messaging.MessagingTestCase;
 import org.jboss.test.messaging.tools.ServerManagement;
 import org.jboss.tm.TransactionManagerService;
@@ -330,7 +330,7 @@
       mgr.begin();
 
       java.sql.Connection conn = ds.getConnection();
-      String sql = "SELECT MESSAGEID, ORD FROM JMS_MESSAGE_REFERENCE";
+      String sql = "SELECT MESSAGE_ID, ORD FROM JBM_MSG_REF";
       PreparedStatement ps = conn.prepareStatement(sql);
    
       ResultSet rs = ps.executeQuery();
@@ -368,7 +368,7 @@
       mgr.begin();
 
       java.sql.Connection conn = ds.getConnection();
-      String sql = "SELECT MESSAGEID FROM JMS_MESSAGE ORDER BY MESSAGEID";
+      String sql = "SELECT MESSAGE_ID FROM JBM_MSG ORDER BY MESSAGE_ID";
       PreparedStatement ps = conn.prepareStatement(sql);
       
       ResultSet rs = ps.executeQuery();

Modified: trunk/tests/src/org/jboss/test/messaging/jms/MessageConsumerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/MessageConsumerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/MessageConsumerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -2455,13 +2455,11 @@
    //Check messages have correct type after being resurrected from persistent storage
    public void testPersistedMessageType() throws Exception
    {
-
       Connection theConn = null;
       Connection theOtherConn = null;
 
       try
       {
-
          theConn = cf.createConnection();
          theConn.start();
 
@@ -2471,7 +2469,6 @@
          MessageProducer theProducer = sessSend.createProducer(queue2);
          theProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
-
          Message m = sessSend.createMessage();
          m.setStringProperty("p1", "aardvark");
 
@@ -2489,7 +2486,6 @@
 
          TextMessage tm = sessSend.createTextMessage("aardvark");
 
-
          theProducer.send(m);
          theProducer.send(bm);
          theProducer.send(mm);
@@ -2499,7 +2495,6 @@
 
          theConn.close();
 
-
          theOtherConn = cf.createConnection();
          theOtherConn.start();
 
@@ -2513,7 +2508,6 @@
 
          assertNotNull(m2);
 
-
          assertEquals("aardvark", m2.getStringProperty("p1"));
 
          BytesMessage bm2 = (BytesMessage)theConsumer.receive(1500);

Modified: trunk/tests/src/org/jboss/test/messaging/jms/MessageProxyTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/MessageProxyTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/MessageProxyTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -34,6 +34,7 @@
 import javax.naming.InitialContext;
 
 import org.jboss.jms.client.JBossConnectionFactory;
+import org.jboss.jms.destination.JBossQueue;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.jms.message.MessageProxy;
 import org.jboss.test.messaging.MessagingTestCase;
@@ -213,8 +214,26 @@
                 
    }
    
-   public void testCopyAfterSend() throws Exception
+   
+   private void checkSameUnderlyingMessage(JBossMessage m1, JBossMessage m2, boolean same)
    {
+      if ((m1 == m2) && (m1.getHeaders() == m2.getHeaders()) && !same)
+      {         
+         fail("Underlying message not same");
+      }
+   }
+   
+   private void checkSameBody(JBossMessage m1, JBossMessage m2, boolean same)
+   {
+      if ((m1.getPayload() == m2.getPayload()) && !same)
+      {         
+         fail("Body not same");
+      }
+   }
+      
+   
+   public void testNewMessage() throws Exception
+   {
       if (ServerManagement.isRemote())
       {
          return;
@@ -226,94 +245,106 @@
       {
          conn = cf.createConnection();
          
-         conn.start();
-         
          Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
          
          MessageProducer prod = sess.createProducer(queue);
+         
          prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+          
+         MapMessage m = sess.createMapMessage();
          
-         MessageConsumer cons = sess.createConsumer(queue);
+         JBossMessage check1 = ((MessageProxy)m).getMessage();
          
-         MapMessage msent = sess.createMapMessage();
-         msent.setString("map_entry", "map_value");         
-         msent.setStringProperty("property_entry", "property_value");
+         m.setString("map_entry", "map_value");         
+         m.setStringProperty("property_entry", "property_value");   
          
-         prod.send(msent);
+         m.setJMSReplyTo(new JBossQueue("wibble"));
          
-         MapMessage mrec = (MapMessage)cons.receive();
-                  
-         //Underlying messages
-         JBossMessage usent_1 = ((MessageProxy)msent).getMessage();         
-         JBossMessage urec_1 = ((MessageProxy)mrec).getMessage();
+         JBossMessage check2 = ((MessageProxy)m).getMessage();
          
-         //The underlying message should be the same since we haven't changed it after sending or receiving
-         assertTrue(usent_1 == urec_1);
+         checkSameUnderlyingMessage(check1, check2, true);
+         checkSameBody(check1, check2, true);
          
-         //Now change a header in the sent message
-         //The should cause the underlying message to be copied
-         msent.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
+         prod.send(m);
          
-         JBossMessage usent_2 = ((MessageProxy)msent).getMessage();
-         JBossMessage urec_2 = ((MessageProxy)mrec).getMessage();
+         JBossMessage check3 = ((MessageProxy)m).getMessage();
          
-         assertFalse(usent_2 == usent_1);
-         assertTrue(usent_1 == urec_2);
-         assertTrue(urec_1 == urec_2);
-                  
-         //But the properties shouldn't be copied since we didn't change them         
-         assertTrue(usent_2.getJMSProperties() == usent_1.getJMSProperties());
-         assertTrue(urec_2.getJMSProperties() == urec_1.getJMSProperties());
-         assertTrue(usent_1.getJMSProperties() == urec_1.getJMSProperties());
+         //Underlying message should be the same before and after
+         checkSameUnderlyingMessage(check2, check3, true);
+         checkSameBody(check2, check3, true);
          
-
-         //And the bodies shouldn't be copied since we didn't change it either
-         assertTrue(usent_2.getPayload() == usent_1.getPayload());
-         assertTrue(urec_2.getPayload() == urec_1.getPayload());
-         assertTrue(usent_1.getPayload() == urec_1.getPayload());
+         prod.send(m);
          
-         //Now we change a property
-         msent.setIntProperty("my_int_prop", 123);
+         JBossMessage check4 = ((MessageProxy)m).getMessage();
          
-         JBossMessage usent_3 = ((MessageProxy)msent).getMessage();
-         JBossMessage urec_3 = ((MessageProxy)mrec).getMessage();
+         assertFalse(check3.getMessageID() == check4.getMessageID());
+         
+         //The underlying message should now be different
+         checkSameUnderlyingMessage(check3, check4, false);
+         
+         //But the body should be the same
+         checkSameBody(check3, check4, true);
+         
+         prod.send(m);
+         
+         JBossMessage check5 = ((MessageProxy)m).getMessage();
+         
+         // The message should be different
+         assertFalse(check4.getMessageID() == check5.getMessageID());
+         
+         checkSameUnderlyingMessage(check4, check5, false);
+         
+         //But the body should be the same
+         checkSameBody(check4, check5, true);
+         
+         //Now set another header
+         
+         m.setJMSType("type123");
+         
+         JBossMessage check6 = ((MessageProxy)m).getMessage();
+         
+         
+         //The message should be different
+         checkSameUnderlyingMessage(check5, check6, false);
+         
+         //But the body should be the same
+         checkSameBody(check5, check6, true);
+         
+         prod.send(m);
+         
+         JBossMessage check7 = ((MessageProxy)m).getMessage();
                   
-         //It shouldn't cause a copy of the whole message again
-         assertTrue(usent_3 == usent_2);
-         assertTrue(urec_3 == urec_2);
+         //The message should be the same
          
-         //But the properties should be copied in the sent message but not the received
+         checkSameUnderlyingMessage(check6, check7, true);
          
-         Map sentProps = usent_3.getJMSProperties();
-         Map recProps = urec_3.getJMSProperties();
+         // But the body should be the same
+         checkSameBody(check6, check7, true);
          
-         assertFalse (sentProps == usent_1.getJMSProperties());
-         assertTrue (recProps == urec_1.getJMSProperties());
+         // Set the body
+         m.setString("key1", "blah");
          
+         JBossMessage check8 = ((MessageProxy)m).getMessage();
          
+         //The message should be the same
          
-         //Body should be the same
-         assertTrue(usent_3.getPayload() == usent_1.getPayload());
-         assertTrue(urec_3.getPayload() == urec_1.getPayload());
+         checkSameUnderlyingMessage(check7, check8, true);
          
-         //Now we change the body
-         msent.setString("new_map_prop", "hello");
+         // But the body should not be the same
+         checkSameBody(check7, check8, false);
          
-         JBossMessage usent_4 = ((MessageProxy)msent).getMessage();
-         JBossMessage urec_4 = ((MessageProxy)mrec).getMessage();
+         //And the body not the same
          
-         //It shouldn't cause a copy of the whole message again
-         assertTrue(usent_4 == usent_3);
-         assertTrue(urec_4 == urec_3);
+         checkSameUnderlyingMessage(check7, check8, false);
          
-         //The properties should not be copied again
-         assertTrue (usent_4.getJMSProperties() == sentProps);
-         assertTrue (urec_4.getJMSProperties() == recProps);
+         prod.send(m);
          
-         //Body should be copied in the sent but not the received
-         assertFalse(usent_4.getPayload() == usent_1.getPayload());
-         assertTrue(urec_4.getPayload() == urec_1.getPayload());
-                     
+         JBossMessage check9 = ((MessageProxy)m).getMessage();
+         
+         //The message should be the same
+         
+         checkSameUnderlyingMessage(check8, check9, true);
+         
       }
       finally
       {      
@@ -322,10 +353,10 @@
             conn.close();
          }
       }
-      
    }
    
-   public void testCopyAfterReceive() throws Exception
+   
+   public void testReceivedMessage() throws Exception
    {
       if (ServerManagement.isRemote())
       {
@@ -345,87 +376,99 @@
          MessageProducer prod = sess.createProducer(queue);
          
          prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+          
+         MapMessage m = sess.createMapMessage();
          
          MessageConsumer cons = sess.createConsumer(queue);
          
-         MapMessage msent = sess.createMapMessage();
-         msent.setString("map_entry", "map_value");         
-         msent.setStringProperty("property_entry", "property_value");
+         prod.send(m);
          
-         prod.send(msent);
+         m = (MapMessage)cons.receive(2000);
          
-         MapMessage mrec = (MapMessage)cons.receive();
-                  
-         //Underlying messages
-         JBossMessage usent_1 = ((MessageProxy)msent).getMessage();         
-         JBossMessage urec_1 = ((MessageProxy)mrec).getMessage();
+         assertNotNull(m);
+                           
+         JBossMessage check1 = ((MessageProxy)m).getMessage();         
          
-         //The underlying message should be the same since we haven't changed it after sending or receiving
-         assertTrue(usent_1 == urec_1);
+         prod.send(m);
          
-         //Now change a header in the received message
-         //The should cause the underlying message to be copied
-         mrec.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
+         JBossMessage check3 = ((MessageProxy)m).getMessage();
          
-         JBossMessage usent_2 = ((MessageProxy)msent).getMessage();
-         JBossMessage urec_2 = ((MessageProxy)mrec).getMessage();
+         //Underlying message should be different
+         checkSameUnderlyingMessage(check1, check3, true);
+         checkSameBody(check1, check3, true);
          
-         assertTrue(usent_2 == usent_1);
-         assertFalse(urec_1 == urec_2);
-                  
-         //But the properties shouldn't be copied since we didn't change them         
-         assertTrue(usent_2.getJMSProperties() == usent_1.getJMSProperties());
-         assertTrue(urec_2.getJMSProperties() == urec_1.getJMSProperties());
-         assertTrue(usent_1.getJMSProperties() == urec_1.getJMSProperties());
+         prod.send(m);
          
-         //And the bodies shouldn't be copied since we didn't change it either
-         assertTrue(usent_2.getPayload() == usent_1.getPayload());
+         JBossMessage check4 = ((MessageProxy)m).getMessage();
          
-         assertTrue(urec_2.getPayload() == urec_1.getPayload());
-         assertTrue(usent_1.getPayload() == urec_1.getPayload());
+         assertFalse(check3.getMessageID() == check4.getMessageID());
          
-         //Now we change a property
-         mrec.clearProperties();
-         mrec.setIntProperty("my_int_prop", 123);
+         //The underlying message should now be different
+         checkSameUnderlyingMessage(check3, check4, false);
          
-         JBossMessage usent_3 = ((MessageProxy)msent).getMessage();
-         JBossMessage urec_3 = ((MessageProxy)mrec).getMessage();
+         //But the body should be the same
+         checkSameBody(check3, check4, true);
+         
+         prod.send(m);
+         
+         JBossMessage check5 = ((MessageProxy)m).getMessage();
+         
+         // The message should be different
+         assertFalse(check4.getMessageID() == check5.getMessageID());
+         
+         checkSameUnderlyingMessage(check4, check5, false);
+         
+         //But the body should be the same
+         checkSameBody(check4, check5, true);
+         
+         //Now set another header
+         
+         m.setJMSType("type123");
+         
+         JBossMessage check6 = ((MessageProxy)m).getMessage();
+         
+         
+         //The message should be different
+         checkSameUnderlyingMessage(check5, check6, false);
+         
+         //But the body should be the same
+         checkSameBody(check5, check6, true);
+         
+         prod.send(m);
+         
+         JBossMessage check7 = ((MessageProxy)m).getMessage();
                   
-         //It shouldn't cause a copy of the whole message again
-         assertTrue(usent_3 == usent_2);
-         assertTrue(urec_3 == urec_2);
+         //The message should be the same
          
-         //But the properties should be copied in the received message but not the sent
+         checkSameUnderlyingMessage(check6, check7, true);
          
-         Map sentProps = usent_3.getJMSProperties();
-         Map recProps = urec_3.getJMSProperties();
+         // But the body should be the same
+         checkSameBody(check6, check7, true);
          
-         assertTrue (sentProps == usent_1.getJMSProperties());
-         assertFalse (recProps == urec_1.getJMSProperties());
+         // Set the body
+         m.setString("key1", "blah");
          
-         //Body should be the same
-         assertTrue(usent_3.getPayload() == usent_1.getPayload());
-         assertTrue(urec_3.getPayload() == urec_1.getPayload());
+         JBossMessage check8 = ((MessageProxy)m).getMessage();
          
-         //Now we change the body
-         mrec.clearBody();
-         mrec.setString("new_map_prop", "hello");
+         //The message should be the same
          
-         JBossMessage usent_4 = ((MessageProxy)msent).getMessage();
-         JBossMessage urec_4 = ((MessageProxy)mrec).getMessage();
+         checkSameUnderlyingMessage(check7, check8, true);
          
-         //It shouldn't cause a copy of the whole message again
-         assertTrue(usent_4 == usent_3);
-         assertTrue(urec_4 == urec_3);
+         // But the body should not be the same
+         checkSameBody(check7, check8, false);
          
-         //The properties should not be copied again
-         assertTrue (usent_4.getJMSProperties() == sentProps);
-         assertTrue (urec_4.getJMSProperties() == recProps);
+         //And the body not the same
          
-         //Body should be copied in the received but not the sent
-         assertTrue(usent_4.getPayload() == usent_1.getPayload());
-         assertFalse(urec_4.getPayload() == urec_1.getPayload());
-                       
+         checkSameUnderlyingMessage(check7, check8, false);
+         
+         prod.send(m);
+         
+         JBossMessage check9 = ((MessageProxy)m).getMessage();
+         
+         //The message should be the same
+         
+         checkSameUnderlyingMessage(check8, check9, true);
+         
       }
       finally
       {      
@@ -434,7 +477,6 @@
             conn.close();
          }
       }
-      
    }
    
    

Modified: trunk/tests/src/org/jboss/test/messaging/jms/ReferencingTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/ReferencingTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/ReferencingTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -31,7 +31,8 @@
 
 import org.jboss.jms.client.JBossConnectionFactory;
 import org.jboss.jms.message.MessageProxy;
-import org.jboss.messaging.core.MessageReference;
+import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.message.SimpleMessageReference;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.test.messaging.MessagingTestCase;
 import org.jboss.test.messaging.tools.ServerManagement;
@@ -189,7 +190,7 @@
       
       MessageReference ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
       
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
           
@@ -229,7 +230,7 @@
       
       MessageReference ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
       
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
       
@@ -269,7 +270,7 @@
       
       MessageReference ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
       
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
       
@@ -282,7 +283,7 @@
       
       ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
       
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
             
@@ -319,17 +320,17 @@
       assertNotNull(m2);
       assertEquals(m.getText(), m2.getText());
       
-      MessageReference ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
+      SimpleMessageReference ref = (SimpleMessageReference)store.reference(((MessageProxy)m2).getMessage().getMessageID());
       
       assertEquals(2, ref.getInMemoryChannelCount());
       
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
       
       sess.commit();
       
-      ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
+      ref = (SimpleMessageReference)store.reference(((MessageProxy)m2).getMessage().getMessageID());
       assertNull(ref);
       
       conn.close();
@@ -360,7 +361,7 @@
       assertEquals(m.getText(), m2.getText());
       
       MessageReference ref = store.reference(((MessageProxy)m2).getMessage().getMessageID());
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
       
@@ -372,7 +373,7 @@
       assertEquals(m.getText(), m3.getText());
       
       ref = store.reference(((MessageProxy)m3).getMessage().getMessageID());
-      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessageID());
+      assertEquals(((MessageProxy)m).getMessage().getMessageID(), ref.getMessage().getMessageID());
       
       ref.releaseMemoryReference();
       

Modified: trunk/tests/src/org/jboss/test/messaging/jms/message/MessageTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/message/MessageTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/message/MessageTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -82,8 +82,7 @@
       m.setJMSCorrelationID("correlationID777");
       m.setJMSReplyTo(new JBossQueue("ReplyToQueue"));
       m.setJMSDestination(new JBossQueue("DestinationQueue"));
-      m.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
-      m.setJMSRedelivered(true);
+      m.setJMSDeliveryMode(DeliveryMode.PERSISTENT);      
       m.setJMSExpiration(987654321l);
       m.setJMSPriority(9);
       m.setBooleanProperty("booleanProperty", true);
@@ -148,7 +147,7 @@
       assertEquals(m1.getJMSReplyTo(), m2.getJMSReplyTo());
       assertEquals(m1.getJMSDestination(), m2.getJMSDestination());
       assertEquals(m1.getJMSDeliveryMode(), m2.getJMSDeliveryMode());
-      assertEquals(m1.getJMSRedelivered(), m2.getJMSRedelivered());
+      //We don't check redelivered since this is always dealt with on the proxy
       assertEquals(m1.getJMSType(), m2.getJMSType());
       assertEquals(m1.getJMSExpiration(), m2.getJMSExpiration());
       assertEquals(m1.getJMSPriority(), m2.getJMSPriority());
@@ -715,7 +714,7 @@
          propNames.add(propName);
       }
 
-      assertEquals(9, propNames.size());
+      assertEquals(8, propNames.size());
 
       assertTrue(propNames.contains("myBool"));
       assertTrue(propNames.contains("myByte"));
@@ -984,8 +983,6 @@
       m2.clearProperties();
 
       Enumeration en2 = m2.getPropertyNames();
-      assertTrue(en2.hasMoreElements());
-      en2.nextElement();
       assertFalse(en2.hasMoreElements());
 
 

Modified: trunk/tests/src/org/jboss/test/messaging/jms/persistence/BytesMessagePersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/persistence/BytesMessagePersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/BytesMessagePersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,8 @@
 
 import java.util.HashMap;
 
-import org.jboss.jms.destination.JBossQueue;
 import org.jboss.jms.message.JBossBytesMessage;
-import org.jboss.messaging.core.Message;
-import org.jboss.util.id.GUID;
+import org.jboss.messaging.core.message.Message;
 
 
 /**
@@ -61,8 +59,6 @@
    {
       HashMap coreHeaders = generateFilledMap(true);         
       
-      HashMap jmsProperties = generateFilledMap(false);
-               
       JBossBytesMessage m = 
          new JBossBytesMessage(i,
          reliable,
@@ -70,14 +66,13 @@
          System.currentTimeMillis(),
          i,
          coreHeaders,
-         null,
-         i % 2 == 0 ? new GUID().toString() : null,
-         genCorrelationID(i),
-         i % 3 == 2 ? randByteArray(50) : null,
-         new JBossQueue("testDestination"),
-         new JBossQueue("testReplyTo"),            
-         jmsProperties); 
+         null);
       
+      setDestination(m, i);
+      setReplyTo(m, i);     
+      m.setJMSType("testType");
+      setCorrelationID(m, i);
+      
       m.writeBoolean(randBool().booleanValue());
       m.writeByte(randByte().byteValue());
       m.writeBytes(randByteArray(500));

Modified: trunk/tests/src/org/jboss/test/messaging/jms/persistence/MapMessagePersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/persistence/MapMessagePersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/MapMessagePersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -25,10 +25,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.jboss.jms.destination.JBossQueue;
 import org.jboss.jms.message.JBossMapMessage;
-import org.jboss.messaging.core.Message;
-import org.jboss.util.id.GUID;
+import org.jboss.messaging.core.message.Message;
 
 
 /**
@@ -61,9 +59,7 @@
    protected Message createMessage(byte i, boolean reliable) throws Exception
    {
       HashMap coreHeaders = generateFilledMap(true);         
-      
-      HashMap jmsProperties = generateFilledMap(false);
-               
+       
       JBossMapMessage m = 
          new JBossMapMessage(i,
                reliable,
@@ -71,14 +67,13 @@
                System.currentTimeMillis(),
                i,
                coreHeaders,
-               null,
-               i % 2 == 0 ? new GUID().toString() : null,
-               genCorrelationID(i),
-               i % 3 == 2 ? randByteArray(50) : null,
-                     new JBossQueue("testDestination"),
-                     new JBossQueue("testReplyTo"),         
-               jmsProperties);      
+               null);      
       
+      setDestination(m, i);
+      setReplyTo(m, i);     
+      m.setJMSType("testType");
+      setCorrelationID(m, i);
+      
       Map map = generateFilledMap(true);
       m.setPayload((Serializable)map);
       return m;      

Modified: trunk/tests/src/org/jboss/test/messaging/jms/persistence/MessagePersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/persistence/MessagePersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/MessagePersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,9 +23,13 @@
 
 import java.util.HashMap;
 
+import javax.jms.JMSException;
+
+import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.destination.JBossQueue;
+import org.jboss.jms.destination.JBossTopic;
 import org.jboss.jms.message.JBossMessage;
-import org.jboss.messaging.core.Message;
+import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
 import org.jboss.test.messaging.core.plugin.JDBCPersistenceManagerTest;
 import org.jboss.test.messaging.tools.ServerManagement;
@@ -120,40 +124,77 @@
    protected Message createMessage(byte i, boolean reliable) throws Exception
    {
       HashMap coreHeaders = generateFilledMap(true);         
-      
-      HashMap jmsProperties = generateFilledMap(false);
-              
-      JBossMessage jbm = 
+          
+      JBossMessage m = 
          new JBossMessage(i,
             reliable,
             System.currentTimeMillis() + 1000 * 60 * 60,
             System.currentTimeMillis(),
             i,
             coreHeaders,
-            null,
-            i % 2 == 0 ? new GUID().toString() : null,
-            genCorrelationID(i),
-            i % 3 == 2 ? randByteArray(50) : null,
-            new JBossQueue("testDestination"),
-            new JBossQueue("testReplyTo"),            
-            jmsProperties);    
+            null);
       
-      jbm.setPayload(new WibblishObject());
+      setDestination(m, i);
+      setReplyTo(m, i);     
+      m.setJMSType("testType");
+      setCorrelationID(m, i);
       
-      return jbm;
+      m.setPayload(new WibblishObject());
+      
+      return m;
    }
    
-   protected String genCorrelationID(int i)
+   protected void setDestination(JBossMessage m, int i) throws JMSException
    {
+      JBossDestination dest = null;
+      String name =  new GUID().toString();
+      if (i % 2 == 0)
+      {         
+         dest = new JBossQueue(name);
+      }
+      else if (i % 2 == 1)
+      {
+         dest = new JBossTopic(name);
+      }     
+      m.setJMSDestination(dest);
+   }
+   
+   protected void setReplyTo(JBossMessage m, int i) throws JMSException
+   {
+      JBossDestination dest = null;
+      String name =  new GUID().toString();
       if (i % 3 == 0)
+      {         
+         dest = new JBossQueue(name);
+      }
+      else if (i % 3 == 1)
       {
-         return null;
+         dest = new JBossTopic(name);
+      }   
+      else if (i % 3 == 2)
+      {
+         return;
+      } 
+      m.setJMSDestination(dest);
+   }
+   
+   protected void setCorrelationID(JBossMessage m, int i) throws JMSException
+   {
+      if (i % 3 == 0)
+      {
+         // Do nothing
+         return;
       }
       else if (i % 3 == 1)
       {
-         return new GUID().toString();
+         String id =  new GUID().toString();
+         m.setJMSCorrelationID(id);
       }     
-      return null;
+      else if (i % 3 == 2)
+      {
+         byte[] bytes = new GUID().toString().getBytes();
+         m.setJMSCorrelationIDAsBytes(bytes);
+      }
    }
    
  

Modified: trunk/tests/src/org/jboss/test/messaging/jms/persistence/ObjectMessagePersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/persistence/ObjectMessagePersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/ObjectMessagePersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,8 @@
 
 import java.util.HashMap;
 
-import org.jboss.jms.destination.JBossQueue;
 import org.jboss.jms.message.JBossObjectMessage;
-import org.jboss.messaging.core.Message;
-import org.jboss.util.id.GUID;
+import org.jboss.messaging.core.message.Message;
 
 
 /**
@@ -60,8 +58,6 @@
    protected Message createMessage(byte i, boolean reliable) throws Exception
    {
       HashMap coreHeaders = generateFilledMap(true);         
-      
-      HashMap jmsProperties = generateFilledMap(false);
                
       JBossObjectMessage m = 
          new JBossObjectMessage(i,
@@ -70,13 +66,13 @@
                System.currentTimeMillis(),
                i,
                coreHeaders,
-               null,
-               i % 2 == 0 ? new GUID().toString() : null,
-               genCorrelationID(i),
-               i % 3 == 2 ? randByteArray(50) : null,
-               new JBossQueue("testDestination"),
-               new JBossQueue("testReplyTo"),            
-               jmsProperties);     
+               null);
+      
+      setDestination(m, i);
+      setReplyTo(m, i);     
+      m.setJMSType("testType");
+      setCorrelationID(m, i);
+      
       m.setPayload(new WibblishObject());
       return m;      
    }

Modified: trunk/tests/src/org/jboss/test/messaging/jms/persistence/StreamMessagePersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/persistence/StreamMessagePersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/StreamMessagePersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -24,10 +24,8 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import org.jboss.jms.destination.JBossQueue;
 import org.jboss.jms.message.JBossStreamMessage;
-import org.jboss.messaging.core.Message;
-import org.jboss.util.id.GUID;
+import org.jboss.messaging.core.message.Message;
 
 
 /**
@@ -62,8 +60,6 @@
    {
       HashMap coreHeaders = generateFilledMap(true);         
       
-      HashMap jmsProperties = generateFilledMap(false);
-               
       JBossStreamMessage m = 
          new JBossStreamMessage(i,
                reliable,
@@ -71,13 +67,13 @@
                System.currentTimeMillis(),
                i,
                coreHeaders,
-               null,
-               i % 2 == 0 ? new GUID().toString() : null,
-               genCorrelationID(i),
-               i % 3 == 2 ? randByteArray(50) : null,
-               new JBossQueue("testDestination"),
-               new JBossQueue("testReplyTo"),           
-               jmsProperties); 
+               null); 
+      
+      setDestination(m, i);
+      setReplyTo(m, i);     
+      m.setJMSType("testType");
+      setCorrelationID(m, i);
+      
       m.setPayload(new ArrayList());
       m.writeBoolean(randBool().booleanValue());
       m.writeByte(randByte().byteValue());

Modified: trunk/tests/src/org/jboss/test/messaging/jms/persistence/TextMessagePersistenceManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/persistence/TextMessagePersistenceManagerTest.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/TextMessagePersistenceManagerTest.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -23,10 +23,8 @@
 
 import java.util.HashMap;
 
-import org.jboss.jms.destination.JBossQueue;
 import org.jboss.jms.message.JBossTextMessage;
-import org.jboss.messaging.core.Message;
-import org.jboss.util.id.GUID;
+import org.jboss.messaging.core.message.Message;
 
 
 /**
@@ -60,9 +58,7 @@
    protected Message createMessage(byte i, boolean reliable) throws Exception
    {
       HashMap coreHeaders = generateFilledMap(true);         
-      
-      HashMap jmsProperties = generateFilledMap(false);
-               
+           
       JBossTextMessage m = 
          new JBossTextMessage(i,
                reliable,
@@ -70,13 +66,13 @@
                System.currentTimeMillis(),
                i,
                coreHeaders,
-               null,
-               i % 2 == 0 ? new GUID().toString() : null,
-               genCorrelationID(i),
-               i % 3 == 2 ? randByteArray(50) : null,
-               new JBossQueue("testDestination"),
-               new JBossQueue("testReplyTo"),            
-               jmsProperties);        
+               null);
+      
+      setDestination(m, i);
+      setReplyTo(m, i);     
+      m.setJMSType("testType");
+      setCorrelationID(m, i);
+      
       m.setText(randString(10000));
       return m;      
    }

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-02-07 17:31:13 UTC (rev 2201)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-02-08 10:50:26 UTC (rev 2202)
@@ -1407,58 +1407,65 @@
 
          Connection conn = ds.getConnection();
 
-         String sql = "DELETE FROM JMS_POSTOFFICE";
+         String sql = "DELETE FROM JBM_POSTOFFICE";
          PreparedStatement ps = conn.prepareStatement(sql);
 
          int rows = ps.executeUpdate();
 
-         log.debug("JMS_POSTOFFICE: deleted " + rows);
+         log.debug("JBM_POSTOFFICE: deleted " + rows);
 
          ps.close();
 
-         sql = "DELETE FROM JMS_MESSAGE_REFERENCE";
+         sql = "DELETE FROM JBM_MSG_REF";
          ps = conn.prepareStatement(sql);
 
          rows = ps.executeUpdate();
 
-         log.debug("JMS_MESSAGE_REFERENCE: deleted " + rows);
+         log.debug("JBM_MSG_REF: deleted " + rows);
 
          ps.close();
 
-         sql = "DELETE FROM JMS_MESSAGE";
+         sql = "DELETE FROM JBM_MSG";
          ps = conn.prepareStatement(sql);
 
          rows = ps.executeUpdate();
 
-         log.debug("JMS_MESSAGE: deleted " + rows);
+         log.debug("JBM_MSG: deleted " + rows);
 
          ps.close();
 
-         sql = "DELETE FROM JMS_TRANSACTION";
+         sql = "DELETE FROM JBM_TX";
          ps = conn.prepareStatement(sql);
 
          rows = ps.executeUpdate();
 
-         log.debug("JMS_TRANSACTION: deleted " + rows);
+         log.debug("JBM_TX: deleted " + rows);
 
          ps.close();
 
-         sql = "DELETE FROM JMS_COUNTER";
+         sql = "DELETE FROM JBM_COUNTER";
          ps = conn.prepareStatement(sql);
 
          rows = ps.executeUpdate();
 
-         log.debug("JMS_COUNTER: deleted " + rows);
+         log.debug("JBM_COUNTER: deleted " + rows);
 
          ps.close();
 
-         sql = "DELETE FROM JMS_USER";
+         sql = "DELETE FROM JBM_USER";
          ps = conn.prepareStatement(sql);
 
          rows = ps.executeUpdate();
 
-         log.debug("JMS_USER: deleted " + rows);
+         log.debug("JBM_USER: deleted " + rows);
+         
+         sql = "DELETE FROM JBM_ROLE";
+         ps = conn.prepareStatement(sql);
 
+         rows = ps.executeUpdate();
+
+         log.debug("JBM_ROLE: deleted " + rows);
+
          ps.close();
          conn.close();
 




More information about the jboss-cvs-commits mailing list