1 22 package org.jboss.test.jbossmq.test; 23 24 import javax.jms.Message ; 25 import javax.jms.Topic ; 26 import javax.jms.TopicPublisher ; 27 import javax.jms.TopicSession ; 28 import javax.jms.TopicSubscriber ; 29 import javax.jms.XATopicConnection ; 30 import javax.jms.XATopicConnectionFactory ; 31 import javax.jms.XATopicSession ; 32 import javax.naming.InitialContext ; 33 import javax.transaction.xa.XAResource ; 34 import javax.transaction.xa.Xid ; 35 36 import org.jboss.test.JBossTestCase; 37 38 44 public class XAResourceUnitTestCase extends JBossTestCase 45 { 46 static String XA_TOPIC_FACTORY = "XAConnectionFactory"; 47 48 static String TEST_TOPIC = "topic/testTopic"; 49 50 public XAResourceUnitTestCase(String name) throws Exception 51 { 52 super(name); 53 } 54 55 public void testXAResourceSuspendWorkCommit() throws Exception 56 { 57 InitialContext context = getInitialContext(); 58 XATopicConnectionFactory factory = (XATopicConnectionFactory ) context.lookup(XA_TOPIC_FACTORY); 59 Topic topic = (Topic ) context.lookup(TEST_TOPIC); 60 61 XATopicConnection connection = factory.createXATopicConnection(); 62 try 63 { 64 XATopicSession xaSession = connection.createXATopicSession(); 66 TopicSession session = xaSession.getTopicSession(); 67 TopicPublisher publisher = session.createPublisher(topic); 68 Message message = session.createTextMessage(); 69 70 MyXid xid1 = new MyXid(); 72 XAResource resource = xaSession.getXAResource(); 73 resource.start(xid1, XAResource.TMNOFLAGS); 74 75 publisher.publish(message); 77 78 resource.end(xid1, XAResource.TMSUSPEND); 80 81 MyXid xid2 = new MyXid(); 83 resource.start(xid2, XAResource.TMNOFLAGS); 84 85 publisher.publish(message); 87 88 resource.end(xid1, XAResource.TMSUCCESS); 90 resource.commit(xid1, true); 91 92 publisher.publish(message); 94 95 resource.end(xid2, XAResource.TMSUCCESS); 97 resource.commit(xid2, true); 98 } 99 finally 100 { 101 connection.close(); 102 } 103 } 104 105 public void testXAResourceRollbackAfterPrepare() throws Exception 106 { 107 InitialContext context = getInitialContext(); 108 XATopicConnectionFactory factory = (XATopicConnectionFactory ) context.lookup(XA_TOPIC_FACTORY); 109 Topic topic = (Topic ) context.lookup(TEST_TOPIC); 110 111 XATopicConnection connection = factory.createXATopicConnection(); 112 try 113 { 114 XATopicSession xaSession = connection.createXATopicSession(); 116 TopicSession session = xaSession.getTopicSession(); 117 TopicSubscriber subscriber = session.createSubscriber(topic); 118 connection.start(); 119 TopicPublisher publisher = session.createPublisher(topic); 120 Message message = session.createTextMessage(); 121 122 publisher.publish(message); 124 125 MyXid xid1 = new MyXid(); 127 XAResource resource = xaSession.getXAResource(); 128 resource.start(xid1, XAResource.TMNOFLAGS); 129 130 message = subscriber.receiveNoWait(); 132 if (message == null) 133 fail("No message?"); 134 135 resource.end(xid1, XAResource.TMSUCCESS); 137 resource.prepare(xid1); 138 139 resource.rollback(xid1); 141 142 message = subscriber.receiveNoWait(); 144 if (message == null) 145 fail("No message after rollback?"); 146 } 147 finally 148 { 149 connection.close(); 150 } 151 } 152 153 public static junit.framework.Test suite() throws Exception 154 { 155 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 156 return getDeploySetup(XAResourceUnitTestCase.class, 157 loader.getResource("messaging/test-destinations-service.xml").toString()); 158 } 159 160 public static class MyXid 161 implements Xid 162 { 163 static byte next = 0; 164 165 byte[] xid; 166 167 public MyXid() 168 { 169 xid = new byte[] { ++next }; 170 } 171 172 public int getFormatId() 173 { 174 return 314; 175 } 176 177 public byte[] getGlobalTransactionId() 178 { 179 return xid; 180 } 181 182 public byte[] getBranchQualifier() 183 { 184 return null; 185 } 186 } 187 } 188 | Popular Tags |