インターセプタロジックの実装
カスタムインターセプタがヒットしたときに実行される Java コードは、インターセプタオブジェクトの onMethodBegin や onMethodEnd メソッドで提供されます。
エージェント API を活用する単純なインターセプタのコード例を次に示します。
public class SampleGenericInterceptor extends AGenericInterceptor {
public SampleGenericInterceptor() {
super();
}
@Override
public List<Rule> initializeRules() {
List<Rule> rules = new ArrayList<Rule>();
rules.add(new Rule.Builder("Main").methodMatchString("genericInterceptorTarget").build());
return rules;
}
public Object onMethodBegin(Object invokedObject, String className, String methodName, Object[] paramValues) {
System.out.print("In begin");
AppdynamicsAgent.startTransaction("SampleGenericInterceptorBT", null, EntryTypes.POJO, false);
Map<String, String> keyVsValue = new HashMap<String, String>();
keyVsValue.put("foo", "bar");
AppdynamicsAgent.getEventPublisher().publishEvent("an event happened", "INFO", "AGENT_STATUS", keyVsValue);
return null;
}
public void onMethodEnd(Object state, Object invokedObject, String className, String methodName,
Object[] paramValues, Throwable thrownException, Object returnValue) {
System.out.print("In end");
Transaction currentTransaction = AppdynamicsAgent.getTransaction();
Set<DataScope> dataScopes = new HashSet<DataScope>();
dataScopes.add(DataScope.SNAPSHOTS); // collect data for BT snapshot.
currentTransaction.collectData("key", "value", dataScopes);
currentTransaction.end();
}
}