ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]J2EE Enterprise Beans(中文)2

[转载]J2EE Enterprise Beans(中文)2

原创 Linux操作系统 作者:dinner1007 时间:2019-06-07 15:12:05 0 删除 编辑
J2EE Enterprise Beans(中文)2

3.2容器管理模式

容器管理模式,就是EJB 容器控制着所有实体bean对数据库的访问。实体bean的代码中不用指定对数据库的访问调用。因此,bean的代码不必绑定到一个特定的数据库。因为有 了这样的柔和性,当你把用样的bean部署到不同的J2EE服务器上时,不需要改动或者重新编译代码。简单来说,你的实体bean更加独立。

为了产生数据库调用,容器需要收集你实体bean中抽象模式的信息。

抽象模式

作为实体bean部署描述的一部分,抽象模式定义了bean的持久性和联系性。“抽象”这个词区别出了这个模式和数据实际存储的物理模式。比如,在一个关系型数据库中,物理模式是由表和属性构成的。

你自己要在部署中指定抽象模式的名称。名称将被用JavaBeans Query Language(“EJB QL”)编写的队列引用。容器管理模式下,你必须为实体bean的所有查找方法(除了findByPrinaryKey)定义一个EJB QL队列。当查找方法被调用的时候,EJB容器就从队列中执行。更多信息请参看第8章。

你也许已经发现,在编写代码之前建立抽象模型是很有用的。表3-1表现三个实体bean中简单的抽象模型。他们之间更多的联系将在下面的章节中介绍。

Figure 3-1 A High-Level View of an Abstract Schema

持久性字段

一个实体bean的持久性字段被保存到的数据库中。总的来说,那些字段构成了bean的状态。在运行时中,EJB容器自动同步数据库中的这些状态。在部署中,EJB容器记录bean到数据库中的表,并且记录记录持久性字段到表中的属性。

例如,一个CustomerEJB 实体bean,有这样的持久性字段:firstName, lastName, phone, emailAddress。在持久性容器管理模式中,这些字段是虚拟的。你在抽象模式中声明了这些字段,但是没有在bean代码中编写他们的实例变量。代 替的是,这些字段在访问方法被确定。

联系性字段

一个联系性字段就犹如数据库表的外码,它确定一个与自己联系的bean。和持久性字段一样,联系性字段是虚拟的,是在企业bean中的访问方法中被确定的。但不同的是,联系性字段并不表示bean的状态。联系性字段在“ 容器管理模式中联系的方向性 (Direction in Container-Managed Relationships)“一章将被更详细地讨论。

3.3容器管理模式中联系性的多元性

这里,多元性有四种类型:

一对一:(One-to-one) 每一个实体bean的实例都和另一个实体bean的实例有关联。比如,在一个物理仓库存储模型中,每个存储箱都包含一个物品,StorageBinEJB和WidgetEJB就有一对一的关系。

一对多:(One-to-many) 一个实体bean的实例可能和多个其他的bean的实例相关联。比如,一个销售订单,可以有多个元组(多个订单)。在这样的订单应用中,OrderEJB对LineItemEJB有一对多的关系。

多对一:(Many-to-one) 多个实体bean的实例和一个实体bean的实例相关联。这种关联与一对多关联相反。例如,在上面所提到的,LineItemEJB对OrderEJB有多对一的关系。

多对多:(Many-to-many) 实体bean的实体之间相互都有多个联系。比如,在大学中,一个课程有多名学生选修,一名学生同时也选修多门课程。这样的应用中,CourseEJB和StudentEJB是多对多的关系。

3.4容器管理模式中联系的方向性

实 体bean之间的联系有单向和双向两种。在双向联系中,每个实体bean都有一个联系字段与对方相对应。通过这联系字段,实体bean的代码就能访问与它 相联系的bean。如果一个实体bean有一个联系字段,那么我们经常称之为bean能识别和它联系的bean。举个例子,如果OrderEJB知道 LineItemEJB有哪些实例,而且LineItemEJB也知道OrderEJB属于谁,那么它们之间的关系就是双向的。

在 单向联系中,仅仅只能其中一个实体bean有一个联系字段和另一个bean对应。例如,LineItemEJB有一个联系字段识别ProductEJB, 但是ProductEJB不能有联系字段和LineItemEJB对应。换句话说,LineItemEJB知道ProductEJB,但 ProductEJB不知道哪个LineItemEJB和它联系。

EJB QL队列经常用于定位这些联系。联系的方向性,由队列是否能定位一个bean到另一个bean来决定的。比如,一个队列能定位从LineItemEJB到 ProductEJB,但是不能定位从ProductEJB到LineItemEJB。如果LineItemEJB和ProductEJB有双向联系,那 么队列能双向定位。

3.5什么时候用Entity Beans

