JMS JDBC Persistence and server restart.
frank-15 Jan 11, 2005 10:52 AMHi,
the situation is the following: my application consumes messages slower than their incoming rate is thus some of them will be persisted to a Postgres RDMS (depending on memory cache-size settings, etc.) However all of these messages will be marked with 'T' and be deleted at server restart as a result. [Actually I've found a thread with similar topic but it was dated in 2002]
Questions:
1. Is this the intended way how Message Cache and Persistence Manager should work, or I missed something in my jdbc-service.xml (quoted below)?
2. How can I get around this problem? Is there a way of truly persistating messages (wo using entitybeans and other tables directly)?
Thank you in advance: Frank
PS I (System Spec.): Jboss 4.0.1, PostgreSQL 7.4.6
PS II (postgres-jdbc2-service.xml):
--------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: postgres-jdbc2-service.xml,v 1.8 2004/08/20 10:33:49 ejort Exp $ -->
 <!-- ==================================================================== -->
 <!-- Persistence and caching using Postgres -->
 <!-- IMPORTANT: Remove hsqldb-jdbc2-service.xml -->
 <!-- ==================================================================== -->
 <!--
 | The destination manager is the core service within JBossMQ
 -->
 <depends optional-attribute-name="MessageCache">jboss.mq:service=MessageCache
 <depends optional-attribute-name="PersistenceManager">jboss.mq:service=PersistenceManager
 <depends optional-attribute-name="StateManager">jboss.mq:service=StateManager
 <!--
 | The MessageCache decides where to put JBossMQ message that
 | are sitting around waiting to be consumed by a client.
 |
 | The memory marks are in Megabytes. Once the JVM memory usage hits
 | the high memory mark, the old messages in the cache will start getting
 | stored in the DataDirectory. As memory usage gets closer to the
 | Max memory mark, the amount of message kept in the memory cache aproaches 0.
 -->
 50
 60
 jboss.mq:service=PersistenceManager
 <!-- The PersistenceManager is used to store messages to disk. -->
 <!--
 | The jdbc2 PersistenceManager is the new improved JDBC implementation.
 | This implementation allows you to control how messages are stored in
 | the database.
 |
 | This jdbc2 PM configuration has was supplied by Stephane Nicoll in the forums as an example for Postgres
 -->
 <depends optional-attribute-name="ConnectionManager">jboss.jca:service=DataSourceBinding,name=PostgresDS
 BLOB_TYPE=BYTES_BLOB
 INSERT_TX = INSERT INTO JMS_TRANSACTIONS (TXID) values(?)
 INSERT_MESSAGE = INSERT INTO JMS_MESSAGES (MESSAGEID, DESTINATION, MESSAGEBLOB, TXID, TXOP) VALUES(?,?,?,?,?)
 SELECT_ALL_UNCOMMITED_TXS = SELECT TXID FROM JMS_TRANSACTIONS
 SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_MESSAGES
 SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE DESTINATION=?
 SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
 MARK_MESSAGE = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=?
 UPDATE_MESSAGE = UPDATE JMS_MESSAGES SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=?
 UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=?
 UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=?
 UPDATE_MESSAGE = UPDATE JMS_MESSAGES SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=?
 UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=?
 UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=?
 DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGES WHERE TXID IN (SELECT TXID FROM JMS_TRANSACTIONS) AND TXOP=?
 DELETE_TX = DELETE FROM JMS_TRANSACTIONS WHERE TXID = ?
 DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXID=? AND TXOP=?
 DELETE_TEMPORARY_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXOP='T'
 DELETE_MESSAGE = DELETE FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
 CREATE_MESSAGE_TABLE = CREATE TABLE JMS_MESSAGES (MESSAGEID INTEGER NOT NULL, DESTINATION VARCHAR(150) NOT NULL, TXID INTEGER, TXOP CHAR(1), MESSAGEBLOB BYTEA, PRIMARY KEY (MESSAGEID, DESTINATION))
 CREATE_IDX_MESSAGE_TXOP_TXID = CREATE INDEX JMS_MESSAGES_TXOP_TXID ON JMS_MESSAGES (TXOP, TXID)
 CREATE_IDX_MESSAGE_DESTINATION = CREATE INDEX JMS_MESSAGES_DESTINATION ON JMS_MESSAGES (DESTINATION)
 CREATE_TX_TABLE = CREATE TABLE JMS_TRANSACTIONS ( TXID INTEGER, PRIMARY KEY (TXID) )
 CREATE_TABLES_ON_STARTUP = FALSE
---------------------------------
 
     
     
     
    