Hi folks, 

I just uploaded a new version of the patch to my site

http://familieposselt.de/jboss-3.2.4RC2-src-patched2.tz

I want to do some more tests, but it seems to work. If any of you guys out
there are interested, feel free to check it out.

@Adrian: What did you mean by unloading messages when there are no subscribers?
- Unloading from the buffer for queues is not implemented
- Unloading of messages in topics should work as expected

To get it running:

1) build patched JBoss

2) Use jdbc3-PersistenceManager
    If you want to use MySQL<4.1 try the following:
    
  
    <depends 
optional-attribute-name="ConnectionManager">jboss.jca:service=LocalTxCM,name=MysqlDS
    
        BLOB_TYPE=BYTES_BLOB
        UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGE_LOG SET TXID=?, TXOP=? WHERE TXOP=?
        UPDATE_MARKED_REFERENCES = UPDATE JMS_REFERENCE_LOG SET TXID=?, TXOP=? WHERE 
TXOP=?
        UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGE_LOG SET TXID=?, TXOP=? 
WHERE TXOP=? AND TXID=?
        UPDATE_MARKED_REFERENCES_WITH_TX = UPDATE JMS_REFERENCE_LOG SET TXID=?, TXOP=? 
WHERE TXOP=? AND TXID=?
        DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGE_LOG WHERE TXID IN 
(SELECT TXID FROM JMS_TRANSACTION_LOG) AND TXOP=?
        DELETE_MARKED_REFERENCES_WITH_TX = DELETE FROM JMS_REFERENCE_LOG WHERE TXID IN 
(SELECT TXID FROM JMS_TRANSACTION_LOG) AND TXOP=?
        DELETE_TX = DELETE FROM JMS_TRANSACTION_LOG WHERE TXID = ?
        DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGE_LOG WHERE TXID=? AND TXOP=?
        DELETE_MARKED_REFERENCES = DELETE FROM JMS_REFERENCE_LOG WHERE TXID=? AND 
TXOP=?
        DELETE_TEMPORARY_MESSAGES = DELETE FROM JMS_MESSAGE_LOG WHERE TXOP='T'
        DELETE_TEMPORARY_REFERENCES = DELETE FROM JMS_REFERENCE_LOG WHERE TXOP='T'
        INSERT_TX = INSERT INTO JMS_TRANSACTION_LOG (TXID) values(?)
        SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_TRANSACTION_LOG
        SELECT_MAX_ID_IN_DEST = SELECT MAX(MESSAGEID) FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=?
        SELECT_MESSAGE_COUNT_IN_DEST = SELECT COUNT(MESSAGEID) FROM JMS_MESSAGE_LOG 
WHERE DESTINATION=?
        SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGE_LOG 
WHERE DESTINATION=?
        SELECT_REFERENCES_IN_DEST = SELECT R.MESSAGEID, M.MESSAGEBLOB, R.REDELIVERED, 
R.REDELIVERS FROM JMS_REFERENCE_LOG AS R, JMS_MESSAGE_LOG AS M WHERE R.MESSAGEID = 
M.MESSAGEID AND R.DESTINATION=?
        SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGE_LOG WHERE 
MESSAGEID=? AND DESTINATION=?
        INSERT_MESSAGE = INSERT INTO JMS_MESSAGE_LOG (MESSAGEID, DESTINATION, 
MESSAGEBLOB, TXID, TXOP, LATECLONE) VALUES(?,?,?,?,?,?)
        INSERT_REFERENCE = INSERT INTO JMS_REFERENCE_LOG (MESSAGEID, DESTINATION, 
TXID, TXOP, REDELIVERED, REDELIVERS) VALUES(?,?,?,?,?,?)
        MARK_MESSAGE = UPDATE JMS_MESSAGE_LOG SET TXID=?, TXOP=? WHERE MESSAGEID=? AND 
DESTINATION=?
        MARK_REFERENCE = UPDATE JMS_REFERENCE_LOG SET TXID=?, TXOP=? WHERE MESSAGEID=? 
AND DESTINATION=?
        DELETE_MESSAGE = DELETE FROM JMS_MESSAGE_LOG WHERE MESSAGEID=? AND 
DESTINATION=?
        DELETE_REFERENCE = DELETE FROM JMS_REFERENCE_LOG WHERE MESSAGEID=? AND 