你可以在一下的情况下使用实体bean:

l Bean代表一个商业实体,而不是一个过程。比如,CreditCardEJB应为一个实体bean,但CreditCardVerifierEJB应为一个会话bean。

l Bean的状态必需是持久的。如果bean的实例终止或者J2EE服务器停止后,bean的状态仍然保存在持久性存储器中(数据库)。

4什么是消息驱动Bean(Message-Driven Bean)?

注意:这个章节联系到Java 消息服务教程(The Java Message Service Tutorial)。因为消息驱动Bean依赖于Java消息服务(JMS)技术。为了更好的了解Message-Driven Bean,你可以参考一下下面教程URL:http://java.sun.com/products/jms/tutorial/index.html。

消息驱动Bean 是允许J2EE服务器异步处理消息的企业级Bean。它扮演着JMS信息监听者的角色,就像一个事件监听器,只不过是接收事件替换成接收信息。这些信息来 来自于一些J2EE组件,比如一个应用客户端,其他的企业级Bean,一个web组件,或者一个没有使用J2EE技术的JMS应用,JMS系统。

消息驱动Bean当前只处理JMS消息,也许将来它能够处理其他类型的消息。

实例请参看第7章节。

4.1消息驱动Bean和会话Bean,实体Bean有什么不同?

消息驱动Bean和会话Bean,实体Bean最大的不同在于在客户端消息驱动Bean不用通过接口来访问。接口在章节“接口定义客户端访问”中有描述过。和会话Bean,实体Bean不一样的是,消息驱动Bean仅有一个bean class。

由几个方面考虑,消息驱动Bean类似于一个无状态类型会话Bean。

l 消息驱动Bean的实例不为任何客户端保存数据或会话状态。

l 所有的消息驱动Bean的实例都是平等的,允许EJB容器指派一个消息到任何一个实例中。容器把这些实例形成一个池,使得消息流能够马上被处理掉。

l 一个消息驱动Bean能够处理多个客户端的消息。

消息驱动Bean实例的变量通过操作客户端的消息能够存储一些状态。比如,一个JMS API连接,一个开放数据库的连接,或者一个实体被引用到一个企业Bean实体。

当一个消息到达,容器调用消息驱动Bean 的onMessage方法来处理消息。onMessage方法一般把消息映射为五种JMS消息中的一个,并且控制它与应用的企业逻辑保持一致。 onMessage方法调用辅助方法,或者可以调用一个会话Bean,一个实体Bean,来处理这些消息中的信息,或者保存到数据库中。

在事务处理的前后,一条消息可能被转换过,因此onMessage方法中的操作都是一个独立的事务处理。如果消息处理被回滚了,那么消息也将回复回原来的样子。更多的信息,请参看第7章。

4.2什么时候使用消息驱动Bean。

会话Bean和实体Bean允许你发送信息,同步接收信息,但不允许异步接收信息。为了避免绑定到多个信息源,你也许更喜欢在不在服务器端组件中使用同步阻塞。为了异步接收信息,使用消息驱动Bean吧。

5.Enterprise Bean的内容

开发一个企业Bean,你必须提供以下的文件:

l 部署描述: 一个XML文件包含部署的信息,比如它的一致性类型和事务处理的属性。使用部署工具可以通过它新Enterprise Bean向导来有效地生成一个部署说明。

l Enterprise Bean类: 实现接口定义的方法。

l 接口: 远程访问,需要远程和本地接口。本地访问,需要本地和本地的接口。请参看“定义客户端访问接口”章节。(注意这些接口都没有被消息驱动Bean使用)

l 辅助类: 企业Bean需要一些其他的类,比如异常和实用类。

你把上面所说的文件打包为EJB JAR文件。EJB JAR是存储企业Bean的模型,它是独立的,可以被用到不同的应用中去。为了构建成一个应用,你必须打包一个或多个模型(比如EJB JAR文件)到EAR文件中去。EAR是一个应用的文档文件。当你部署包含EJB JAR文件的EAT文件时,你也就是把企业Bean部署到J2EE服务器上。

6.Enterprise Bean命名习惯

因为企业Bean由多个部分构成,他们经常遵循下面的命名习惯。表3-2汇集了这个教程里的一些命名习惯。

Table 3-2 Naming Conventions for Enterprise Beans

Item

Syntax

Example

Enterprise bean name(DD)

EJB

AccountEJB

EJB JAR display name(DD)

JAR

AccountJAR

Enterprise bean class

Bean

AccountBean

Home interface

Home

AccountHome

Remote interface

Account

Local home interface

LocalHome

LocalAccountHome

Local interface

Local

LocalAccount

Abstract schema

Account

DD表示这一项是部署说明中的元素。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-131554/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    1714
  • 访问量
    1477562