| 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 |
| |
| |
| <a name="Callbacks-Stateless"></a> |
| ## 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(); |
| } |
| } |
| |
| |
| <a name="Callbacks-Stateful"></a> |
| ## 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(){ |
| |
| } |
| } |
| |
| |
| <a name="Callbacks-MessageDriven"></a> |
| ## 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(); |
| } |
| } |
| |
| |
| <a name="Callbacks-Interceptor"></a> |
| ## 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){ |
| |
| } |
| } |
| |