`
yingfang05
  • 浏览: 119380 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

EJB 3.1五大模式改进令Java EE 6更好用之一

    博客分类:
  • ejb3
阅读更多
EJB 3.0是Java EE 5平台的一部分,相对前面的版本,它更加易于使用,它的最新版本 — JSR318:EJB 3.1 — 随Java EE 6发布,进一步简化了使用,并提供了许多反应常见使用模式的改进,如:

  1、无接口视图:允许你指定一个企业Bean,只使用Bean类,不用编写独立的业务接口。

  2、单元素集合:让你在一个企业Bean组件的多个实例间轻松地共享状态,或是在一个应用程序的多个企业Bean组件之间共享状态。

  3、异步会话Bean调用:通过指定一个注解,让你可以异步调用会话状态方法。

  4、简化打包:消除了企业Bean类必须打包到ejb-jar文件的限制,现在你可以直接将EJB类放到WAR文件中。

  5、轻量级EJB:它是EJB 3.1的子集,包括大量的Java EE profiles。

  无接口视图

  EJB 3.0本地客户端视图是基于普通旧式Java接口(POJI)调用本地业务接口的,本地接口定义了暴露给客户端的业务方法,并是在Bean类上实现的,这种独立的接口有时会带来不必要的麻烦,并且价值也不大,相同模块内的来自客户端的本地访问细粒度组件尤其如此。

  EJB 3.1通过让本地业务接口成为可选组件简化了这个方法,没有本地业务接口的Bean暴露的是无接口视图,现在你不用编写独立的业务接口就可以获得相同的企业Bean功能。

  无接口视图与EJB 3.0中的本地视图具有相同的行为,例如,它支持如通过按引用调用语义、事务和安全传播等特性,但无接口视图不需要单独的接口,即Bean类所有的公共方法自动暴露给调用者。默认情况下,任何有空implements子句,且没有定义任何其它本地或远程客户端视图的会话Bean,暴露的是一个无接口视图。下面的会话Bean暴露了一个无接口视图:

  1. @Stateless

  2.   public class HelloBean {

  3.

  4.       public String sayHello() {

  5.           String message = propertiesBean.getProperty("hello.message");

  6.           return message;

  7.       }

  8.

  9.   }

  10.

  使用本地视图时,无接口视图的客户端总是获得一个EJB引用 - 通过注入或JNDI查找,唯一的不同之处是EJB引用的Java类型是Bean类类型,而不是本地接口的类型,如下面的Bean客户端:

  11. @EJB

  12. private HelloBean helloBean;

  13.

  14. ...

  15.

  16. String msg = helloBean.sayHello();

  注意,虽然这里没有接口,客户端不能使用new()明确地实例化Bean类,那是因为所有Bean调用都是通过一个特殊的EJB引用,或由容器提供的代理实现的,这样就允许容器提供其它的Bean服务,如池、容器管理的事务,并发管理等。

        单元素集合

  单元素集合Bean也被称为单元素集合,它是一种新的会话Bean,它保证在一个特定的Java虚拟机(JVM)应用程序中只被实例化一次。使用单元素集合,你可以在一个企业Bean组件的多个实例之间轻松地共享状态,也可以在一个应用程序的多个企业Bean之间共享状态,它就象为某个应用程序缓存数据的类一样。你可以以单元素集合形式定义类,这样可以确保在应用程序内只有一个缓存实例,一个共享状态。

  使用@Singleton注解定义单元素集合,如:

  1. @Singleton

  2.   public class PropertiesBean {

  3.

  4.    private Properties props;

  5.

  6.    public String getProperty(String name) { ... }

  7.

  8.   @PostConstruct

  9.          public void initialize { // props = ...}

  10.

  11.   }

  12.

  因为它只是另一种会话Bean,单元素集合可以定义相同的本地和远程客户端视图,可以象无状态的和有状态的Bean那样,客户端以访问无状态和有状态Bean相同的方式访问单元素集合,即通过EJB引用。例如,下面是一个可以访问PropertiesBean单元素集合的客户端示例:

  13. @EJB

  14.   private PropertiesBean propsBean;

  15.

  16.   ...

  17.

  18.   String msg = propsBean.getProperty("hello.message");

  19.

  在这里,容器确保所有通过PropertiesBean引用的调用是由相同的PropertiesBean实例提供的服务,默认情况下,容器强制执行和其它组件类型相同的线程保证,换句话说,单元素集合是全线程安全的,特别值得一提的是,在任一时刻,允许多个调用访问一个特定的Bean实例,默认情况下,单元素集合会阻塞所有并发调用,但还有其它并发选项允许更高效地访问单元素集合实例。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics