Interceptors and Injection
Interceptors belong to the same ENC as the EJBs they intercept. Like the
EJBs they intercept, interceptor classes have full support for all the
injection annotations, as well as injection through XML. So, you can use
annotations such as @Resource, @EJB, and @PersistenceContext within your interceptor
class if you so desire. Let’s illustrate this in a revised view of our
auditing interceptor:
public class RecordingAuditor
{
...
/**
* The current EJB Context; to be injected by the Container
*/
@Resource
EJBContext beanContext;
/**
* Persistently records the intercepted {@link InvocationContext} such that
* we may examine it later
*/
@AroundInvoke
public Object audit(final InvocationContext invocationContext) throws Exception
{
// Precondition checks
assert invocationContext != null : "Context was not specified";
// Obtain the caller
final Principal caller = beanContext.getCallerPrincipal();
// Create a new view
final AuditedInvocation audit =
new AuditedInvocation(invocationContext, caller);
// Record the invocation
invocations.add(audit);
... // The rest omitted for brevity
}
}The purpose of this interceptor is to log in a persistent view every
method invocation done on a particular bean so that an audit trail is
created. From this audit trail, system administrators can research
security breaches or replay the actions of a particular user. The
interceptor obtains the calling user by invoking getCallerPrincipal() on the javax.ejb.EJBContext injected into ...