使用 CBE 和 JAXB 集成实现对 WebSphere Application Server 上应用程序的业务数据监控
2009-10-28 00:00:00 来源:WEB开发网为消息驱动 Bean 的 onMessage/onNotification 方法增加 JAXB Annotation 修饰符
在 EJB3 应用程序中,元数据通过消息驱动 Bean 中的 onMessage/onNotication 方法进行处理,然后发送给会话 Bean,因此,为了对元数据进行截获,我们利用 EJB 3 提供的 @Interceptors 修饰符对 onMessage、onNotification 进行定义,其中的属性值指定的为拦截器类,在该类中将实现对企业元数据的分析,同时进行构造 CBE 以及发送 CBE 的操作。拦截器类中的所有操作和 onMessage/onNotification 是并行的,不会更改元数据。
清单 2. onMessage 拦截器修饰 @Interceptors( { MetadataInterceptor.class })
public onMessage(arg0, arg1)
{
try {
…
} catch (Exception e) {
throw new javax.ejb.EJBException(e);
}
}
拦截器定义
如上所述,我们已经为 onMessage、onNotification 方法添加拦截器定义后,接着我们就需要实现相应的拦截器 MetadataInterceptor。
清单 3. 拦截器 MetadataInterceptor public class MetadataInterceptor {
@AroundInvoke
public Object monitorEvents(javax.interceptor.InvocationContext invokeCtx)
throws Exception {
constructCBE(invokeCtx);
}
return invokeCtx.proceed();
}
@AroundInvoke 修饰符指定了要用作拦截器的方法 monitorEvents(invokeCtx),拦截器方法与被拦截的业务方法执行在同一个 java 调用堆栈、同一个事务和上下文中,这样就保证了整个事务的全局完整性。另外,在拦截器中,我们调用了 invokeCtx.proceed() 方法,这个方法会保证调用所有的拦截器的 @AroundInvoke 方法,直到后面的拦截器全部执行结束,EJB 容器才会执行被拦截的业务方法,本文中只使用了一个拦截器,所以执行完后就直接返回。值得注意的是 invokeCtx.proceed()方法必须在拦截器代码中被调用,否则被拦截的业务方法就不会被执行到,因此为了保证不影响原有的业务逻辑,我们在拦截器中必须使用此方法。
更多精彩
赞助商链接