gpt4 book ai didi

java - 如何在 EJB 拦截器的生命周期事件方法中获取调用者名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:43 25 4
gpt4 key购买 nike

我使用 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(-) 方法。

最佳答案

对于生命周期回调 ctx.getMethod() 返回 null。这在此处记录为示例:http://docs.oracle.com/javaee/5/api/javax/interceptor/InvocationContext.html

之所以如此,是因为调用生命周期回调方法的不是你的EJB,而是容器。

如果您对拦截器和它所属的 bean 之间的关联感兴趣,那么 ctx.getTarget() 方法不符合您的目的吗?

关于java - 如何在 EJB 拦截器的生命周期事件方法中获取调用者名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com