Title: Callbacks Correct usage of PostConstruct, PreDestroy, PrePassivate, PostActivate, and AroundInvoke for EJBs and Interceptors. For Stateful, Stateless, and MessageDriven, the syntax is as follows: - @PostConstruct <any-scope> void <method-name>() - @PreDestroy <any-scope> void <method-name>() - @PrePassivate <any-scope> void <method-name>() - @PostActivate <any-scope> void <method-name>() For an Interceptor, the syntax includes InvocationContext as follows: - @PostConstruct <any-scope> void <method-name>(InvocationContext) - @PreDestroy <any-scope> void <method-name>(InvocationContext) - @PrePassivate <any-scope> void <method-name>(InvocationContext) - @PostActivate <any-scope> void <method-name>(InvocationContext) The AroundInvoke syntax for an EJB or Interceptor is the same: - @AroundInvoke <any-scope> Object <method-name>(InvocationContext) throws Exception ## Stateless 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(); } } ## Stateful 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(){ } } ## MessageDriven 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(); } } ## Interceptor 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){ } }