import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.TextMessage;
import javax.jms.XAConnection;
import javax.jms.XASession;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
import javax.transaction.xa.XAResource;
import com.tibco.tibjms.TibjmsXAConnectionFactory;
public class Test {
private static boolean canRun = true;
private final static void runTest() throws Exception {
final com.tibco.tibjms.TibjmsXAConnectionFactory xacf =
new TibjmsXAConnectionFactory();
xacf.setConnAttemptCount(60);
xacf.setConnAttemptDelay(100);
xacf.setConnAttemptTimeout(1000);
xacf.setReconnAttemptCount(60);
xacf.setReconnAttemptDelay(100);
xacf.setReconnAttemptTimeout(1000);
xacf.setServerUrl("tcp://node1:7222,tcp://node2:8222");
Thread[] threads = new Thread[20];
FileOutputStream fos = new FileOutputStream("C://xa.log");
final PrintStream ps = new PrintStream(fos);
for (int i=0; i < threads.length; i++) {
threads[i] = new Thread() {
public void run() {
while (canRun) {
XAConnection xaconn1 = null;
XAConnection xaconn2 = null;
TransactionManager tm = null;
XAResource xares1 = null;
XAResource xares2 = null;
try {
xaconn1 = xacf.createXAConnection();
xaconn2 = xacf.createXAConnection();
tm = com.arjuna.ats.jta
.TransactionManager.transactionManager();
tm.setTransactionTimeout(30);
xaconn1.start();
xaconn2.start();
XASession sess1 = xaconn1.createXASession();
XASession sess2 = xaconn1.createXASession();
xares1 = ( sess1.getXAResource() );
xares2 = ( sess2.getXAResource() );
MessageConsumer bw1cons =
sess1.createConsumer(sess1.createQueue("test.bw1"));
MessageConsumer fw1cons =
sess1.createConsumer(sess1.createQueue("test.fw1"));
MessageProducer bw1prod =
sess1.createProducer(sess1.createQueue("test.bw1"));
MessageProducer fw1prod =
sess1.createProducer(sess1.createQueue("test.fw1"));
tm.begin();
tm.getTransaction().enlistResource(xares1);
tm.getTransaction().enlistResource(xares2);
///
TextMessage m = (TextMessage) bw1cons.receive(1000);
if (m!=null)
fw1prod.send(m);
m = (TextMessage) fw1cons.receive(1000);
if (m!=null)
bw1prod.send(m);
///
tm.getTransaction().delistResource(xares1,
XAResource.TMSUCCESS);
tm.getTransaction().delistResource(xares2,
XAResource.TMSUCCESS);
tm.commit();
}
catch (Exception e) {
e.printStackTrace(ps);
ps.flush();
Transaction tr = null;
try {
tr = tm.getTransaction();
}
catch (Exception ex) {
ex.printStackTrace(ps);
ps.flush();
}
if (tr!=null) {
try {
tr.rollback();
}
catch (Exception ex) {
ex.printStackTrace(ps);
ps.flush();
}
try {
tr.delistResource(xares1, XAResource.TMFAIL);
}
catch (Exception ex) {
ex.printStackTrace(ps);
ps.flush();
}
try {
tr.delistResource(xares2, XAResource.TMFAIL);
}
catch (Exception ex) {
ex.printStackTrace(ps);
ps.flush();
}
}
}
finally {
try {
xaconn1.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
xaconn2.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
};
}
for (Thread t : threads)
t.start();
}
public static void main(String[] args) throws Exception {
System.out.println("Press q to stop.");
runTest();
Scanner sc = new Scanner(System.in);
if (sc.nextLine().contains("q"))
canRun = false;
sc.close();
}
}
środa, listopada 14, 2012
Prosty test na XA
Subskrybuj:
Komentarze do posta (Atom)
0 komentarze:
Prześlij komentarz