`
hamsn
  • 浏览: 1840 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

EJB3.1新功能

阅读更多

 

    EJB(Enterprise JavaBeans)是使用Java EE开发和部署业务应用系统的服务端组件架构,使用EJB编写的应用系统是可扩展的、事务型和安全的。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暴露了一个无接口视图:

 

@Stateless
public class HelloBean {
    public String sayHello() {
        String message = propertiesBean.getProperty("hello.message");
        return message;
    }
}
 

 

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

 

@EJB
private HelloBean helloBean;
String msg = helloBean.sayHello();
 

 

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

 

单元素集合

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

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

 

 

@Singleton
public class PropertiesBean {
    private Properties props;

    public String getProperty(String name) {}

    @PostConstruct
    public void initialize { } 
}
 

 

 

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

@EJB
private PropertiesBean propsBean;
String msg = propsBean.getProperty("hello.message");

 

 

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

 

异步会话Bean调用

  EJB 3.1引入了一个强大功能,那就是可以异步调用会话Bean方法。对于一个异步调用,允许会话Bean执行它的操作时,客户端并行处理其它事情。

  通过@Asynchronous注解让一个方法支持异步,也可以使用一个部署描述符将一个方法指定为异步的。

  异步方法可以返回一个java.util.concurrent.Future<V>或void对象,Future<V>对象容纳了异步操作返回的结果,你可以访问Future<V>对象检索一个结果值,检查异常或取消一个正在处理中的调用。Future<V>接口提供一个get()方法检索值,当然,你也可以其它合适的类检索值,如 AsyncResult<V>,实际上它自己实现了一个Future<V>接口。

  在下面的例子中,performCalculation()方法是异步的,它使用AsyncResult<V>类检索Future<V>对象返回的值。

 

@Stateless
Public class CalculatorBean implements CalculatorService {
    @Asynchronous
    public Future<Integer> performCalculation(...) {
       // ... do calculation  
       Integer result = ...;
       return new AsyncResult<Integer>(result);
    }
}
 

 

  简化打包

  EJB规范始终要求企业Bean打包到一个叫做ejb-jar文件的企业模块中,因为它一般用于Java EE Web应用程序,这种打包方法显得有些累赘,应用程序被强制使用一个Web应用程序使用的归档文件(.war),一个企业Bean使用的ejb-jar文件,还有一个包含其它包的企业归档文件(.ear),如图1所示,这种打包方法非常复杂,它需要指定模块之间共享的类和资源。

  EJB 3.1解决了这个问题,简化了打包的复杂程度,彻底消除了企业Bean类必须打包进ejb-jar文件的限制,如图2所示,现在你可以直接将EJB类放到.war文件中,使用打包Web应用程序类相同的打包规则,这意味着你可以将EJB类放到WEB-INF/classes目录下,或者放到WEB- INF/lib目录下的一个.jar文件中。EJB部署描述符也是可选的,如果你需要它,你可以将EJB部署描述符打包到WEB-INF/ejb- jar.xml文件中。

  轻量级EJB(EJB Lite)

  对许多应用程序而言,EJB提供了比应用程序真正需要的多得多的功能,使用EJB的应用程序通常只需要使用EJB 3.1的一个子集,轻量级EJB就是为满足这种需要诞生的。

  轻量级EJB简化了许多开发人员使用EJB,使用轻量级EJB的开发人员在他们的应用程序中需要学习使用一部分功能即可。此外,使用轻量级EJB开发的应用程序可以运行在轻量级EJB或全功能EJB 3.1 API实现的应用程序服务器上。

  注意,轻量级EJB不是一个产品,它是EJB 3.1 API的一个子集,轻量级EJB的目标是提供EJB 3.1的一个子集,满足大多数应用程序业务逻辑层的需要,它也为供应商提供了更好的灵活性,为了满足这些模板,轻量级EJB提供了以下功能:

  1、有状态,无状态和单元素集合会话Bean;

  2、本地EJB接口或无接口;

  3、拦截器;

  4、容器管理的和Bean管理的事务;

  5、声明和编程安全;

  6、嵌入式API。

  更多EJB 3.1新特性

  EJB 3.1除前面谈到的这些新特性外,还带来了更多的新特性和改进,例如,它包括一个用于Java SE环境的嵌入式API和容器,这些特性使在Java EE容器外(通常指Java SE环境)测试EJB 组件更容易,另外,EJB 3.1引入的单元素集合为EJB应用程序提供了一个方便的方法,在应用程序初始化或关闭期间接受反馈,默认情况下,由容器决定何时实例化单元素集合实例,但你可以通过@Startup注解,强制容器在应用程序初始化期间实例化单元素集合实例,允许Bean定义一个@PostConstruct方法保证

 

 

 

分享到:
评论

相关推荐

    EJB3.1深入浅出

    通过引入一系列新的特性和改进现有功能,EJB 3.1 更好地满足了现代企业应用程序的需求,同时也提升了开发效率和维护便利性。随着EJB 3.1 最终草案的发布,我们正逐渐接近该版本的正式发布。可以预见,EJB 3.1 将继续...

    EJB3.1_JSR 318-EJB3.1

    - **标题**:“EJB3.1_JSR 318-EJB3.1” - **描述**:此文档是EJB 3.1规范(JSR 318),与EJB 3.0相比,新增的功能包括: - 取消接口要求。 - 引入单例会话Bean(Singleton session bean)。 - 支持异步调用。 -...

    EJB3.1技术培训

    ### EJB3.1技术培训知识点详述 #### 一、EJB3.1概述 **EJB(Enterprise JavaBeans)3.1** 是Java EE平台中的一个重要组成部分,主要用于构建可伸缩、健壮的企业级应用程序。EJB3.1在前代版本的基础上做了大量的...

    EJB3.1讲解

    #### EJB3.1的新特性 EJB 3.1作为EJB 3.0的更新版本,引入了一些新的特性和改进,以提高开发效率和增强功能性: - **简化注解**:EJB 3.1进一步简化了注解的使用,使得开发者能够更加直观地定义组件。 - **异步...

    EJB 3.1 Core

    EJB 3.1不仅对EJB组件的功能进行了扩展,还引入了一些新的要求和限制条件,以确保组件的一致性和可维护性。 ##### 3.1 组件类型 EJB 3.1支持三种类型的EJB组件:会话Bean、消息驱动Bean和实体Bean。每种类型都有其...

    javax.ejb-3.1.2.2_with-source.zip

    Java企业版(Java Enterprise ...通过深入研究这些源代码,开发者可以更好地掌握EJB的设计模式、最佳实践,以及如何在实际项目中有效地利用EJB的功能。对于Java EE开发者来说,理解和运用EJB是提升专业技能的重要步骤。

    Enterprise JavaBeans 3.1

    EJB 3.1通过引入新的特性和对现有功能的改进,极大地提升了开发效率和应用性能。对于那些希望构建稳定、高效的企业级应用的开发者来说,EJB 3.1是一个值得深入研究的技术。通过对EJB 3.1的学习和实践,开发者能够更...

    Enterprise JavaBeans™ 3.1

    Enterprise JavaBeans (EJB) 3.1 是一项重要的企业级应用开发技术规范,它在 EJB 3.0 的基础上进一步简化了应用程序的开发流程,并引入了一系列的新特性来提高开发效率和降低复杂度。 #### 发展历程与定位 EJB 3.1 ...

    EJB3.0__EJB3.0

    前者每次调用都可能使用新的实例,不保存状态,而后者为每个客户端创建独立的实例,可以存储状态。在Spring框架中,`@Scope("singleton")`类似`@Stateless`,`@Scope("prototype")`类似`@Stateful`。 在实际项目中...

    jboss7.1.1+ejb3.0+MySQL数据源配置

    你需要找到`subsystem`下的`datasources`节点,然后添加一个新的数据源。例如,可以创建名为`MySqlDS`的数据源,如下所示: ```xml &lt;connection-url&gt;jdbc:mysql://localhost:3306/mydb &lt;driver-class&gt;...

    glassfish-3.1.2.2.zip

    Glassfish 3.1.2.2作为Java EE 6的实现,充分体现了这些新特性。它提供了一个完整的服务器环境,用于部署和管理基于Java EE 6的应用程序。其中,CDI使得对象的生命周期管理和依赖注入变得更加灵活,极大地提高了开发...

    Weblogic Ejb 学习笔记

    11. **EJB 3.1和以上版本的新特性** - 自动化的注解驱动编程降低了EJB的复杂性,如@Stateless、@Stateful、@Singleton等。 - EJB 3.1引入了无接口视图,简化了客户端调用。 - Asynchronous方法调用允许异步执行...

    Weblogic下ejb配置

    选择合适的EJB版本(如EJB 3.0或EJB 3.1),并创建对应的bean类。 3. 编写EJB:根据业务需求,编写会话bean、实体bean或消息驱动bean的Java代码。每个bean类需要实现相应的接口,并注解以声明其角色和行为。 4. ...

    JEE6编程模型

    JEE6不仅包括了Java EE 5的大多数特性,还引入了更多的新功能和技术,提供了更为简洁的编程模型和轻量级的开发方式。接下来,我们将详细介绍JEE6中的一些关键技术。 EJB 3.1(Enterprise JavaBeans 3.1)是Java EE...

    MyEclipse开发会话EJB详细步骤

    通常,MyEclipse的Professional或更高版本都包含了EJB相关的功能。 ### 2. 创建新EJB项目 打开MyEclipse,选择`File` &gt; `New` &gt; `Dynamic Web Project`。在弹出的向导中,输入项目名称,选择J2EE版本(如Java EE 5...

    在Tomcat5.5下配置EJB

    **在Tomcat 5.5下配置EJB** 在Java企业版(Java EE)中,Enterprise JavaBeans(EJB)是一种...同时,EJB 3.0之后的版本(如EJB 3.1和EJB 3.2)引入了更多改进,如更强大的注解和简化API,为开发带来了更大的便利。

    EJB 资料,enterprise javabean

    - **EJB 3.1**:发布于2009年,进一步优化了API设计,增强了异步操作的支持。 - **EJB 3.2**:发布于2013年,继续改进了性能和易用性,包括更好的并发控制等。 ##### 1.2 EJB 的类型 EJB 定义了三种类型的组件: - ...

Global site tag (gtag.js) - Google Analytics