Как получить имя вызывающего в методе события жизненного цикла перехватчика EJB

Я использую Java EE 5. Я написал перехватчик для всех EJB с тремя методами ведения журнала:

public class DefaultInterceptor {
    public static final String PREFIX = "!!!!!!!!!Interceptor:";

    @PostConstruct
    public void postConstruct(InvocationContext ctx) {
        try {
            System.out.println(PREFIX + " postConstruct");
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    @PreDestroy
    public void preDestroy(InvocationContext ctx) {
        try {
            System.out.println(PREFIX + " predestroy");
            System.out.println(PREFIX + "ctx.preceed=" + ctx.proceed());
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    @AroundInvoke
    public Object intercept(InvocationContext ctx) throws Exception {
        System.out.println(PREFIX + "method invocation '" + ctx.getMethod().getName() + "'");
        System.out.println(PREFIX + "parameters ='" + Arrays.deepToString(ctx.getParameters()) + "'");
        System.out.println(Arrays.deepToString(ctx.getContextData().keySet().toArray()));
        Object result = null;
        try {
            result = ctx.proceed();
            System.out.println(PREFIX + "Method result='" + result + "'");
            return result;
        } catch (Exception ex) {
            System.out.println(PREFIX + "Method exception ='" + ex.getMessage() + "'");
            throw ex;
        } finally {
            System.out.println(PREFIX + "Method finished");
        }
    }
} 

Я хочу получить имя EJB, который вызвал этот перехватчик. Как это сделать?

Я пробовал ctx.getMethod (). GetDeclaringClass (). GetSimpleName () , но ctx.getMethod () возвращает null в методах postConstruct (-) и predestroy (-) .

8
задан Piotr Nowicki 30 November 2011 в 14:50
поделиться