DESTINATION=?
        UPDATE_MESSAGE = UPDATE JMS_MESSAGE_LOG SET MESSAGEBLOB=? WHERE MESSAGEID=? 
AND DESTINATION=?
        UPDATE_REFERENCE = UPDATE JMS_REFERENCE_LOG SET REDELIVERED=?, REDELIVERS=? 
WHERE MESSAGEID=? AND DESTINATION=?
        DELETE_ORPHANED_MESSAGES = DELETE FROM JMS_MESSAGE_LOG WHERE LATECLONE = '1' 
AND MESSAGEID NOT IN (SELECT MESSAGEID FROM JMS_REFERENCE_LOG)
        DELETE_ALL_TXS = DELETE FROM JMS_TRANSACTION_LOG
        CREATE_REFERENCE_TABLE = CREATE TABLE JMS_REFERENCE_LOG ( MESSAGEID INTEGER 
NOT NULL, DESTINATION VARCHAR(255) NOT NULL, TXID INTEGER, TXOP CHAR(1), REDELIVERED 
CHAR(1), REDELIVERS INTEGER, PRIMARY KEY (MESSAGEID, DESTINATION) ) TYPE=InnoDB
        CREATE_MESSAGE_TABLE = CREATE TABLE JMS_MESSAGE_LOG ( MESSAGEID INTEGER NOT 
NULL, DESTINATION VARCHAR(255), TXID INTEGER, TXOP CHAR(1), LATECLONE CHAR(1), 
MESSAGEBLOB BLOB, PRIMARY KEY (MESSAGEID, DESTINATION) ) TYPE=InnoDB
        CREATE_TX_TABLE = CREATE TABLE JMS_TRANSACTION_LOG ( TXID INTEGER ) TYPE=InnoDB
        SELECT_MARKED_TX = SELECT JMS_MESSAGE_LOG.TXID FROM JMS_TRANSACTION_LOG, 
JMS_MESSAGE_LOG WHERE JMS_TRANSACTION_LOG.TXID = JMS_MESSAGE_LOG.TXID AND TXOP=?
        SELECT_ORPHANED_MESSAGES = SELECT JMS_MESSAGE_LOG.MESSAGEID, 
JMS_MESSAGE_LOG.DESTINATION FROM JMS_MESSAGE_LOG LEFT JOIN JMS_REFERENCE_LOG ON 
JMS_MESSAGE_LOG.MESSAGEID = JMS_REFERENCE_LOG.MESSAGEID WHERE LATECLONE = '1' AND 
JMS_REFERENCE_LOG.MESSAGEID IS NULL
        SELECT_MAX_ID_IN_DEST = SELECT MAX(MESSAGEID) FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=?
        SELECT_MESSAGE_COUNT_IN_DEST = SELECT COUNT(*) FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=?
        SELECT_MESSAGE_COUNT_IN_DEST = SELECT COUNT(MESSAGEID) FROM JMS_MESSAGE_LOG 
WHERE DESTINATION=?
        SELECT_NEXT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=? AND ((MESSAGEID&gt;? AND PRIORITY=?) OR PRIORITY&lt;?) ORDER BY PRIORITY 
DESC, MESSAGEID
        SELECT_MESSAGEID_BY_JMSID = SELECT MESSAGEID, PRIORITY FROM JMS_MESSAGE_LOG 
WHERE DESTINATION=? AND JMSID = ?
        SELECT_MESSAGES_IN_DEST_WITH_PRIO_AND_JMSID = SELECT MESSAGEID, MESSAGEBLOB 
FROM JMS_MESSAGE_LOG WHERE DESTINATION=? ORDER BY PRIORITY, MESSAGEID
        INSERT_MESSAGE_WITH_PRIO_AND_JMSID = INSERT INTO JMS_MESSAGE_LOG (MESSAGEID, 
DESTINATION, MESSAGEBLOB, TXID, TXOP, LATECLONE, PRIORITY, JMSID) 
VALUES(?,?,?,?,?,?,?,?)
        CREATE_MESSAGE_TABLE_WITH_PRIO_AND_JMSID = CREATE TABLE JMS_MESSAGE_LOG ( 
MESSAGEID INTEGER NOT NULL, DESTINATION VARCHAR(255), TXID INTEGER, TXOP CHAR(1), 
LATECLONE CHAR(1), MESSAGEBLOB BLOB, PRIORITY INTEGER, JMSID VARCHAR(255), PRIMARY KEY 
(MESSAGEID, DESTINATION) ) TYPE=InnoDB
        CREATE_TABLES_ON_STARTUP = TRUE
        SUB_QUERIES = FALSE
        EXTENDED_MESSAGE_TABLE = TRUE
        FETCH_SIZE = 1000
    
  

