现在的位置: 首页 > 综合 > 正文

J2EE Enterprise Beans(中文翻译)

2013年04月18日 ⁄ 综合 ⁄ 共 3981字 ⁄ 字号 评论关闭

译:软件学院 黄学

1 简介

.Enterprise Beans 是实现Enterprise JavaBeans(EJB)技术的J2EE的组成部分,它运行于EJB容器中。EJB是一个J2EE服务器的运行时环境(Runtime environment)。虽然EJB容器对于企业级应用开发者来说是透明的,但是它提供了系统层的服务,比如Enterprise Beans的事务处理。这些J2EE核心事务应用服务能让你很快地构建并运用Enterprise Beans

1.1Enterprise Beans是什么?

Enterprise Beans 是用java语言编写的,用于实现企业级逻辑应用的服务器端组件。企业级逻辑应用都是一些有很强针对性的代码。比如:在一个财务清单应用中,Enterprise Beans必须实现checkInventoryLevelorderProduct 方法。通过调用这些方法,远程客户端能从企业应用服务器端得到相应的服务。

1.2Enterprise Beans 的优点

Enterprise Beans 能使得巨大的分布式应用简单化,有以下几个原因:

第一       EJB容器为Enterprise Beans提供了系统层次的服务,应用程序开发者可以专注于开发应用系统所需的商业逻辑,而不用担心具体服务框架的实现问题EJB容器负责了系统层次的服务和安全认可机制,而不需要开发者去关心。

第二       Enterprise Beans 而不是客户端包含了企业应用逻辑,客户端开发者能集中精力处理客户端应用,而不用编写企业逻辑或数据库存取的代码。这样的瘦客户端显著的优点就是客户端能运行在小设备上。

第三       因为Enterprise Beans是一个独立的组件,所以在现有的beans上能构造出新的应用,这些应用能运行于不同的J2EE服务器上。

1.3什么时候我们该用Enterprise Beans

       如果你的系统应用有如下的需求,你可以考虑用Enterprise Beans

l         系统是可升级的。为了适应越来越多的用户的访问,你需要把系统应用分布在不同的机器上。并不是只有Enterprise Beans能运行在不同的机器上,但是它对于客户端来说是透明的,原来的访问位置还是保持没变。

l         事务处理要求数据完整性。Enterprise Beans支持这样的事务处理机制,就是事务处理可以并发存取一个共用的模块。

l         系统应用拥有多样化的客户端。只需要几行代码,远程客户端就能很容易的访问Enterprise Beans。这样,客户端可以做到多样化,瘦小,数量众多。

1.4Enterprise Beans的类型

下图摘要了Enterprise Beans的三种不同的类型。

Enterprise Beans类型

用途

Session

用于客户端的任务

Entity

描述一个现有的持久的企业实体

MessageDriven

JAVA信息服务API的监听器,处理不同步的信息

 

2 什么是会话Bean(Session Bean)

一个Session Bean 代表着一个J2EE服务器中的用户。为了要访问部署在服务器上的应用,客户端要调用Session Bean的方法。Session Bean 通过执行服务器内部的企业级任务,把客户端和复杂的内部实现分离开来,并完成客户端给予的任务。

如它的名字所显示的,一个Session Bean就像一个交互式session(interactive session)。一个Session Bean是不能够共享使用的,它仅仅能够为一个客户端。同样的,一个interactive session也只能一个客户端使用。和交互式session一样,一个Session Bean是不持久的(数据并没有保存到数据库中)。当一个客户端终止会话后,它的Session Bean也将终止,不再和客户端连接。

      

2.1状态管理模式

Session Bean有两种类型:有状态和无状态

1.       有状态Session Bean

一个对象的状态由它的实例变量的值组成。在一个Session Bean中,它的实例变量描述了一个唯一的客户端bean的会话。因为客户端的相互之间的会话都是通过bean来“交谈的,所以bean的状态通常也叫做对话状态(conversational state)

       状态是标识一个会话的持续时间。如果客户端移除或者停止一个bean,那么状态就将消失。但是状态的这种短暂性并不是一个缺陷,因为当客户端结束一个会话bean后,就没有必要保留它的状态了。

2.       无状态Session Bean

一个无状态Session Bean不会特别地保存客户端会话的状态。当客户端调用无状态Session Bean的方法时,bean的实例变量就会保存一个状态,但仅仅是在调用方法那段时间内。当方法调用完毕以后,状态就不再存在了。除非在调用Session Bean方法的过程中,所有的无状态Session Bean 都是被EJB容器均等的分配一个实例给任意一个客户端。

因为无状态Session Bean支持多个客户端,所以它们能够提供更好的应用,那些应用需要大量的客户端一起实现。也就是说,为同样多的客户端服务,一个应用需要的无状态Session Bean要少于有状态Session Bean

同时,EJB容器要把有状态Session Bean中的信息保存到另一个区域,而无状态Session Bean并不需要。因而无状态Session Bean能有更好的表现。

 

2.2什么时候使用Session Bean

一般的,在如下的环境下你应该使用Session Bean

l         无论任何时候,都只有一个客户端访问bean的实例。

l         不需要长久的保存bean的状态,而仅仅是保留一段时间(可能是几个小时)

 

有状态Session Bean比较适合以下的这些条件:

l         bean的状态来描述bean和一个具体的客户端之间的会话。

l         bean需要保存客户端访问bean方法时的调用信息。

l         bean作为客户端和其他系统应用组件的中间传媒,向客户端展现的是,组件是一个简单的对象。

l         bean在后台处理几个企业bean的数据流。举个例子,查看18章的AccountControllerEJB Session Bean应用。

 

为了改善性能,你应该选择一个无状态Session Bean,如果bean有如下的特性:

l         bean的状态并不保存任何一个特定客户端的信息。

l         在一个单一的方法调用中,bean为所有的客户端完成一系列的任务。比如,你可以用一个无状态Session Bean发送一封在线定购验证的邮件。

l         bean从数据库中读取那些经常被客户端用到的,属性为只读的数据集。比如,检索出代表这个月产品销售量的行数的bean

 

 

3 什么是Entity Bean

一个实体BeanEntity Bean)表示一个是持久运行的企业实体。企业实体比如有:客户,订单和产品。在J2EEJDK中,持久存储结构就是一个关系模型数据库。有代表性的,每个企业实体在关系模型数据库中都有一个表于它相对应,并且表中的一行(一个元组)就代表实体的一个实例。查看例子,请看第五第六章。

3.1Entity Bean Session Bean有何不同?

Entity Bean 不同于 Session Bean ,有几个方面。实体bean是持久的,它允许共享访问,有自己的标识(关键码),也许还和别的实体bean有联系。如果你经常使用数据库系统,那么应该熟悉永久性数据。数据库中的数据是永久的,因为即便你关闭了数据库系统或者停止了它的应用服务,数据还是存在的。

持久性

因为实体bean的状态存储在持久性的数据库中,所以它是持久的。持久的意思是,当一个应用或者一个J2EE服务器进程结束后,实体bean的状态依然存在。

Entity Bean的永久性有两种模型:bean自管理模式和容器管理模式(bean-managed and container-managed)。在bean自管理模式中,你所写的实体bean的实例要自己管理持久性,因而代码要包括数据库访问的调用。如果你的bean由容器管理,那么EJB容器会自动产生数据库访问的调用。你所写的代码不需要包括数据库访问调用。更多的信息,可以参看容器管理持久性部分。

共享访问

一个实体bean必然可以被多个客户端共享访问。因为多个客户端都需要访问相同的数据,这也就显得实体bean在事务处理中的重要性。典型的,EJB容器提供事务处理的管理。如此,你可以在bean的部署说明书里列举出事务处理的属性。你不必要自己编写事务处理的边界条件,而容器自动为你标记这些边界。更多信息参看14章。

唯一标识

每个实体bean都有一个唯一的标识。比如,一个客户,它用客户的ID号标识。唯一标识,或者叫做有主码,可以让客户端查找到指定的实体bean。更多信息参看bean自管理模式的唯一标识部分。

联系性

就像数据库中的一个表,一个实体bean也和其他的实体bean有着联系。比如,在一个学院学生注册的应用中,StudentEJB CourseEJB 必然有联系,因为学生要注册到一个班级中。

       你可以用bean自管理持久性和容器管理持久性来实现实体bean之间的联系。在bean自管理模式中,你要自写代码来实现他们的联系。在容器管理模式中,容器帮你管理实体bean之间的联系。因为这样,人们经常把容器管理模式下的实体bean联系叫做容器管理联系(container-managed relationships)

 

抱歉!评论已关闭.