Binding[] bindings = new Binding[16];
queues[0] =
new LocalClusteredQueue(office1, 1, "sub1", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[0] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[0]);
queues[1] =
new LocalClusteredQueue(office1, 1, "sub2", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[1] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[1]);
queues[2] =
new LocalClusteredQueue(office2, 2, "sub3", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[2] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[2]);
queues[3] =
new LocalClusteredQueue(office2, 2, "sub4", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[3] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[3]);
queues[4] =
new LocalClusteredQueue(office2, 2, "sub5", channelIDManager.getID(), ms, pm,
true, true, -1, null, tr);
bindings[4] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[4]);
queues[5] =
new LocalClusteredQueue(office1, 1, "sub6", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[5] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[5]);
queues[6] =
new LocalClusteredQueue(office1, 1, "sub7", channelIDManager.getID(), ms, pm,
true, true, -1, null, tr);
bindings[6] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[6]);
queues[7] =
new LocalClusteredQueue(office1, 1, "sub8", channelIDManager.getID(), ms, pm,
true, true, -1, null, tr);
bindings[7] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[7]);
queues[8] =
new LocalClusteredQueue(office1, 1, "sub9", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[8] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[8]);
queues[9] =
new LocalClusteredQueue(office1, 1, "sub10", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[9] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[9]);
queues[10] =
new LocalClusteredQueue(office2, 2, "sub11", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[10] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[10]);
queues[11] =
new LocalClusteredQueue(office2, 2, "sub12", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[11] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[11]);
queues[12] =
new LocalClusteredQueue(office2, 2, "sub13", channelIDManager.getID(), ms, pm,
true, true, -1, null, tr);
bindings[12] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[12]);
queues[13] =
new LocalClusteredQueue(office1, 1, "sub14", channelIDManager.getID(), ms, pm,
true, false, -1, null, tr);
bindings[13] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[13]);
queues[14] =
new LocalClusteredQueue(office1, 1, "sub15", channelIDManager.getID(), ms, pm,
true, true, -1, null, tr);
bindings[14] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[14]);
queues[15] =
new LocalClusteredQueue(office1, 1, "sub16", channelIDManager.getID(), ms, pm,
true, true, -1, null, tr);
bindings[15] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[15]);
SimpleReceiver[] receivers = new SimpleReceiver[16];
for (int i = 0; i < 16; i++)
{
receivers[i] = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
queues[i].add(receivers[i]);
}
//First for topic 1
Message msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);;
MessageReference ref1 = ms.reference(msg1);
Message msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);;
MessageReference ref2 = ms.reference(msg2);
Transaction tx = tr.createTransaction();
boolean routed = office1.route(ref1, new SimpleCondition("topic1"), tx);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic1"), tx);
assertTrue(routed);
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
tx.commit();
//Messages are sent asych so may take some finite time to arrive
Thread.sleep(1000);
for (int i = 0; i < 8; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertEquals(2, msgs.size());
Message msgRec1 = (Message)msgs.get(0);
assertEquals(msg1.getMessageID(), msgRec1.getMessageID());
Message msgRec2 = (Message)msgs.get(1);
assertEquals(msg2.getMessageID(), msgRec2.getMessageID());
receivers[i].acknowledge(msgRec1, null);
receivers[i].acknowledge(msgRec2, null);
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
receivers[i].clear();
}
for (int i = 8; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);;
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);;
ref2 = ms.reference(msg2);
tx = tr.createTransaction();
routed = office1.route(ref1, new SimpleCondition("topic1"), tx);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic1"), tx);
assertTrue(routed);
//Messages are sent asych so may take some finite time to arrive
Thread.sleep(1000);
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
tx.rollback();
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
//Now send some non transactionally
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);
ref2 = ms.reference(msg2);
routed = office1.route(ref1, new SimpleCondition("topic1"), null);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic1"), null);
assertTrue(routed);
//Messages are sent asych so may take some finite time to arrive
Thread.sleep(1000);
//And acknowledge transactionally
tx = tr.createTransaction();
for (int i = 0; i < 8; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertEquals(2, msgs.size());
Message msgRec1 = (Message)msgs.get(0);
assertEquals(msg1.getMessageID(), msgRec1.getMessageID());
Message msgRec2 = (Message)msgs.get(1);
assertEquals(msg2.getMessageID(), msgRec2.getMessageID());
receivers[i].acknowledge(msgRec1, tx);
receivers[i].acknowledge(msgRec2, tx);
int deliveringCount = queues[i].getDeliveringCount();
assertEquals(2, deliveringCount);
receivers[i].clear();
}
for (int i = 8; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
tx.commit();
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
// and the rollback
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);;
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);;
ref2 = ms.reference(msg2);
routed = office1.route(ref1, new SimpleCondition("topic1"), null);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic1"), null);
assertTrue(routed);
Thread.sleep(1000);
tx = tr.createTransaction();
for (int i = 0; i < 8; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertEquals(2, msgs.size());
Message msgRec1 = (Message)msgs.get(0);
assertEquals(msg1.getMessageID(), msgRec1.getMessageID());
Message msgRec2 = (Message)msgs.get(1);
assertEquals(msg2.getMessageID(), msgRec2.getMessageID());
receivers[i].acknowledge(msgRec1, tx);
receivers[i].acknowledge(msgRec2, tx);
int deliveringCount = queues[i].getDeliveringCount();
assertEquals(2, deliveringCount);
}
for (int i = 8; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
tx.rollback();
for (int i = 0; i < 8; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertEquals(2, msgs.size());
Message msgRec1 = (Message)msgs.get(0);
assertEquals(msg1.getMessageID(), msgRec1.getMessageID());
Message msgRec2 = (Message)msgs.get(1);
assertEquals(msg2.getMessageID(), msgRec2.getMessageID());
int deliveringCount = queues[i].getDeliveringCount();
assertEquals(2, deliveringCount);
receivers[i].acknowledge(msgRec1, null);
receivers[i].acknowledge(msgRec2, null);
receivers[i].clear();
}
for (int i = 8; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
// Now for topic 2
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);
ref2 = ms.reference(msg2);
tx = tr.createTransaction();
routed = office1.route(ref1, new SimpleCondition("topic2"), tx);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic2"), tx);
assertTrue(routed);
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
tx.commit();
//Messages are sent asych so may take some finite time to arrive
Thread.sleep(1000);
for (int i = 0; i < 8; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
for (int i = 8; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertEquals(2, msgs.size());
Message msgRec1 = (Message)msgs.get(0);
assertEquals(msg1.getMessageID(), msgRec1.getMessageID());
Message msgRec2 = (Message)msgs.get(1);
assertEquals(msg2.getMessageID(), msgRec2.getMessageID());
receivers[i].acknowledge(msgRec1, null);
receivers[i].acknowledge(msgRec2, null);
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
receivers[i].clear();
}
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);;
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);;
ref2 = ms.reference(msg2);
tx = tr.createTransaction();
routed = office1.route(ref1, new SimpleCondition("topic1"), tx);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic1"), tx);
assertTrue(routed);
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
tx.rollback();
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
//Now send some non transactionally
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);
ref2 = ms.reference(msg2);
routed = office1.route(ref1, new SimpleCondition("topic2"), null);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic2"), null);
assertTrue(routed);
Thread.sleep(1000);
//And acknowledge transactionally
tx = tr.createTransaction();
for (int i = 0; i < 8; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
for (int i = 8; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertEquals(2, msgs.size());
Message msgRec1 = (Message)msgs.get(0);
assertEquals(msg1.getMessageID(), msgRec1.getMessageID());
Message msgRec2 = (Message)msgs.get(1);
assertEquals(msg2.getMessageID(), msgRec2.getMessageID());
receivers[i].acknowledge(msgRec1, tx);
receivers[i].acknowledge(msgRec2, tx);
int deliveringCount = queues[i].getDeliveringCount();
assertEquals(2, deliveringCount);
receivers[i].clear();
}
tx.commit();
for (int i = 0; i < 16; i++)
{
List msgs = receivers[i].getMessages();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
msgs = queues[i].browse();
assertNotNull(msgs);
assertTrue(msgs.isEmpty());
}
// and the rollback
msg1 = CoreMessageFactory.createCoreMessage(1, persistent, null);;
ref1 = ms.reference(msg1);
msg2 = CoreMessageFactory.createCoreMessage(2, persistent, null);;
ref2 = ms.reference(msg2);
routed = office1.route(ref1, new SimpleCondition("topic2"), null);
assertTrue(routed);
routed = office1.route(ref2, new SimpleCondition("topic2"), null);
assertTrue(routed);
Thread.sleep(1000);
tx = tr.createTransaction();