Roland Barcia 的<提示>: 检验 EJB 3.0 简化 API 规范
2009-10-23 00:00:00 来源:WEB开发网public class StockRequestAudit {
@AroundInvoke
public Object auditStockOperation(InvocationContext inv) throws
Exception {
try {
Object result = inv.proceed();
Auditor.audit(inv.getMethod().getName(), inv.getParameters[0]);
return result;
} catch (Exception ex) {
Auditor.auditFailure(ex);
throw ex;
}
}
}
以上的拦截器截取了对目标 EJB 方法的调用,然后就调用 InvocationContext 上的 proceed() 方法。这样将使得该调用可以通向被调用的实际 EJB 方法。在返回目标 EJB 方法后,它将使用 InvocationTarget 里的元数据来获取被调用的 EJB 组件的方法名称和参数。那么该拦截器就可以应用到 Bean 类:
@Stateless @Interceptors({StockRequestAudit})
public class StockBean implements Stock
public double getQuote(String symbol)
{
return 100.33;
}
}
除此之外,您可以选择开发那些在 Bean 类内部实现的拦截器方法,同时也可以指定多个拦截器,这种情况下它们被调用的次序由在 Bean 类中定义的次序决定。
引入依赖性
使得 EJB 开发测试操作很困难的原因是 EJB 代码依赖于数据源等因素,这种情况如同 EJB 客户端如何调用 EJB 组件一样。EJB 3.0 规范将引入依赖性作为一种组织机制来介绍,以此来减少这些困难。EJB 能够通过引入代码来定义资源引用,而不是通过使用 JNDI 查看功能。下面是一个 EJB bean 需要调用另一个 EJB 组件并且使用数据源来完成 JDBC 工作的实例:
更多精彩
赞助商链接