快速业务通道

检验EJB 3.0 简化API规范 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
本身进行注解。当您选择产生该业务接口的时候,使用 Bean 类上的这些注解将非常有用。在该 EJB 规范草案中没有提及如何指定某方法是否应该被作为 Web 服务来调用;相反,这种情况委托给 JSR 181 处理,它定义了用于 Web 服务的注解。

容器服务

EJB 组件之所以流行,这是因为它对事务管理和安全性的隐性支持。EJB 3.0 规范将使用注解来应用容器服务。这里是一个用户如何在无状态会话上指定事务处理的属性的实例:

@Stateless public class StockBean { @TransactionAttribute(TransactionAttributeType.REQUIRESNEW)   public double getQuote(String symbol)   {   return 100.33;   } }

该注解意味着此方法将会在新的事务中运行。阅读此规范以获取关于不同注解的特定语法和语义的详细内容。容器服务同时也可以使用部署描述符得到应用,尽管当前的规范草案中并没有标明如何来指定。然而,如果两种方法都采用的话,部署描述符将会忽略这些注解。

特殊注解的最终形式在未来的规范草案中可以有所改动。例如,总体上与 J2EE 规范相关的确定的注解可能不再属于 EJB。

回调

什么是回调?在 EJB 3.0 规范发布之前,开发者必须在 Bean 类上实现回调方法,例如 ejbCreate();Bean 类必须要实现所有的方法,而不管是否使用它们。在多数情况下,这些方法的实现是空缺的。

现在通过注解来处理回调功能。这里有两种机制:回调方法和回调侦听器类。下面是一个用户如何使用回调方法编写代码来对回调操作做出反应的实例:

@Stateless public class StockBean implements Stock   public double getQuote(String symbol)   {   return 100.33;   }   @PostConstruct initializeCache()   {   } }

检验EJB 3.0 简化API规范(3)

时间:2011-01-28 IBM Roland Barcia

以上代码可以使您在创建 bean 实例后实现代码。如果我想要使用回调侦听器,那么我应该创建一个回调侦听器类:

public class MyCallbackListener {   @PrePassivate public clearCache(Object obj)   {   Stock stock = (Stock) obj;   //perform logic   } }

回调类并不是 Bean 类的一部分,它必须包括 java.lang.Object 参数。那么容器就会传送该 bean 实例。Bean 类通过使用 Bean 类级别上的特定回调注解来添加回调侦听器:

@CallbackListener MyCallbackListener @Stateless public class StockBean implements Stock   public double getQuote(String symbol)   {   return 100.33;   } }

回调功能是很精密的,这是因为在您的代码中包含它们是有条件的,而不像您实现接口时的那种情况。通过添加带有空回调的特定抽象类同样可以完成该操作。在规范的附录 A 中,提到了为那些希望继续使用 EJB 2.x 开发方式的开发着而提供的特定基类。

拦截器

EJB 规范中新添的一个细致功能就是拦截器的使用。可以进行预/后处理的能力已经从 EJB 组件中消失,这点与 servlet 过滤器对 servlet 的操作类似。开发者可以开发拦截器类,并且将其应用到 bean。以下是拦截器审查 StockBean 类的调用的实例:

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() 方法。这样将使得该调用可以通

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号