非同期スレッドハンドオフの定義

チェックアウトメソッドでスレッドハンドオフが行われ、別のスレッドでモニタする一部のビジネスロジックが実行される場合も、ビジネストランザクションでワーカースレッドを登録します。

public String checkout(List<ItemOrders> orders) {
Transaction transaction = null;
try {
transaction = AppdynamicsAgent.startTransaction("Checkout", null, EntryTypes.POJO, false);
// ... Method code
// Custom thread handoff using custom queue
asyncTaskQueue.add(task);
} finally {
if (transaction != null) {
transaction.end();
}
}
}

これをインストゥルメント化するには、スレッドハンドオフをマークするように add メソッドを変更してから、スレッドの実行を開始する新しいセグメントを開始します。

public class AsyncTaskQueue {
public void add(Task task) {
AppdynamicsAgent.getTransaction().markHandoff(task);
/*******************
* Method Body
*******************/
}
public class Task {
public void run() {
Transaction transaction = null;
try {
transaction = AppdynamicsAgent.startSegment(this);
/*******************
* Method Body
*******************/
} finally {
if (transaction != null) {
transaction.endSegment();
}
}
}
public void cancel() {
AppdynamicsAgent.cancelHandoff(this);
/*******************
* Method Body
*******************/
}
}

タスクオブジェクトは、セグメントを関連付けするエージェントによって使用されます。エージェント API を使用してスレッドセグメントを関連付けるには、エージェントが Executor モードで実行されている必要があります。