Io uso di Java EE 5. Ho scritto un intercettore per tutti gli EJB con tre metodi per la registrazione:Come ottenere il nome invoker nel metodo di evento del ciclo di vita EJB di intercettore
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");
}
}
}
voglio ottenere il nome di EJB che chiamato questo intercettore. Come posso farlo?
ho cercato ctx.getMethod().getDeclaringClass().getSimpleName()
ma ctx.getMethod()
rendimenti null
in postConstruct(-)
e predestroy(-)
metodi.
Il 'ctx.getMethod()' restituisce NULL o il 'ctx' ** ** è nullo? –
@Piotr Nowicki ctx.getMethod() restituisce sempre null nei callback del ciclo di vita. –
@MikkoMaunu sì, so che è chiamato dal contenitore, non dal metodo invocatore. Ero più interessato al fatto che il metodo callback del ciclo di vita potesse prendere il parametro 'InvocationContext', ma ho dimenticato che quelli di Interceptor possono :-) –