EJB 3 Interceptors tutorial
- This is a short tutorial for EJB 3 interceptors, and its purpose is to explain the concept of an interceptor and what is it good for.
- The content of this tutorial is a shrinked version of a tutorial posted here: http://www.mastertheboss.com/en/jboss-server/177-ejb-interceptors-in-depth.html
- which also contains code example.
- EJB 3.0 interceptors allow you to add functionality to business methods of your session bean without modifying the methods' code.
- An interceptor is a method that's executed before any of the bean's business methods are invoked.
- How does it work ?
- When a method of the session bean is invoked, the Interceptor is also invoked.
- The interceptor has full access to the invoked method and its parameter.
- Interceptors are particularly useful when you need to:
- Validate parameters before they're passed to a business method
- Perform security checks at the time the business method is called.
- Perform other useful for actions such as logging and profiling without changing the code of your EJB.
- On which kind of components can you apply Interceptors ?
- Interceptors can be used on stateless session beans, stateful session beans, and message driven beans.
- How many kinds of Interceptors can you apply ?
- You can apply Interceptors at three different levels:
- 1) Default interceptors
- These interceptors needs to be declared in your ejb-jar.xml and are valid across all your EJB deployed :
- 1. <assembly-descriptor>
- 2. <interceptor-binding>
- 3. <ejb-name>*</ejb-name>
- 4. <interceptor-class>sample.interceptor.MyDefaultInterceptor</interceptor-class>
- 5. </interceptor-binding>
- 6. ...
- 7. </assembly-descriptor>
- 2) Class level interceptors
- This is the kind of interceptor we've seen in our example: it is valid across all methods of an EJB.
- @Stateless
- @Interceptors(value=com.sample.SampleInterceptor.class)
- public class StatelessBean
- {
- ...
- }
- 3) Method level interceptors
- The method level interceptor only intercepts the single method call :
- @Interceptors(value=com.sample.MethodInterceptor.class)
- public void doSomething()
- {
- ...
- }
- Order of Interception
- First, the default interceptor is invoked, then Bean level interceptors and, at last, method level interceptors.
- If you declare a list of interceptors in your xml/annotations, then the interceptors are invoked in the order in which they were declared in the annotation.
