używam Java EE 5. Napisałem przechwytywania dla wszystkich EJB z trzech metod rejestrowania:Jak uzyskać nazwę użytkownika wywołującego w metodzie zdarzeń cyklu EJB Interceptor za
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");
}
}
}
Chcę uzyskać nazwę EJB, które nazwał ten przechwytujący. Jak mogę to zrobić?
Próbowałem ctx.getMethod().getDeclaringClass().getSimpleName()
ale ctx.getMethod()
Przywraca null
w postConstruct(-)
i predestroy(-)
metod.
Opcja 'ctx.getMethod()' zwraca null lub 'ctx' ** ** jest NULL? –
@Piotr Nowicki ctx.getMethod() zwraca zawsze null w wywołaniach zwrotnych cyklu życia. –
@MikkoMaunu tak, wiem, że jest wywoływana przez kontener, a nie przez metodę invoker. Byłem bardziej zainteresowany tym, że metoda wywołania zwrotnego cyklu życia może przyjmować parametr 'InvocationContext', ale zapomniałem, że Interceptor może :-) –