Correct usage of PostConstruct, PreDestroy, PrePassivate, PostActivate, and AroundInvoke for EJBs and Interceptors. For Stateful, Stateless, and MessageDriven, the syntax is as follows: - @PostConstruct void () - @PreDestroy void () - @PrePassivate void () - @PostActivate void () For an Interceptor, the syntax includes InvocationContext as follows: - @PostConstruct void (InvocationContext) - @PreDestroy void (InvocationContext) - @PrePassivate void (InvocationContext) - @PostActivate void (InvocationContext) The AroundInvoke syntax for an EJB or Interceptor is the same: - @AroundInvoke Object (InvocationContext) throws Exception h2. Stateless {code} import javax.ejb.Stateless; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; @Stateless public class MyStatelessBean implements MyBusinessInterface { @PostConstruct public void constructed(){ } @PreDestroy public void destroy(){ } @AroundInvoke public Object invoke(InvocationContext invocationContext) throws Exception { return invocationContext.proceed(); } } {code} h2. Stateful {code} import javax.ejb.Stateful; import javax.ejb.PostActivate; import javax.ejb.PrePassivate; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; @Stateful public class MyStatefulBean implements MyBusinessInterface { @PostConstruct public void constructed(){ } @PreDestroy public void destroy(){ } @AroundInvoke public Object invoke(InvocationContext invocationContext) throws Exception { return invocationContext.proceed(); } @PostActivate public void activated(){ } @PrePassivate public void passivate(){ } } {code} h2. MessageDriven {code} import javax.ejb.MessageDriven; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; @MessageDriven public class MyMessageDrivenBean implements MyListenerInterface { @PostConstruct public void constructed(){ } @PreDestroy public void destroy(){ } @AroundInvoke public Object invoke(InvocationContext invocationContext) throws Exception { return invocationContext.proceed(); } } {code} h2. Interceptor {code} import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.interceptor.InvocationContext; import javax.interceptor.AroundInvoke; import javax.ejb.PostActivate; import javax.ejb.PrePassivate; public class MyInterceptor { @PostConstruct public void constructed(InvocationContext invocationContext){ } @PreDestroy public void destroy(InvocationContext invocationContext){ } @AroundInvoke public Object invoke(InvocationContext invocationContext) throws Exception { return invocationContext.proceed(); } @PostActivate public void activated(InvocationContext invocationContext){ } @PrePassivate public void passivate(InvocationContext invocationContext){ } } {code}