View Javadoc
1   package info.ejava.examples.ejb.interceptor.interceptors;
2   
3   import javax.annotation.PostConstruct;
4   import javax.annotation.PreDestroy;
5   import javax.annotation.Resource;
6   import javax.ejb.EJBContext;
7   import javax.interceptor.AroundConstruct;
8   import javax.interceptor.AroundInvoke;
9   import javax.interceptor.AroundTimeout;
10  import javax.interceptor.InvocationContext;
11  
12  import org.slf4j.Logger;
13  import org.slf4j.LoggerFactory;
14  
15  
16  public class LifecycleInterceptor {
17      private static final Logger logger = LoggerFactory.getLogger(LifecycleInterceptor.class);
18      
19      @Resource
20      private EJBContext ejbCtx;
21      
22      @AroundConstruct
23      public void ctor(InvocationContext ctx) {
24          try {
25              logger.debug("*** Contructor: {}, ejbCtx={}", ctx.getConstructor(), ejbCtx);
26              ctx.proceed();
27          } catch (Exception ex) {
28              throw new RuntimeException("error calling post construct", ex);
29          }
30      }
31  
32      @PostConstruct
33      public void init(InvocationContext ctx) {
34          logger.debug("*** Lifecycle event: {}::INIT", ctx.getTarget());
35          try {
36              ctx.proceed();
37          } catch (Exception ex) {
38              throw new RuntimeException("error calling post construct", ex);
39          }
40      }
41      
42      @AroundInvoke
43      public Object invoke(InvocationContext ctx) throws Exception {
44          logger.debug("*** Business Method: {}, caller={}", ctx.getMethod(), ejbCtx.getCallerPrincipal().getName());
45          Object response = ctx.proceed();
46          logger.debug("*** Response Object: {}", response);
47          return response;
48      }
49      
50      @AroundTimeout
51      public Object timeout(InvocationContext ctx) throws Exception {
52          logger.debug("*** Timeout: {}", ctx.getTimer());
53          Object response = ctx.proceed();
54          return response;
55      }
56  
57      @PreDestroy
58      public void destory(InvocationContext ctx) {
59          logger.debug("*** Lifecycle event: {}::DESTROY", ctx.getTarget());
60          try {
61              ctx.proceed();
62          } catch (Exception ex) {
63              throw new RuntimeException("error calling pre destroy", ex);
64          }
65      }
66  }