JOIN not working..
clebert.suconic Mar 11, 2009 7:17 PMUnless I made some mistake on the following testCase, there is some problem on JOIN (which I will be investigating).
But if you guys could please take a look on this testcase... just to make sure I'm not missing anything obvious:
 public void testSimpleJoin() throws Exception
 {
 SimpleString ADDRESS1 = new SimpleString("Address-1");
 SimpleString ADDRESS2 = new SimpleString("Address-2");
 clientSession.createQueue(ADDRESS1, ADDRESS1, true);
 clientSession.createQueue(ADDRESS2, ADDRESS2, true);
 Xid xid = newXID();
 ClientSession sessionA = sessionFactory.createSession(true, false, false);
 sessionA.start(xid, XAResource.TMNOFLAGS);
 ClientSession sessionB = sessionFactory.createSession(true, false, false);
 sessionB.start(xid, XAResource.TMJOIN);
 ClientProducer prodA = sessionA.createProducer(ADDRESS1);
 ClientProducer prodB = sessionB.createProducer(ADDRESS2);
 prodA.send(createTextMessage(sessionA, "A"));
 prodB.send(createTextMessage(sessionB, "B"));
 sessionA.end(xid, XAResource.TMSUCCESS);
 sessionB.end(xid, XAResource.TMSUCCESS);
 // Since sessionA and B are from the same server, we could close B and commit the XID through sessionA, as B was JOINED
 sessionB.close();
 sessionA.commit(xid, true);
 sessionA.close();
 xid = newXID();
 clientSession.start(xid, XAResource.TMNOFLAGS);
 ClientConsumer cons1 = clientSession.createConsumer(ADDRESS1);
 ClientConsumer cons2 = clientSession.createConsumer(ADDRESS2);
 clientSession.start();
 ClientMessage msg = cons1.receive(1000);
 assertNotNull(msg);
 msg.acknowledge();
 assertNull(cons1.receiveImmediate());
 msg = cons2.receive(1000);
 assertNotNull(msg);
 msg.acknowledge();
 assertNull(cons2.receiveImmediate());
 clientSession.end(xid, XAResource.TMSUCCESS);
 clientSession.commit(xid, true);
 clientSession.close();
 }
And the same test, but using a real TransactionManager instead:
 public void testSimpleJoinWithTM() throws Exception
 {
 SimpleString ADDRESS1 = new SimpleString("Address-1");
 SimpleString ADDRESS2 = new SimpleString("Address-2");
 clientSession.createQueue(ADDRESS1, ADDRESS1, true);
 clientSession.createQueue(ADDRESS2, ADDRESS2, true);
 TransactionManager tm = new TransactionManagerImple();
 tm.begin();
 Transaction tx = tm.getTransaction();
 ClientSession sessionA = sessionFactory.createSession(true, false, false);
 tx.enlistResource(sessionA);
 ClientSession sessionB = sessionFactory.createSession(true, false, false);
 tx.enlistResource(sessionB);
 ClientProducer prodA = sessionA.createProducer(ADDRESS1);
 ClientProducer prodB = sessionB.createProducer(ADDRESS2);
 prodA.send(createTextMessage(sessionA, "A"));
 prodB.send(createTextMessage(sessionB, "B"));
 tx.delistResource(sessionA, XAResource.TMSUCCESS);
 tx.delistResource(sessionB, XAResource.TMSUCCESS);
 tm.commit();
 sessionB.close();
 sessionA.close();
 tm.begin();
 tx = tm.getTransaction();
 tx.enlistResource(clientSession);
 ClientConsumer cons1 = clientSession.createConsumer(ADDRESS1);
 ClientConsumer cons2 = clientSession.createConsumer(ADDRESS2);
 clientSession.start();
 ClientMessage msg = cons1.receive(1000);
 assertNotNull(msg);
 msg.acknowledge();
 assertNull(cons1.receiveImmediate());
 msg = cons2.receive(1000);
 assertNotNull(msg);
 msg.acknowledge();
 assertNull(cons2.receiveImmediate());
 tx.delistResource(clientSession, XAResource.TMSUCCESS);
 tm.commit();
 clientSession.close();
 }