blob: e5e60197f49730d6b4ee5bee54b006b58475ab39 [file] [log] [blame]
= Callbacks
:index-group: Unrevised
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published
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 &ltmethod-name>(InvocationContext)
The AroundInvoke syntax for an EJB or Interceptor is the same:
* @AroundInvoke <any-scope> Object <method-name>(InvocationContext)
throws Exception
== Stateless
[source,java]
----
import jakarta.ejb.Stateless;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.interceptor.AroundInvoke;
import jakarta.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
[source,java]
----
import jakarta.ejb.Stateful;
import jakarta.ejb.PostActivate;
import jakarta.ejb.PrePassivate;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.interceptor.AroundInvoke;
import jakarta.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
[source,java]
----
import jakarta.ejb.MessageDriven;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.interceptor.AroundInvoke;
import jakarta.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
[source,java]
----
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.interceptor.InvocationContext;
import jakarta.interceptor.AroundInvoke;
import jakarta.ejb.PostActivate;
import jakarta.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){
}
}
----