[jboss-cvs] JBoss Messaging SVN: r2270 - in trunk: src/etc/xmdesc and 9 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sun Feb 11 15:04:36 EST 2007
Author: timfox
Date: 2007-02-11 15:04:36 -0500 (Sun, 11 Feb 2007)
New Revision: 2270
Modified:
trunk/src/etc/server/default/deploy/clustered-sybase-persistence-service.xml
trunk/src/etc/server/default/deploy/sybase-persistence-service.xml
trunk/src/etc/xmdesc/JDBCPersistenceManager-xmbean.xml
trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java
trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManagerService.java
trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java
trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java
trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.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/IdManagerTest.java
trunk/tests/src/org/jboss/test/messaging/core/plugin/JDBCPersistenceManagerTest.java
trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java
trunk/tests/src/org/jboss/test/messaging/jms/XARecoveryTest.java
trunk/tests/src/org/jboss/test/messaging/jms/XATestBase.java
trunk/tests/src/org/jboss/test/messaging/jms/persistence/MessagePersistenceManagerTest.java
Log:
src/etc/server/default/deploy/sybase-persistence-service.xml
Modified: trunk/src/etc/server/default/deploy/clustered-sybase-persistence-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/clustered-sybase-persistence-service.xml 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/src/etc/server/default/deploy/clustered-sybase-persistence-service.xml 2007-02-11 20:04:36 UTC (rev 2270)
@@ -16,6 +16,7 @@
<attribute name="DataSource">java:/DefaultDS</attribute>
<attribute name="CreateTablesOnStartup">true</attribute>
<attribute name="UsingBatchUpdates">true</attribute>
+ <attribute name="UsingTrailingByte">true</attribute>
<attribute name="SqlProperties"><![CDATA[
CREATE_MESSAGE_REFERENCE=CREATE TABLE JBM_MSG_REF (CHANNEL_ID DECIMAL(19, 0), MESSAGE_ID DECIMAL(19, 0), TRANSACTION_ID DECIMAL(19, 0) NULL, STATE CHAR(1), ORD DECIMAL(19, 0), PAGE_ORD DECIMAL(19, 0) NULL, DELIVERY_COUNT INTEGER, SCHED_DELIVERY DECIMAL(19, 0), PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))
CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)
Modified: trunk/src/etc/server/default/deploy/sybase-persistence-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/sybase-persistence-service.xml 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/src/etc/server/default/deploy/sybase-persistence-service.xml 2007-02-11 20:04:36 UTC (rev 2270)
@@ -16,6 +16,7 @@
<attribute name="DataSource">java:/DefaultDS</attribute>
<attribute name="CreateTablesOnStartup">true</attribute>
<attribute name="UsingBatchUpdates">true</attribute>
+ <attribute name="UsingTrailingByte">true</attribute>
<attribute name="SqlProperties"><![CDATA[
CREATE_MESSAGE_REFERENCE=CREATE TABLE JBM_MSG_REF (CHANNEL_ID DECIMAL(19, 0), MESSAGE_ID DECIMAL(19, 0), TRANSACTION_ID DECIMAL(19, 0) NULL, STATE CHAR(1), ORD DECIMAL(19, 0), PAGE_ORD DECIMAL(19, 0) NULL, DELIVERY_COUNT INTEGER, SCHED_DELIVERY DECIMAL(19, 0), PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))
CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)
Modified: trunk/src/etc/xmdesc/JDBCPersistenceManager-xmbean.xml
===================================================================
--- trunk/src/etc/xmdesc/JDBCPersistenceManager-xmbean.xml 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/src/etc/xmdesc/JDBCPersistenceManager-xmbean.xml 2007-02-11 20:04:36 UTC (rev 2270)
@@ -47,6 +47,12 @@
<type>boolean</type>
</attribute>
+ <attribute access="read-write" getMethod="isUsingTrailingByte" setMethod="setUsingTrailingByte">
+ <description>Should a trailing byte be added to VARBINARY columns - this would be true for databases such as Sybase which would otherwise truncate trailing zeros</description>
+ <name>UsingTrailingByte</name>
+ <type>boolean</type>
+ </attribute>
+
<attribute access="read-write" getMethod="getSqlProperties" setMethod="setSqlProperties">
<description>DML and DDL overrides</description>
<name>SqlProperties</name>
Modified: trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManager.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -92,6 +92,8 @@
private boolean usingBinaryStream = true;
+ private boolean usingTrailingByte = false;
+
private int maxParams;
private short orderCount;
@@ -101,7 +103,7 @@
public JDBCPersistenceManager(DataSource ds, TransactionManager tm, Properties sqlProperties,
boolean createTablesOnStartup, boolean usingBatchUpdates,
- boolean usingBinaryStream, int maxParams)
+ boolean usingBinaryStream, boolean usingTrailingByte, int maxParams)
{
super(ds, tm, sqlProperties, createTablesOnStartup);
@@ -109,6 +111,8 @@
this.usingBinaryStream = usingBinaryStream;
+ this.usingTrailingByte = usingTrailingByte;
+
this.maxParams = maxParams;
}
@@ -207,13 +211,17 @@
//get the existing tx id --MK START
long txId = rs.getLong(1);
- byte[] branchQual = rs.getBytes(2);
+ byte[] branchQual = getVarBinaryColumn(rs, 2);
+
int formatId = rs.getInt(3);
- byte[] globalTxId = rs.getBytes(4);
+
+ byte[] globalTxId = getVarBinaryColumn(rs, 4);
+
Xid xid = new MessagingXid(branchQual, formatId, globalTxId);
// create a tx info object with the result set detailsdetails
txInfo = new PreparedTxInfo(txId, xid);
+
transactions.add(txInfo);
}
@@ -2748,11 +2756,15 @@
ps.setLong(1, tx.getId());
Xid xid = tx.getXid();
+
formatID = xid.getFormatId();
- ps.setBytes(2, xid.getBranchQualifier());
+
+ setVarBinaryColumn(2, ps, xid.getBranchQualifier());
+
ps.setInt(3, formatID);
- ps.setBytes(4, xid.getGlobalTransactionId());
+ setVarBinaryColumn(4, ps, xid.getGlobalTransactionId());
+
rows = updateWithRetry(ps);
}
@@ -3063,7 +3075,52 @@
// physically delete the row in the database
ps.setLong(1, message.getMessageID());
}
+
+ protected void setVarBinaryColumn(int column, PreparedStatement ps, byte[] bytes) throws Exception
+ {
+ if (usingTrailingByte)
+ {
+ // Sybase has the stupid characteristic of truncating all trailing in zeros
+ // in varbinary columns
+ // So we add an extra byte on the end when we store the varbinary data
+ // otherwise we might lose data
+ // http://jira.jboss.org/jira/browse/JBMESSAGING-825
+
+ byte[] res = new byte[bytes.length + 1];
+
+ System.arraycopy(bytes, 0, res, 0, bytes.length);
+
+ res[bytes.length] = 127;
+
+ bytes = res;
+ }
+
+ ps.setBytes(column, bytes);
+
+ if (trace) { log.trace("Setting varbinary column of length: " + bytes.length); }
+ }
+
+ protected byte[] getVarBinaryColumn(ResultSet rs, int columnIndex) throws Exception
+ {
+ byte[] bytes = rs.getBytes(columnIndex);
+
+ if (usingTrailingByte)
+ {
+ // Get rid of the trailing byte
+
+ // http://jira.jboss.org/jira/browse/JBMESSAGING-825
+
+ byte[] newBytes = new byte[bytes.length - 1];
+
+ System.arraycopy(bytes, 0, newBytes, 0, bytes.length - 1);
+
+ bytes = newBytes;
+ }
+
+ return bytes;
+ }
+ // Used for storing message headers and bodies
protected void setBytes(PreparedStatement ps, int columnIndex, byte[] bytes) throws Exception
{
if (usingBinaryStream)
@@ -3089,7 +3146,8 @@
else
{
//Set the bytes using setBytes() - likely to be better for smaller byte[]
- ps.setBytes(columnIndex, bytes);
+
+ setVarBinaryColumn(columnIndex, ps, bytes);
}
}
@@ -3140,7 +3198,7 @@
else
{
//Get the bytes using getBytes() - better for smaller byte[]
- return rs.getBytes(columnIndex);
+ return getVarBinaryColumn(rs, columnIndex);
}
}
@@ -3280,6 +3338,8 @@
// Private -------------------------------------------------------
+
+
private int[] updateWithRetry(PreparedStatement ps, boolean batch) throws Exception
{
final int MAX_TRIES = 25;
Modified: trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManagerService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManagerService.java 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/src/main/org/jboss/messaging/core/plugin/JDBCPersistenceManagerService.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -48,6 +48,8 @@
private boolean usingBinaryStream = true;
+ private boolean usingTrailingByte = false;
+
private int maxParams = 100;
// Constructors --------------------------------------------------------
@@ -81,7 +83,7 @@
persistenceManager =
new JDBCPersistenceManager(ds, tm, sqlProperties,
createTablesOnStartup, usingBatchUpdates,
- usingBinaryStream, maxParams);
+ usingBinaryStream, usingTrailingByte, maxParams);
persistenceManager.start();
@@ -147,4 +149,14 @@
{
usingBinaryStream = b;
}
+
+ public boolean isUsingTrailingByte()
+ {
+ return usingTrailingByte;
+ }
+
+ public void setUsingTrailingByte(boolean b)
+ {
+ usingTrailingByte = b;
+ }
}
Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleDeliveryTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -106,7 +106,7 @@
PersistenceManager pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
IDManager idm = new IDManager("TRANSACTION_ID", 10, pm);
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -116,7 +116,7 @@
pm = new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
idm = new IDManager("TRANSACTION_ID", 10, pm);
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -88,7 +88,7 @@
pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
ms = new SimpleMessageStore();
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -119,7 +119,7 @@
pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
ms = new SimpleMessageStore();
@@ -216,7 +216,7 @@
pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
ms = new SimpleMessageStore();
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -97,7 +97,7 @@
pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
idm = new IDManager("TRANSACTION_ID", 10, pm);
Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/IdManagerTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/IdManagerTest.java 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/IdManagerTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -69,7 +69,7 @@
pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
pm.start();
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/JDBCPersistenceManagerTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -104,7 +104,7 @@
JDBCPersistenceManager p =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, batch, true, maxParams);
+ true, batch, true, false, maxParams);
p.start();
return p;
}
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -255,7 +255,7 @@
pm =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, true, true, 100);
+ true, true, true, false, 100);
pm.start();
transactionIDManager = new IDManager("TRANSACTION_ID", 10, pm);
Modified: trunk/tests/src/org/jboss/test/messaging/jms/XARecoveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/XARecoveryTest.java 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/jms/XARecoveryTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -3029,8 +3029,8 @@
}
}
}
+
-
public void testMockCoordinatorRecovery3() throws Exception
{
XAConnection conn1 = null;
Modified: trunk/tests/src/org/jboss/test/messaging/jms/XATestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/XATestBase.java 2007-02-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/jms/XATestBase.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -44,6 +44,7 @@
import org.jboss.jms.client.state.ConnectionState;
import org.jboss.jms.tx.MessagingXAResource;
import org.jboss.jms.tx.ResourceManager;
+import org.jboss.messaging.core.tx.MessagingXid;
import org.jboss.test.messaging.MessagingTestCase;
import org.jboss.test.messaging.tools.ServerManagement;
import org.jboss.test.messaging.tools.jmx.ServiceContainer;
@@ -199,6 +200,8 @@
// Public --------------------------------------------------------
+
+
//See http://jira.jboss.com/jira/browse/JBMESSAGING-638
public void testResourceManagerMemoryLeakOnCommit() throws Exception
{
@@ -659,7 +662,94 @@
}
+ // See http://jira.jboss.org/jira/browse/JBMESSAGING-825
+ // Need to test that ids with trailing zeros are dealt with properly - sybase has the habit
+ // of truncating trailing zeros in varbinary columns
+ public void testXidsWithTrailingZeros() throws Exception
+ {
+ if (!ServerManagement.isRemote())
+ {
+ return;
+ }
+
+ XAConnection conn1 = null;
+
+ try
+ {
+ conn1 = cf.createXAConnection();
+
+ XASession sess1 = conn1.createXASession();
+
+ XAResource res1 = sess1.getXAResource();
+ byte[] branchQualifier = new byte[] { 1, 2, 3, 4, 5, 6, 0, 0, 0, 0 };
+
+ byte[] globalTxId = new byte[] { 6, 5, 4, 3, 2, 1, 0, 0, 0, 0 };
+
+ Xid trailing = new MessagingXid(branchQualifier, 12435, globalTxId);
+
+ res1.start(trailing, XAResource.TMNOFLAGS);
+
+ MessageProducer prod1 = sess1.createProducer(queue);
+
+ TextMessage tm1 = sess1.createTextMessage("testing1");
+
+ prod1.send(tm1);
+
+ res1.end(trailing, XAResource.TMSUCCESS);
+
+
+ res1.prepare(trailing);
+
+
+ //Now "crash" the server
+
+ ServerManagement.stopServerPeer();
+
+ ServerManagement.startServerPeer();
+
+ ServerManagement.deployQueue("Queue");
+
+
+ XAResource res = cf.createXAConnection().createXASession().getXAResource();
+
+ Xid[] xids = res.recover(XAResource.TMSTARTRSCAN);
+ assertEquals(1, xids.length);
+
+ Xid[] xids2 = res.recover(XAResource.TMENDRSCAN);
+ assertEquals(0, xids2.length);
+
+ Xid trailing2 = xids[0];
+
+ assertTrue(trailing.getFormatId() == trailing2.getFormatId());
+
+ assertEqualByteArrays(trailing.getGlobalTransactionId(), trailing2.getGlobalTransactionId());
+
+ assertEqualByteArrays(trailing.getBranchQualifier(), trailing2.getBranchQualifier());
+
+ res.commit(trailing, false);
+
+ if (checkNoMessageData())
+ {
+ fail("Data remains in database");
+ }
+ }
+ finally
+ {
+ if (conn1 != null)
+ {
+ try
+ {
+ conn1.close();
+ }
+ catch (Exception e)
+ {
+ //Ignore
+ }
+ }
+ }
+ }
+
public void test2PCSendCommit1PCOptimization() throws Exception
{
//Since both resources have some RM, TM will probably use 1PC optimization
@@ -2803,6 +2893,24 @@
// Private -------------------------------------------------------
+ private void assertEqualByteArrays(byte[] b1, byte[] b2)
+ {
+ log.info("b1 length: " + b1.length + " b2 length " + b2.length);
+
+ if (b1.length != b2.length)
+ {
+ fail("Lengths not the same");
+ }
+
+ for (int i = 0; i < b1.length; i++)
+ {
+ if (b1[i] != b2[i])
+ {
+ fail("Not same at index " + i);
+ }
+ }
+ }
+
// Inner classes -------------------------------------------------
static class DummyXAResource implements XAResource
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-11 18:20:10 UTC (rev 2269)
+++ trunk/tests/src/org/jboss/test/messaging/jms/persistence/MessagePersistenceManagerTest.java 2007-02-11 20:04:36 UTC (rev 2270)
@@ -78,7 +78,7 @@
JDBCPersistenceManager p =
new JDBCPersistenceManager(sc.getDataSource(), sc.getTransactionManager(),
sc.getPersistenceManagerSQLProperties(),
- true, batch, true, maxParams);
+ true, batch, true, false, maxParams);
p.start();
return p;
}
More information about the jboss-cvs-commits
mailing list