インターセプタロジックの実装

カスタムインターセプタがヒットしたときに実行される Java コードは、インターセプタオブジェクトの onMethodBeginonMethodEnd メソッドで提供されます。

エージェント 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();
    }
}