3) Add the following lines to SqlProperties in xxx-jdbc3-service.xml:

        SELECT_MARKED_TX = SELECT JMS_MESSAGE_LOG.TXID FROM JMS_TRANSACTION_LOG, 
JMS_MESSAGE_LOG WHERE JMS_TRANSACTION_LOG.TXID = JMS_MESSAGE_LOG.TXID AND TXOP=?
        SELECT_ORPHANED_MESSAGES = SELECT JMS_MESSAGE_LOG.MESSAGEID, 
JMS_MESSAGE_LOG.DESTINATION FROM JMS_MESSAGE_LOG LEFT JOIN JMS_REFERENCE_LOG ON 
JMS_MESSAGE_LOG.MESSAGEID = JMS_REFERENCE_LOG.MESSAGEID WHERE LATECLONE = '1' AND 
JMS_REFERENCE_LOG.MESSAGEID IS NULL
        SELECT_MAX_ID_IN_DEST = SELECT MAX(MESSAGEID) FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=?
        SELECT_MESSAGE_COUNT_IN_DEST = SELECT COUNT(*) FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=?
        SELECT_MESSAGE_COUNT_IN_DEST = SELECT COUNT(MESSAGEID) FROM JMS_MESSAGE_LOG 
WHERE DESTINATION=?
        SELECT_NEXT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGE_LOG WHERE 
DESTINATION=? AND ((MESSAGEID&gt;? AND PRIORITY=?) OR PRIORITY&lt;?) ORDER BY PRIORITY 
DESC, MESSAGEID
        SELECT_MESSAGEID_BY_JMSID = SELECT MESSAGEID, PRIORITY FROM JMS_MESSAGE_LOG 
WHERE DESTINATION=? AND JMSID = ?
        SELECT_MESSAGES_IN_DEST_WITH_PRIO_AND_JMSID = SELECT MESSAGEID, MESSAGEBLOB 
FROM JMS_MESSAGE_LOG WHERE DESTINATION=? ORDER BY PRIORITY, MESSAGEID
        INSERT_MESSAGE_WITH_PRIO_AND_JMSID = INSERT INTO JMS_MESSAGE_LOG (MESSAGEID, 
DESTINATION, MESSAGEBLOB, TXID, TXOP, LATECLONE, PRIORITY, JMSID) 
VALUES(?,?,?,?,?,?,?,?)
        CREATE_MESSAGE_TABLE_WITH_PRIO_AND_JMSID = CREATE TABLE JMS_MESSAGE_LOG ( 
MESSAGEID INTEGER NOT NULL, DESTINATION VARCHAR(255), TXID INTEGER, TXOP CHAR(1), 
LATECLONE CHAR(1), MESSAGEBLOB BLOB, PRIORITY INTEGER, JMSID VARCHAR(255), PRIMARY KEY 
(MESSAGEID, DESTINATION) ) TYPE=InnoDB
        EXTENDED_MESSAGE_TABLE = TRUE
        FETCH_SIZE = 1000

   and adapt them to your DBMS if necessary

4) Add the following properties to your queue-MBeans:

   
      ...
      false
      true
      5000
   

5) Start JBoss 

If everything works fine, FooQueue should now be able to hold millions of messages

Topics are testet for basic functionality. Queues are probably more stable.

For fine tuning:
    - FETCH_SIZE specifies the number of messages that are read in a query from the 
database
    - BufferSize specifies the size of the buffer in BasicQueue

Greetings,
    Dietmar

View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3838484#3838484

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3838484


-------------------------------------------------------
This SF.Net email is sponsored by the new InstallShield X.
>From Windows to Linux, servers to mobile, InstallShield X is the
one installation-authoring solution that does it all. Learn more and
evaluate today! http://www.installshield.com/Dev2Dev/0504
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to