技术开发 频道

如何构建 EJB 3.0 应用程序

     添加拦截器

  EJB 3.0 还增加了在您的应用程序中使用面向方面的编程技术这一能力。EJB 3.0 支持拦截器,这使您能够拦截用于横切技术的代码。接下来,您将创建审核拦截器,该拦截器将显示客户在管理控制台上的操作。

  创建简单的 Audit 类:

  创建一个称为 AuditInterceptor 的类(图 74)。

  图 74. 新建 Java 类

  添加下面以粗体显示的代码。@AroundInvoke 将告诉该容器拦截器进行拦截时将调用什么方法。该代码访问 customerId 和方法名称并将它们显示出来。

1 package com.ibm.ejb3.order.session;
2
3 import java.lang.reflect.Method;
4
5 import javax.interceptor.AroundInvoke;
6 import javax.interceptor.InvocationContext;
7
8 public class AuditInterceptor {
9     
10     @AroundInvoke
11     public Object audit(InvocationContext invocationContext) throws Exception
12     {
13         Method operation = invocationContext.getMethod();
14         String name = operation.getName();
15         Object param[] = invocationContext.getParameters();
16         System.out.println
17         ("Customer Id " + param[0] + " executing operation => " + name);
18         return invocationContext.proceed();
19     }
20
21 }

  您可以通过使用 @Interceptor 注释来注释类,将拦截器添加到会话 Bean 中。为了简便起见,在此练习中可以这样做,但是对于类来说,非常好的实践是不要知道谁在拦截它。EJB 3.0 支持部分 XML 部署描述符,其中您可以定义外部化拦截器与类匹配的拦截器绑定。外部化拦截器通常是非常好的实践。

  如下所示,打开 OrderTaskImpl 类并添加 @Interceptors (AuditInterceptors.class)。

1 @Stateless
2 @Interceptors(AuditInterceptor.class)
3 public class OrderTaskImpl implements OrderTask {

  对 CustomerTask 执行相同的操作。

1 @Stateless
2 @Interceptors(AuditInterceptor.class)
3 public class CustomerTaskImpl implements CustomerTask {

 

0
相关文章