JMS PersistenceManager on SQLServer 2K
mattygiedt Sep 24, 2003 3:23 PMI am having a rather hard time getting the JMS service to use the org.jboss.mq.pm.jdbc2.PersistenceManager. I'm getting the following exceptions when trying to start JBoss 3.2.1 with Java 1.4.2 using an XA DataSource for the connections:
-------------------------------------------------------------------
17:01:35,239 INFO [PersistenceManager] Starting
17:01:36,761 WARN [WrappedConnection] Closing a statement you left open, please do your own housekeeping
17:01:36,761 WARN [WrappedConnection] Closing a statement you left open, please do your own housekeeping
17:01:36,831 WARN [TransactionImpl] XAException: tx=TransactionImpl:XidImpl [FormatId=257, GlobalId=sandbox//1, BranchQual=] errorCode=XAER_RMERR
javax.transaction.xa.XAException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]xa_rollback (0) returns -4
[snip]
17:01:37,963 ERROR [PersistenceManager] Starting failed
org.jboss.mq.SpyJMSException: Could not resolve uncommited transactions. Message recovery may not be accurate; - nested throwable: (java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction.)
-----------------------------------------------------------
I have manually created the two DB tables: (blob_type=image, but why do you have to define that at the top of the SqlProperties AND in the create_message_table sql?)
CREATE_MESSAGE_TABLE = CREATE TABLE JMS_MESSAGES (MESSAGEID INTEGER NOT NULL, DESTINATION VARCHAR(150) NOT NULL, TXID INTEGER, TXOP CHAR(1), MESSAGEBLOB IMAGE, PRIMARY KEY (MESSAGEID, DESTINATION))
CREATE_TX_TABLE = CREATE TABLE MS_TRANSACTIONS (TXID INTEGER)
-----------------------------------------------------------
I have included my jbossmq-service.xml file, would somebody please point out what I'm doing wrong?
TIA,
-Matt
<?xml version="1.0" encoding="UTF-8"?>
<!-- ==================================================================== -->
<!-- Invocation Layers -->
<!-- ==================================================================== -->
<!--
| InvocationLayers are the different transport methods that can
| be used to access the server.
-->
<depends optional-attribute-name="Invoker">jboss.mq:service=Invoker
java:/ConnectionFactory
java:/XAConnectionFactory
0
<!-- ==================================================================== -->
<!-- JBossMQ Interceptor chain configuration -->
<!-- ==================================================================== -->
<!-- To tune performance, you can have the Invoker skip over the TracingInterceptor -->
<!-- and/or the SecurityManager, but then you loose the ability to trace and/or enforce security. -->
<depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager
<!--
| The destination manager is the core service within JBossMQ
-->
<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.
|
|
-->
<depends optional-attribute-name="MessageCache">jboss.mq:service=MessageCache
<depends optional-attribute-name="ConnectionManager">jboss.jca:service=XATxCM,name=XAMSSQLDS
BLOB_TYPE=IMAGE
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_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 IMAGE, PRIMARY KEY (MESSAGEID, DESTINATION))
CREATE_TX_TABLE = CREATE TABLE JMS_TRANSACTIONS (TXID INTEGER)
<!-- ==================================================================== -->
<!-- System Destinations -->
<!-- ==================================================================== -->
<!-- Dead Letter Queue -->
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager