1 22 package org.jboss.test.jbossmessaging.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.jbossmessaging.JMSTestCase; 37 38 45 public class XAResourceUnitTestCase extends JMSTestCase 46 { 47 static String XA_TOPIC_FACTORY = "XAConnectionFactory"; 48 49 static String TEST_TOPIC = "topic/testTopic"; 50 51 public XAResourceUnitTestCase(String name) throws Exception 52 { 53 super(name); 54 } 55 56 public void testXAResourceSuspendWorkCommit() throws Exception 57 { 58 InitialContext context = getInitialContext(); 59 XATopicConnectionFactory factory = (XATopicConnectionFactory ) context.lookup(XA_TOPIC_FACTORY); 60 Topic topic = (Topic ) context.lookup(TEST_TOPIC); 61 62 XATopicConnection connection = factory.createXATopicConnection(); 63 try 64 { 65 XATopicSession xaSession = connection.createXATopicSession(); 67 TopicSession session = xaSession.getTopicSession(); 68 TopicPublisher publisher = session.createPublisher(topic); 69 Message message = session.createTextMessage(); 70 71 MyXid xid1 = new MyXid(); 73 XAResource resource = xaSession.getXAResource(); 74 resource.start(xid1, XAResource.TMNOFLAGS); 75 76 publisher.publish(message); 78 79 resource.end(xid1, XAResource.TMSUSPEND); 81 82 MyXid xid2 = new MyXid(); 84 resource.start(xid2, XAResource.TMNOFLAGS); 85 86 publisher.publish(message); 88 89 resource.end(xid1, XAResource.TMSUCCESS); 91 resource.commit(xid1, true); 92 93 publisher.publish(message); 95 96 resource.end(xid2, XAResource.TMSUCCESS); 98 resource.commit(xid2, true); 99 } 100 finally 101 { 102 connection.close(); 103 } 104 } 105 106 public void testXAResourceRollbackAfterPrepare() throws Exception 107 { 108 InitialContext context = getInitialContext(); 109 XATopicConnectionFactory factory = (XATopicConnectionFactory ) context.lookup(XA_TOPIC_FACTORY); 110 Topic topic = (Topic ) context.lookup(TEST_TOPIC); 111 112 XATopicConnection connection = factory.createXATopicConnection(); 113 try 114 { 115 XATopicSession xaSession = connection.createXATopicSession(); 117 TopicSession session = xaSession.getTopicSession(); 118 TopicSubscriber subscriber = session.createSubscriber(topic); 119 connection.start(); 120 TopicPublisher publisher = session.createPublisher(topic); 121 Message message = session.createTextMessage(); 122 123 publisher.publish(message); 125 126 MyXid xid1 = new MyXid(); 128 XAResource resource = xaSession.getXAResource(); 129 resource.start(xid1, XAResource.TMNOFLAGS); 130 131 message = subscriber.receiveNoWait(); 133 if (message == null) 134 fail("No message?"); 135 136 resource.end(xid1, XAResource.TMSUCCESS); 138 resource.prepare(xid1); 139 140 resource.rollback(xid1); 142 143 message = subscriber.receiveNoWait(); 145 if (message == null) 146 fail("No message after rollback?"); 147 } 148 finally 149 { 150 connection.close(); 151 } 152 } 153 154 public static junit.framework.Test suite() throws Exception 155 { 156 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 157 String resourceName = getJMSResourceRelativePathname("test-destinations-service.xml") ; 158 159 return getDeploySetup(XAResourceUnitTestCase.class, 160 loader.getResource(resourceName).toString()); 161 } 162 163 public static class MyXid 164 implements Xid 165 { 166 static byte next = 0; 167 168 byte[] xid; 169 170 public MyXid() 171 { 172 xid = new byte[] { ++next }; 173 } 174 175 public int getFormatId() 176 { 177 return 314; 178 } 179 180 public byte[] getGlobalTransactionId() 181 { 182 return xid; 183 } 184 185 public byte[] getBranchQualifier() 186 { 187 return null; 188 } 189 } 190 } 191 | Popular Tags |