⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejb2_0中的变化增强,应用程序开发的灵活性和可移植性1.htm

📁 写给JSP初级程序员的书
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://eps.www85.cn4e.com/java/article/devshow.asp?id=66 -->
<HTML><HEAD><title>csdn_EJB2.0中的变化增强,应用程序开发的灵活性和可移植性1</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>TD {
	FONT-FAMILY: "Verdana", "Arial", "宋体"; FONT-SIZE: 9pt
}
A {
	COLOR: #660000; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #660000; TEXT-DECORATION: none
}
.line {
	LINE-HEIGHT: 14pt
}
</STYLE>

<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>
<table>
  <table><tbody>
  <TR>
    <TD height=21>
      <DIV align=center><B><FONT size=3>EJB2.0中的变化增强,应用程序开发的灵活性和可移植性1 <BR><FONT size=2> </FONT></FONT></FONT>
      <HR align=center color=#cccccc noShade SIZE=1>
      </DIV></TD></TR>
  <TR>
    <TD class=line><FONT 
      color=#333300><BR><BR>全面研读&nbsp;EJB&nbsp;2.0&nbsp;<BR>EJB&nbsp;2.0&nbsp;中引人注目的变化增强了应用程序开发的灵活性和可移植性&nbsp;<BR><BR>Richard&nbsp;Monson-Haefel&nbsp;<BR>OpenEJB&nbsp;首席设计师&nbsp;<BR>2000&nbsp;年&nbsp;6&nbsp;月&nbsp;<BR><BR>内容:&nbsp;<BR><BR><BR>CMP&nbsp;<BR>抽象的持久性方案&nbsp;<BR>EJB&nbsp;2.0&nbsp;的&nbsp;CMP&nbsp;模型&nbsp;<BR>EJB&nbsp;查询语言&nbsp;<BR>新的&nbsp;ejbHome&nbsp;方法&nbsp;<BR>MessageDrivenBean&nbsp;<BR>什么是&nbsp;JMS?&nbsp;<BR>EJB&nbsp;2.0&nbsp;中的&nbsp;JMS&nbsp;<BR>作为&nbsp;EJB&nbsp;2.0&nbsp;资源的&nbsp;JMS&nbsp;<BR>JMS&nbsp;与&nbsp;MessageDrivenBean&nbsp;<BR>结论&nbsp;<BR>参考资料&nbsp;<BR>作者简介&nbsp;<BR><BR><BR><BR>新的&nbsp;EJB&nbsp;2.0&nbsp;规范不仅仅是一个新的阶段性发行版,它加入了许多引人注目的变动,包括&nbsp;CMP&nbsp;组件模型中的一些变动和一种新的&nbsp;bean&nbsp;类型,它们将增强您在开发应用程序时的灵活性和可移植性。请率先了解此新规范的功能,本月已发布了它的公开草案。&nbsp;<BR><BR>6&nbsp;月&nbsp;2&nbsp;号发布的&nbsp;Enterprise&nbsp;JavaBeans&nbsp;2.0&nbsp;不仅是一个阶段性发行版,而且是该规范的一个新版本。整个规范有&nbsp;500&nbsp;多页,比以前的&nbsp;EJB&nbsp;1.1&nbsp;规范长了&nbsp;200&nbsp;页&nbsp;(66%)。该规范中最重要的变动是对容器管理的持久性&nbsp;(CMP)&nbsp;所作的更改,以及引入了一种全新的&nbsp;bean&nbsp;类型,即&nbsp;MessageDrivenBean。&nbsp;<BR><BR>EJB&nbsp;2.0&nbsp;中的大量更改都集中在一种新&nbsp;CMP&nbsp;组件模型的定义中。它完全不同于旧的&nbsp;CMP&nbsp;模型,因为它引入了一个全新的成员,即持久性管理器,并引入了全新的方式来定义容器管理的字段,以及定义这些字段与其它&nbsp;bean&nbsp;和从属对象的关系。&nbsp;<BR><BR>MessageDrivenBean&nbsp;(消息&nbsp;bean)的引入也是非常重要的。消息&nbsp;bean&nbsp;体现出&nbsp;JMS&nbsp;(Java&nbsp;Message&nbsp;Service)与&nbsp;EJB&nbsp;相集成,以创建出一种全新的&nbsp;bean&nbsp;类型,它设计用来处理异步的&nbsp;JMS&nbsp;消息。这种振奋人心的新型&nbsp;bean&nbsp;为&nbsp;JMS&nbsp;客户机提供一种组件模型,允许将它们部署到&nbsp;EJB&nbsp;容器系统的丰富而强健的环境中去。&nbsp;<BR><BR>对该规范还作了许多较小的其它更改。这些其它更改虽然也重要,但它们主要是涉及使该规范更严格,以便消除多义性,并使这些组件具有更高的可移植性。本文集中讨论&nbsp;EJB&nbsp;2.0&nbsp;中引入的新&nbsp;CMP&nbsp;和消息&nbsp;bean&nbsp;组件模型。&nbsp;<BR><BR>我将提供几个具体的例子,所以读者应该很容易跟上并理解它。但是,EJB&nbsp;初学者可能发现这个材料比较困难,因为它假定读者已对&nbsp;EJB&nbsp;有了基本的了解。有关&nbsp;EJB&nbsp;的详细信息,请参阅参考资料。&nbsp;<BR><BR>容器管理的持久性&nbsp;<BR>容器管理的持久性在&nbsp;EJB&nbsp;2.0&nbsp;中发生了根本变化。在&nbsp;EJB&nbsp;2.0&nbsp;中,持久性管理器在运行时自动处理&nbsp;CMP&nbsp;实体&nbsp;bean&nbsp;的持久性。持久性管理器负责根据一种称为抽象持久性方案的新的&nbsp;bean&nbsp;持久性管理器合约,将实体&nbsp;bean&nbsp;映射到数据库。此外,持久性管理器还负责实现和执行多种查找方法,这些查找方法均基于一种称为&nbsp;EJB&nbsp;QL&nbsp;的新型查询语言。&nbsp;<BR><BR>注意到以下事实是很重要的,即符合&nbsp;EJB&nbsp;2.0&nbsp;规范的产品必须能支持&nbsp;EJB&nbsp;1.1&nbsp;CMP&nbsp;模型,又能支持新的&nbsp;EJB&nbsp;2.0&nbsp;模型。虽然这两种模型并不兼容,但是为了保证向后兼容性,就必须能支持&nbsp;EJB&nbsp;1.1&nbsp;模型。&nbsp;<BR><BR>抽象持久性方案&nbsp;<BR>为了理解抽象持久性方案是如何工作的,以及它为什么重要,我将为您快速地回顾一下在&nbsp;EJB&nbsp;1.1&nbsp;中是如何处理&nbsp;CMP&nbsp;的,随后再讨论在&nbsp;EJB&nbsp;2.0&nbsp;中如何定义它。&nbsp;<BR><BR>EJB&nbsp;1.1&nbsp;中的&nbsp;CMP&nbsp;模型&nbsp;<BR>在&nbsp;EJB&nbsp;1.1&nbsp;中,bean&nbsp;开发人员负责将&nbsp;bean&nbsp;类的持久性字段声明为&nbsp;Java&nbsp;基本类型或可序列化类型。下列示例显示了一个&nbsp;Employee&nbsp;企业级&nbsp;bean&nbsp;类,它是按&nbsp;EJB&nbsp;1.1&nbsp;定义的,带有几个&nbsp;CMP&nbsp;字段:&nbsp;<BR><BR>//&nbsp;Employee&nbsp;bean&nbsp;类&nbsp;<BR>public&nbsp;class&nbsp;EmployeeBean&nbsp;implements&nbsp;<BR>java.ejb.EntityBean&nbsp;{&nbsp;<BR>//&nbsp;实例字段&nbsp;<BR>EntityContext&nbsp;ejbContext;&nbsp;<BR><BR>//&nbsp;容器管理的字段&nbsp;<BR>public&nbsp;int&nbsp;identity;&nbsp;<BR>public&nbsp;String&nbsp;firstName;&nbsp;<BR>public&nbsp;String&nbsp;lastName;&nbsp;<BR>public&nbsp;double&nbsp;salary;&nbsp;<BR>public&nbsp;Address&nbsp;address;&nbsp;<BR><BR>public&nbsp;Integer&nbsp;ejbCreate(int&nbsp;id,&nbsp;String&nbsp;fname,&nbsp;<BR>String&nbsp;lname){&nbsp;<BR>identity&nbsp;=&nbsp;id;&nbsp;<BR>firstName&nbsp;=&nbsp;fname;&nbsp;<BR>lastName&nbsp;=&nbsp;lname;&nbsp;<BR>return&nbsp;null;&nbsp;<BR>}&nbsp;<BR>...&nbsp;<BR>}&nbsp;<BR>//&nbsp;Address&nbsp;从属类&nbsp;<BR>public&nbsp;class&nbsp;Address&nbsp;implements&nbsp;Serializable{&nbsp;<BR>public&nbsp;String&nbsp;street;&nbsp;<BR>public&nbsp;String&nbsp;city;&nbsp;<BR>public&nbsp;String&nbsp;state;&nbsp;<BR>public&nbsp;String&nbsp;zip;&nbsp;<BR>}&nbsp;<BR><BR><BR><BR><BR>当将关系数据库用于持久性时,基本字段如&nbsp;identity、firstName、lastName&nbsp;和&nbsp;salary,很容易持久化,因为它们很好地映射为&nbsp;SQL&nbsp;类型,如&nbsp;INTEGER、CHAR&nbsp;和&nbsp;DOUBLE。&nbsp;<BR><BR>在&nbsp;EJB&nbsp;1.1&nbsp;中,CMP&nbsp;bean&nbsp;的&nbsp;XML&nbsp;部署描述符提供&nbsp;cmp-field&nbsp;元素,用以标识此&nbsp;bean&nbsp;类中的持久性字段(容器管理的字段)。如下所示,cmp-field&nbsp;元素用来区分写入数据库的字段和不写入数据库的字段。例如,ejbContext&nbsp;字段就不包括在容器管理的字段的列表中,因此它不是持久性字段。&nbsp;<BR><BR>&lt;ejb-jar&gt;&nbsp;<BR>&lt;enterprise-beans&gt;&nbsp;<BR>&lt;entity&gt;&nbsp;<BR>&lt;ejb-name&gt;EmployeeEJB&lt;/ejb-name&gt;&nbsp;<BR>...&nbsp;<BR>&lt;persistence-type&gt;Container&lt;/persistence-type&gt;&nbsp;<BR><BR>...&nbsp;<BR>&lt;cmp-field&gt;&lt;field-name&gt;identity&lt;/field-name&gt;&lt;/cmp-field&gt;&nbsp;<BR><BR>&lt;cmp-field&gt;&lt;field-name&gt;firstName&lt;/field-name&gt;&lt;/cmp-field&gt;&nbsp;<BR><BR>&lt;cmp-field&gt;&lt;field-name&gt;lastName&lt;/field-name&gt;&lt;/cmp-field&gt;&nbsp;<BR><BR>&lt;cmp-field&gt;&lt;field-name&gt;salary&lt;/field-name&gt;&lt;/cmp-field&gt;&nbsp;<BR><BR>&lt;cmp-field&gt;&lt;field-name&gt;address&lt;/field-name&gt;&lt;/cmp-field&gt;&nbsp;<BR><BR>...&nbsp;<BR><BR><BR>容器提供者提供一种工具,用来将&nbsp;bean&nbsp;的持久性字段映射到数据库表中的列,通常每个&nbsp;bean&nbsp;对应一个表。但是,可序列化的类型,如&nbsp;Address,就比较难于持久化。在&nbsp;EJB&nbsp;1.1&nbsp;中,没有标准的方法将可序列化的对象映射到关系数据库。虽然&nbsp;Address&nbsp;类有其自身的字段集,但&nbsp;XML&nbsp;部署描述符并没有提供一种机制,来将这些字段映射到数据库。在大多数情况下,人们期望将可序列化的对象(如&nbsp;Address)作为二进制类型(有时称为&nbsp;blob&nbsp;类型)持久化到某个数据库表中。&nbsp;<BR><BR>由于实体&nbsp;bean&nbsp;的数据方案逐渐复杂起来,所以这个问题也变得严重了。例如,Employee&nbsp;bean&nbsp;可能有多个类似于&nbsp;Address&nbsp;的子对象,如&nbsp;Benefits&nbsp;和&nbsp;JobPosition。这些子对象称为从属对象,可以形成关系数据库中跨几个表的复杂对象图。另外,EJB&nbsp;1.1&nbsp;中的&nbsp;CMP&nbsp;在很大程度上不足以持久化与其它&nbsp;bean&nbsp;的关系。在&nbsp;EJB&nbsp;1.1&nbsp;中,如果某个&nbsp;bean&nbsp;准备维持与另一个&nbsp;bean&nbsp;的关系,则容器会自动将主关键字或句柄用作一个链接。与某些其它&nbsp;bean&nbsp;的关系其性质可能是双向的,或者要依赖于一些不易用主关键字或句柄来表示的字段,为了保持与这类&nbsp;bean&nbsp;的关系,上面的办法已被证明是一种远未完善的机制。&nbsp;<BR><BR>EJB&nbsp;2.0&nbsp;的&nbsp;CMP&nbsp;模型&nbsp;<BR>在&nbsp;EJB&nbsp;2.0&nbsp;中,CMP&nbsp;实体&nbsp;bean&nbsp;和持久性管理器之间的新合约,使您能够在实体&nbsp;bean&nbsp;中定义更复杂的、可移植性更强的关系,包括&nbsp;bean&nbsp;与&nbsp;bean&nbsp;之间、bean&nbsp;与从属对象之间、甚至从属对象与从属对象之间的关系。&nbsp;<BR><BR>持久性管理器是新加入到&nbsp;Enterprise&nbsp;JavaBeans&nbsp;部署过程中的。容器厂商,或专长于特定数据库的持久性的厂商,将能提供这种持久性管理器。其思路是将用于管理&nbsp;bean&nbsp;关系的机制从容器中分离出来,容器只负责管理安全、事务和资源。这种职责上的分离使不同的持久性管理器能够与不同的容器一起工作。它也使实体&nbsp;bean&nbsp;在不同&nbsp;EJB&nbsp;厂商之间以及在各种持久性管理器之间具有更强的可移植性。&nbsp;<BR><BR>如果您使用或学习过&nbsp;Thought&nbsp;Inc.&nbsp;生产的,能自动为&nbsp;EJB&nbsp;1.1&nbsp;容器生成&nbsp;BMP(bean&nbsp;管理的持久性)bean&nbsp;的产品&nbsp;CocoBase,则您对持久性管理器工具如何工作就已经比较熟悉了。CocoBase&nbsp;根据&nbsp;bean&nbsp;部署者提供的,从对象到关系的映射信息,为&nbsp;BMP&nbsp;bean&nbsp;生成全部数据库访问逻辑。在&nbsp;EJB&nbsp;2.0&nbsp;中,持久性管理器能够根据部署描述符、bean&nbsp;的抽象持久性方案和部署者完成的工作所提供的信息,生成&nbsp;CMP&nbsp;实体到关系数据库的映射。但是,持久性管理器并不局限于关系数据库。也可以为对象数据库以及遗留的系统和&nbsp;ERP&nbsp;系统(如&nbsp;SAP)开发持久性管理器。&nbsp;<BR><BR>为了将持久性管理器从容器中分离出来,必须定义&nbsp;bean&nbsp;与持久性管理器之间的合约。这个合约在新的抽象持久性方案中表现出来。此方案是通过部署描述符中一组新的&nbsp;XML&nbsp;元素和&nbsp;CMP&nbsp;实体&nbsp;bean&nbsp;中的一组代码习语定义的。在&nbsp;EJB&nbsp;2.0&nbsp;中,CMP&nbsp;bean&nbsp;类被声明为抽象类,它的持久性字段和关系字段是使用抽象的读方法和写方法来访问的,而这两种方法的方法特征则映射为&nbsp;XML&nbsp;部署描述符中的特定元素。&nbsp;<BR><BR>在部署该&nbsp;bean&nbsp;时,您将使用持久性管理器工具,根据&nbsp;XML&nbsp;部署描述符和&nbsp;bean&nbsp;类,来具体实现此抽象&nbsp;bean&nbsp;类及其从属对象类。具体实现将包括数据访问代码,此代码将在运行时将&nbsp;bean&nbsp;的状态实际读出和写到数据库中。在运行时,容器使用由持久性管理器工具生成的子类,而不使用&nbsp;bean&nbsp;提供者定义的抽象类<BR></FONT></TD></TR>
  <TR>
    <TD height=5>
      <HR align=center color=#cccccc noShade SIZE=1>
    </TD></TR></TBODY></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -