/*
* Copyright 2002 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package connector;
import java.lang.reflect.Method;
import java.util.Iterator;
import javax.resource.spi.endpoint.MessageEndpoint;
import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.resource.spi.UnavailableException;
import javax.resource.spi.work.ExecutionContext;
import javax.resource.spi.work.Work;
import javax.resource.spi.work.WorkManager;
import javax.resource.spi.work.WorkException;
/**
*
* @author Qingqing Ouyang
*/
public class TestWMWork implements Work {
private boolean stop = false;
private int id;
private boolean isRogue;
private boolean doNest;
private WorkManager wm;
private ExecutionContext ctx;
public TestWMWork(int id, boolean isRogue) {
this(id, isRogue, false, null);
}
public TestWMWork(int id, boolean isRogue,
boolean doNest, ExecutionContext ctx) {
this.id = id;
this.isRogue = isRogue;
this.doNest = doNest;
this.ctx = ctx;
}
public void setWorkManager (WorkManager wm) {
this.wm = wm;
}
public void run() {
System.out.println("TestWMWork[" + id + "].start running");
if (!isRogue) {
try {
Thread.currentThread().sleep(1000);
} catch (Exception ex) {
System.out.println("TestWMWork[" + id + "].interrupted = ");
ex.printStackTrace();
}
} else {
System.out.println("TestWMWork: Simulating rogue RA's Work: Expected Arithmetic Exception - divide by Zero");
int j = 100/0;
}
if (doNest && (wm != null)) {
Work nestedWork = new TestWMWork(8888, false);
try {
wm.doWork(nestedWork, 1*1000, ctx, null);
} catch (WorkException ex) {
if (ex.getErrorCode().equals(
WorkException.TX_CONCURRENT_WORK_DISALLOWED)) {
System.out.println("TestWMWork[" + id + "] " +
"PASS: CAUGHT EXPECTED = " + ex.getErrorCode());
} else {
System.out.println("TestWMWork[" + id + "] " +
"FAIL: CAUGHT UNEXPECTED = " + ex.getErrorCode());
}
}
nestedWork = new TestWMWork(9999, false);
try {
ExecutionContext ec = new ExecutionContext();
ec.setXid(new XID());
ec.setTransactionTimeout(5*1000); //5 seconds
wm.doWork(nestedWork, 1*1000, ec, null);
} catch (Exception ex) {
System.out.println("TestWMWork[" + id + "] " +
"FAIL: CAUGHT UNEXPECTED = " + ex.getMessage());
}
}
System.out.println("TestWMWork[" + id + "].stop running");
}
public void release() {}
public void stop() {
this.stop = true;
}
public String toString() {
return String.valueOf(id);
}
}