これは、SampleSubsystem.java の例です。
SampleSubsystem.java
package customcode;
import com.ibm.rational.test.lt.kernel.action.IKAction;
import com.ibm.rational.test.lt.kernel.engine.impl.Queue;
import com.ibm.rational.test.lt.kernel.impl.KSubsystem;
/**
* RPT エンジン・サブシステムのサンプル
*/
public class SampleSubsystem extends KSubsystem {
private Queue sampleSubsystemQueue;
private boolean stopRequested = false;
private SampleAction client;
public SampleSubsystem(String name) {
super(name);
sampleSubsystemQueue = new Queue();
sampleSubsystemQueue.setBlocking(true); // キューに何かが表示されるのを待つことを考慮する
}
/*
* アクションは、enqueue() の呼び出しを介してサービスのためにサブシステムに入ります。
* アクションは、IKAction getSubsystem() メソッドを使用することにより、
* サブシステムを参照できます。
*
* @see com.ibm.rational.test.lt.kernel.IKSubsystem#enqueue(com.ibm.rational.test.lt.kernel.action.IKAction)
*/
public void enqueue(IKAction action) {
sampleSubsystemQueue.enqueue(action);
}
/*
* サブシステムに対する停止のメッセージ。
*
* @see com.ibm.rational.test.lt.kernel.IKSubsystem#shutdown()
*/
public void shutdown() {
stopRequested = true;
}
/*
* @see java.lang.Thread#run()
*/
public void run() {
while(!stopRequested) {
ringIn(); // エンジンのサブシステムが正常であることを通知する
client = null;
// 処理することがない場合は、作業を待つ
updateJob("Idle");
client = (SampleAction)sampleSubsystemQueue.dequeue(pingTime);
// このサブシステムの処理は、アクションの属性に作用することになる
if (client != null) {
updateJob("Servicing " + client.getName()); // デバッグに有効
client.setServiced();
dispatch(client); // サービス提供アクションがサブシステムから離れる
}
}
}
}