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

📄 ejb 体系结构的历史和目标.htm

📁 写给JSP初级程序员的书
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<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>EJB 体系结构的历史和目标 <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>本文转自&nbsp;IBM&nbsp;developerWorks&nbsp;中国网站<BR><BR><BR>EJB&nbsp;体系结构的历史和目标&nbsp;<BR><BR><BR><BR>  本文概述&nbsp;Enterprise&nbsp;JavaBeans&nbsp;(EJB)&nbsp;技术,旨在让读者快速理解基本概念。第&nbsp;1&nbsp;部分讲述&nbsp;EJB&nbsp;技术的历史和某些目标、优点和技术。为了简洁明了,有选择地讲述EJB&nbsp;技术的一些关键要素。请注意,虽然&nbsp;EJB&nbsp;组件依赖于一些基础的&nbsp;Java&nbsp;服务(如&nbsp;Java&nbsp;Transaction&nbsp;Service),但使用&nbsp;EJB&nbsp;组件及认识这些组件的好处并不需要掌握这些相关技术的知识。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;技术自&nbsp;1998&nbsp;年&nbsp;3&nbsp;月问世以来很受好评。下面这段话就是一个例子:&nbsp;<BR><BR>  &nbsp;  “自从两年多以前问世以来,Enterprise&nbsp;JavaBeanstm&nbsp;技术在平台供应商和企业的开发小组中,同样都保持着空前的发展势头。这是因为&nbsp;EJBtm&nbsp;的服务器端组件模型简化了中间件组件的开发,这些中间组件都是事务性的、可伸缩的和可移植的。Enterprise&nbsp;JavaBeans&nbsp;服务器通过为中间件服务(如事务处理、安全性、数据库连接及其他)提供自动支持,降低了开发中间件的复杂程度。”(Sun&nbsp;Microsystems&nbsp;网站)<BR>&nbsp;<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;这一名称利用了&nbsp;Java&nbsp;bean&nbsp;—&nbsp;这种可移植、可重用的&nbsp;Java&nbsp;软件组件的声望。Enterprise&nbsp;JavaBeans&nbsp;技术把&nbsp;Java&nbsp;组件的概念从客户机域扩展到了服务器域:这是&nbsp;Java&nbsp;技术成长过程中有重大意义的一步,它使&nbsp;Java&nbsp;技术发展成为一种强健的、可伸缩的环境,能够支持以任务为关键的企业信息系统。<BR><BR>   服务器上的&nbsp;Java&nbsp;应用程序&nbsp;<BR><BR>  Java&nbsp;编程语言最初在&nbsp;Web&nbsp;开发人员中获得好评的一个原因是,它支持称为&nbsp;applet&nbsp;的可下载&nbsp;Java&nbsp;程序。对&nbsp;Applet&nbsp;的支持以&nbsp;Applet&nbsp;类的形式内置到了&nbsp;1.0&nbsp;版的&nbsp;Java&nbsp;Development&nbsp;Kit&nbsp;(JDK)&nbsp;中。按照&nbsp;1.0&nbsp;版的时间框架,Java&nbsp;开发是以&nbsp;applet&nbsp;和应用程序作为中心的。基于&nbsp;JDK&nbsp;1.0&nbsp;版的&nbsp;Java&nbsp;读物都是从&nbsp;applet&nbsp;和应用程序的角度来描述&nbsp;Java&nbsp;编程的:<BR><BR>    &nbsp;  “Java&nbsp;程序由更多的类定义中的某一个组成,每个类定义均已编译成它自已的&nbsp;Java&nbsp;虚拟机对象代码的&nbsp;.class&nbsp;文件。这些类之一必须定义一个叫做&nbsp;main()&nbsp;的方法,程序就是从这个方法开始运行的。想调用一个&nbsp;Java&nbsp;程序,需要运行&nbsp;Java&nbsp;解释器&nbsp;java,并指定包含&nbsp;main()&nbsp;方法的类的名称。请注意&nbsp;Java&nbsp;applet&nbsp;并不是一个应用程序&nbsp;—&nbsp;它是一个由已在运行的&nbsp;Java&nbsp;应用程序(如&nbsp;Web&nbsp;浏览器或&nbsp;applet&nbsp;查看器)装入并运行的&nbsp;Java&nbsp;类。”(见&nbsp;Flanagan&nbsp;所著的&nbsp;Java&nbsp;in&nbsp;a&nbsp;Nutshell)&nbsp;<BR><BR><BR>  Java&nbsp;应用程序可以在服务器上运行,但是不管是在客户机-服务器环境下,还是在基于&nbsp;Web&nbsp;的环境下,JDK&nbsp;中都没有提供让&nbsp;Java&nbsp;应用程序专用于服务器机器的接口或包。认识到&nbsp;Java&nbsp;在&nbsp;Web&nbsp;环境下作为一种服务器语言的潜力,Sun&nbsp;Microsystems&nbsp;编写了&nbsp;Java&nbsp;Servlet&nbsp;规范。servlet&nbsp;在许多方面与&nbsp;applet&nbsp;相似,它是专门为在&nbsp;Web&nbsp;服务器机器上运行而设计的&nbsp;Java&nbsp;程序:<BR><BR><BR>  &nbsp;  “servlet&nbsp;是由容器管理的&nbsp;Web&nbsp;组件,可产生动态内容。servlet&nbsp;是一种小型的、与平台无关的&nbsp;Java&nbsp;类,被编译成体系结构中立的字节代码,这种代码可以动态地加载到一个&nbsp;web&nbsp;服务器上,并由此&nbsp;web&nbsp;服务器运行。servlet&nbsp;通过一种由&nbsp;servlet&nbsp;容器实现的请求-响应模型与&nbsp;Web&nbsp;客户机进行交互。这种请求-响应模型建立在超文本传输协议&nbsp;(HTTP)&nbsp;行为的基础之上。”(见&nbsp;JavaSoft&nbsp;的“Java&nbsp;Servlet&nbsp;API&nbsp;Specification”)<BR>&nbsp;<BR><BR>  在一台&nbsp;Web&nbsp;服务器控制下,在多台服务器上运行若干小型用户程序,这种想法并不新鲜&nbsp;—&nbsp;一段时间以来,公共网关接口&nbsp;(CGI)&nbsp;程序(常被称为&nbsp;CGI&nbsp;脚本)一直起着这种作用,并推动了&nbsp;Web&nbsp;的普及。但&nbsp;Java&nbsp;servlet&nbsp;可以以更高的效率和可移植性来实现这一目的,因而可望最终会取代&nbsp;CGI&nbsp;程序。为&nbsp;servlet&nbsp;提供运行时环境的软件(通常被称为&nbsp;servlet&nbsp;引擎)可以添加到现有的、本身并不支持&nbsp;Java&nbsp;可执行程序的&nbsp;Web&nbsp;服务器上。<BR><BR>  Java&nbsp;servlet&nbsp;的出现,为应用程序员使用&nbsp;Java&nbsp;来创建&nbsp;Web&nbsp;应用程序开辟了新的途径。但是,仅有&nbsp;servlet&nbsp;还不能为真正的企业计算提供完整的模型。CGI&nbsp;应用程序本身往往不是完整的应用程序,在处理接收自&nbsp;Web&nbsp;浏览器上用户的信息请求时,CGI&nbsp;只是整个处理过程中的一个中间步骤。例如,CGI&nbsp;应用程序的一种常见用途是访问数据库。将它用于这种任务时,CGI&nbsp;程序提供一种方法,将用户的数据请求连接到能满足这种请求的企业数据库。CGI&nbsp;程序常常充当一种中间软件,从&nbsp;Web&nbsp;浏览器接收请求,决定必须调用哪些计算资源来满足这些请求,并向浏览器发回响应。Java&nbsp;servlet&nbsp;与&nbsp;CGI&nbsp;程序一样,最适合充当连接前端&nbsp;Web&nbsp;请求与后端数据资源的中间层组件。<BR><BR><BR>三层体系结构&nbsp;<BR><BR>  Web&nbsp;编程向服务器端&nbsp;Java&nbsp;应用程序的演化,也带来了体系结构的演化,使它脱离了常规的客户机-服务器两层模型,而向一种三层方法发展。两层模型当时曾经具有创新意义,因为它将一些计算任务从主处理器上卸载到灵巧的客户机。常规的基于&nbsp;LAN&nbsp;的数据库应用程序就是一个例子,其中数据库管理器服务器软件驻留在一个专用的服务器机器上,而用户则通过他们的工作站上的客户机代码来访问数据库。随着客户机-服务器模型成长到能付诸使用,就出现了对服务器可伸缩性和对客户机代码大小和复杂性的关注。于是提出了一种三层的体系结构,以避免在两层模型中已察觉到的弱点,使&nbsp;Web&nbsp;能成为一个计算平台:<BR><BR>  &nbsp;  “许多人...断言,传统的客户机/服务器两层体系结构不会有好的可伸缩性,因为用户连接和数据访问的数量无法预测,而且在一些系统管理上也存在问题。为处理两层体系结构的限制,许多开发集体都在转向三层体系结构。这种体系结构大致可以定义为:客户机层上的表示层、中间的服务器和后端的某种数据库。这种设想的目的就是缓和客户机或数据库服务器上的代码膨胀,集中管理业务逻辑,更灵活地使用数据库,而不仅是使用所存储的过程和触发器。”(见&nbsp;Kim&nbsp;的“Looking&nbsp;for&nbsp;a&nbsp;3-Tier&nbsp;App&nbsp;Builder?”)<BR>&nbsp;<BR><BR><BR>  一个三层结构模型通常被想像成有一个&nbsp;Web&nbsp;浏览器作为客户层。Web&nbsp;浏览器由于有可能成为一种真正的通用客户机,使它从观念上取代了两层结构的“胖客户机”。如果浏览器作为&nbsp;Web&nbsp;应用程序体系结构的标准瘦客户机获得认可,那么以前驻留在两层模型的胖客户机中的功能会怎么样呢?现在,应用程序专用的功能并不移植回服务器(例如数据库管理器),而是有意将它驻留在一个新的中间层上。中间层支持应用程序服务器软件,这种软件是中间件的一种形式,它处于第一层上瘦客户机的最小功能和第三层上服务器端业务系统的丰富功能之间。由于三层体系结构与&nbsp;Web&nbsp;处理模型有密切关系,所以中间层应用程序服务器常被视为&nbsp;Web&nbsp;服务器的一种功能扩展。现有的&nbsp;Web&nbsp;应用程序利用&nbsp;CGI&nbsp;程序,将来自&nbsp;Web&nbsp;浏览器的用户请求传送到不基于&nbsp;Web&nbsp;的业务系统,并向浏览器返回响应,就是三层模型的一种实现。这些应用程序逐渐向&nbsp;servlet&nbsp;技术的转移说明三层模型正在增强。<BR><BR>  JavaBeans&nbsp;组件&nbsp;<BR><BR>  JavaBeans&nbsp;规范将“组件软件”的概念引入到&nbsp;Java&nbsp;编程的领域。组件是自含的、可重用的软件单元;而&nbsp;JavaBeans&nbsp;组件,则可以使用可视的应用程序开发工具,可视地将它们编写到&nbsp;Java&nbsp;程序中。JavaBeans&nbsp;规范为&nbsp;Java&nbsp;开发人员提供了一种“组件化”其&nbsp;Java&nbsp;类的方法:&nbsp;<BR><BR><BR>  Bean&nbsp;是一些&nbsp;Java&nbsp;类,可在一个可视的构建器工具中操作它们,并且可以将它们一起编写到应用程序中。任何具有某种特性和事件接口约定的&nbsp;Java&nbsp;类都可以是一个&nbsp;Bean。(见&nbsp;JavaSoft,“Using&nbsp;the&nbsp;Beans&nbsp;Development&nbsp;Kit&nbsp;1.0”)&nbsp;<BR><BR>  如果软件重用是一个好主意,那么是否应该让每一个&nbsp;Java&nbsp;类都成为&nbsp;Java&nbsp;bean&nbsp;呢?如果&nbsp;Java&nbsp;类满足某些准则,它们就适于充当&nbsp;bean&nbsp;的角色:<BR><BR><BR>  在开发任何新软件之前,都值得考虑是否用&nbsp;JavaBean&nbsp;的形式来开发它。如果软件模块要既能够可视地操作,又能够定制以达到某些效果,则这种软件模块就可能适于做成一个&nbsp;JavaBean。为帮助您确定要开发的软件是否应该是一个&nbsp;JavaBean,假定它应该是用&nbsp;Java&nbsp;编写的,请向您自已提出以下问题,并相应地作出决定:<BR><BR>  是否打算让它可重用?或者,它会是可重用的吗?&nbsp;<BR><BR>  是否希望将它与其他可重用的&nbsp;Java&nbsp;组件一起使用?&nbsp;<BR><BR>  是否预计会在&nbsp;IDE&nbsp;工具中使用它?&nbsp;<BR><BR>  如果上述问题的答案都是肯定的,则它应该作为&nbsp;JavaBean&nbsp;来开发。(见&nbsp;developerWorks&nbsp;的“JavaBeans&nbsp;Guidelines”)<BR><BR>  JavaBean&nbsp;概念是为了在&nbsp;Java&nbsp;编程环境中支持可重用的组件,它是一种一般性的设计方法,适用于客户机或服务器机器上运行的&nbsp;Java&nbsp;程序。由于对可视的构建器工具的强调,也由于许多&nbsp;Java&nbsp;bean&nbsp;都是图形用户界面&nbsp;(GUI)&nbsp;组件,所以&nbsp;JavaBean&nbsp;组件可能被视为一种客户端技术。但是,并不要求&nbsp;Java&nbsp;bean&nbsp;都是可视的,并且它们也可以用于服务器环境中。<BR><BR>  编码为&nbsp;Java&nbsp;bean&nbsp;的&nbsp;Java&nbsp;类通常具有以下特征:<BR><BR>  使用设计模式。这些模式就是方法和接口的编码约定。&nbsp;<BR><BR>  支持可视的软件开发工具。类必须将变量(称为属性)、方法和事件展示出来。&nbsp;<BR><BR>  可以定制。定制包括能支持缺省的属性编辑器,或者提供单一的定制规则。定制使开发人员得以在不更改源代码的情况下更改&nbsp;bean&nbsp;的行为。&nbsp;<BR><BR><BR>  支持自省&nbsp;(introspection)。这指的是将属性、方法和事件公开给其他类,可以通过设计模式或通过创建&nbsp;BeanInfo&nbsp;类来完成这种自省。&nbsp;<BR><BR>  是持久的。这就允许在一个可视构建器中定制一个&nbsp;bean,然后以其定制后的状态加以保存。<BR><BR>  Java&nbsp;2&nbsp;Platform,&nbsp;Enterprise&nbsp;Edition&nbsp;<BR><BR>  Sun&nbsp;Microsystems&nbsp;发起了一项称为&nbsp;Java&nbsp;2&nbsp;Platform,&nbsp;Enterprise&nbsp;Edition&nbsp;(J2EE)&nbsp;的技术创新,旨在将&nbsp;Java&nbsp;平台的范围扩展到大规模服务器环境:<BR><BR><BR>  <BR>  “1997&nbsp;年&nbsp;4&nbsp;月&nbsp;12&nbsp;日,Sun&nbsp;宣布了一项为企业环境开发&nbsp;Java&nbsp;平台的创新成果。使用开放式的&nbsp;Java&nbsp;Community&nbsp;Process,Sun&nbsp;促进了一组标准的&nbsp;Java&nbsp;扩展的开发,称为&nbsp;Enterprise&nbsp;Java&nbsp;API。这些应用程序编程接口&nbsp;(API)&nbsp;为各种各样的中间件的实现提供了不依赖供应商的编程接口。Enterprise&nbsp;Java&nbsp;API&nbsp;的要点是&nbsp;Enterprise&nbsp;JavaBeans&nbsp;API,后者为&nbsp;Java&nbsp;应用程序服务器定义了一个服务器端组件模型,以及一个不依赖供应商的编程接口。”(见&nbsp;Thomas&nbsp;的“Java&nbsp;2&nbsp;Platform,&nbsp;Enterprise&nbsp;Edition:&nbsp;Ensuring&nbsp;Consistency,&nbsp;Portability,&nbsp;and&nbsp;Interoperability”)&nbsp;<BR><BR><BR>  J2EE&nbsp;为&nbsp;Enterprise&nbsp;JavaBeans&nbsp;技术提供了工作环境。事实上,Sun&nbsp;把若干项软件技术都设想为这样的构件块,它们将使大型企业能够把以任务为关键的业务系统移植到&nbsp;Java&nbsp;环境中,而&nbsp;Enterprise&nbsp;JavaBeans&nbsp;技术不过是这些技术之一。EJB&nbsp;组件是按它们自己的规范定义的,但&nbsp;EJB&nbsp;技术并不是一项独立的技术。它建立在其他&nbsp;Java&nbsp;技术之上,这些技术由&nbsp;Sun&nbsp;和其他&nbsp;IT&nbsp;公司联合规定,它们一起提供了这个框架的内容,该框架就称为&nbsp;Java&nbsp;2&nbsp;Platform,&nbsp;Enterprise&nbsp;Edition。<BR><BR>  J2EE&nbsp;中包括以下技术:<BR><BR>   Enterprise&nbsp;JavaBeans&nbsp;(EJB)&nbsp;技术&nbsp;<BR><BR>   Java&nbsp;Interface&nbsp;Definition&nbsp;Language&nbsp;(IDL)&nbsp;<BR><BR>   Java&nbsp;Message&nbsp;Service&nbsp;(JMS)&nbsp;API&nbsp;<BR><BR>   Java&nbsp;Naming&nbsp;and&nbsp;Directory&nbsp;Interface&nbsp;(JNDI)&nbsp;<BR><BR>   Java&nbsp;Remote&nbsp;Method&nbsp;Invocation&nbsp;(RMI)&nbsp;和&nbsp;Object&nbsp;Serialization&nbsp;<BR><BR>   Java&nbsp;Servlet&nbsp;API&nbsp;<BR><BR>   Java&nbsp;Transaction&nbsp;API&nbsp;(JTA)&nbsp;<BR><BR>   Java&nbsp;Transaction&nbsp;Service&nbsp;(JTS)&nbsp;<BR><BR>   JavaServer&nbsp;Pages&nbsp;(JSP)&nbsp;技术&nbsp;<BR><BR>   JDBC&nbsp;数据库访问&nbsp;API<BR><BR>  参与到这个企业&nbsp;Java&nbsp;框架中,并不意味着每项技术都依赖于所有其他技术。单独的规范文档指出每项技术的相关性。例如,Enterprise&nbsp;JavaBeans&nbsp;规范&nbsp;1.0&nbsp;发行版就指明了在定位各个组件时与&nbsp;JNDI&nbsp;的相关性,以及在编程中启动和停止事务处理时与&nbsp;JTA&nbsp;的相关性。<BR><BR>  EJB&nbsp;技术的设计目标&nbsp;<BR><BR>  EJB&nbsp;规范的第一版以初稿形式于&nbsp;1997&nbsp;年&nbsp;12&nbsp;月公布,并于&nbsp;1998&nbsp;年&nbsp;3&nbsp;月作为&nbsp;1.0&nbsp;版发行。规范作者为&nbsp;EJB&nbsp;体系结构制定了以下目标:<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将是标准的组件体系结构,用于以&nbsp;Java&nbsp;编程语言构建分布式的面向对象的商务应用程序。通过把使用不同供应商提供的工具开发出来的组件组合在一起,Enterprise&nbsp;JavaBeans&nbsp;体系结构将有可能构建分布式的应用程序。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将使编写应用程序变得容易:应用程序开发人员将不必了解低层次的事务和状态管理的细节、多线程、资源共享和其他复杂的低级&nbsp;API。但是,将允许专家级的程序员直接访问低级&nbsp;API。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;应用程序将遵循&nbsp;Java&nbsp;编程语言的“一次编写,随处运行”的原则。EJB&nbsp;组件可以只开发一次,然后在多个平台上部署,而不需要重新编译或修改源代码。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将处理企业应用程序生命周期中的开发、部署和运行等方面。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将定义一些约定,这些约定使多个供应商提供的工具能够开发并部署可在运行时互操作的组件。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将与现有的服务器平台兼容。供应商将能够扩展它们的现有产品,以支持&nbsp;Enterprise&nbsp;JavaBeans&nbsp;组件。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将与&nbsp;Java&nbsp;编程语言编写的其他&nbsp;API&nbsp;兼容。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将提供&nbsp;EJB&nbsp;组件和非&nbsp;Java&nbsp;编程语言应用程序之间的互操作性。<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;体系结构将与&nbsp;CORBA&nbsp;兼容。<BR><BR><BR>使用&nbsp;EJB&nbsp;技术的好处&nbsp;<BR><BR>  这些设计目标会使企业和开发人员得到什么好处呢?下面列出了可望从采用&nbsp;Enterprise&nbsp;JavaBeans&nbsp;环境获得的好处:<BR><BR>  EJB&nbsp;组件使编写应用程序更为简单。尽管&nbsp;EJB&nbsp;体系结构复杂,但应用程序开发人员一般都不必再编写用于访问系统服务的代码。一种称为&nbsp;EJB&nbsp;容器的系统组件使系统服务可用于&nbsp;EJB&nbsp;组件的任务。<BR><BR>  服务器端商务逻辑可以移植。除了&nbsp;Java&nbsp;语言固有的可移植性外,EJB&nbsp;体系结构还在&nbsp;bean&nbsp;和支持该&nbsp;bean&nbsp;的容器之间提供了一套标准化的应用程序编程接口。这使开发人员能够将&nbsp;bean&nbsp;从一种操作环境移植到另一种操作环境,而无须重新编写其源代码。<BR><BR>  可以从现有的软件组件装配出服务器端应用程序,这与从现有的&nbsp;Java&nbsp;bean&nbsp;可以装配出客户端应用程序一样,从而使软件能够重用。<BR><BR>  EJB&nbsp;体系结构内置了对典型企业级系统服务的支持,包括分布式对象、事务处理、数据库、安全和全局命名。<BR><BR>  多家&nbsp;IT&nbsp;供应商都采纳&nbsp;EJB&nbsp;体系结构,这是由于有这样的承诺:客户将能够从选定的供应商那里选购软件组件,如&nbsp;EJB&nbsp;组件、容器及&nbsp;EJB&nbsp;服务器;也由于承诺了不同供应商的产品,只要符合&nbsp;EJB&nbsp;体系结构,就都是可互操作的。<BR><BR>  用&nbsp;EJB&nbsp;组件构建的应用程序可以从一个服务器移植到另一个服务器,从而支持可伸缩性,这是因为在&nbsp;EJB&nbsp;模型中,各个软件组件都是严格分离的。<BR><BR>  EJB&nbsp;体系结构能保障原有的&nbsp;IT&nbsp;投资,这是通过允许将现有的信息系统和资产“包裹”在这些应用程序中,而不要求客户更换现有技术。事实上,在关系数据库中存储数据的企业已经有了一套已有雏形的实体&nbsp;bean,正等着通过&nbsp;EJB&nbsp;外壳去访问。<BR><BR>  进一步考察&nbsp;JNDI&nbsp;<BR><BR>  Enterprise&nbsp;JavaBeans&nbsp;组件使用&nbsp;Java&nbsp;Naming&nbsp;and&nbsp;Directory&nbsp;Interface&nbsp;(JNDI)&nbsp;来访问各种目录服务。JNDI&nbsp;分两部分:应用程序编程接口&nbsp;(API)&nbsp;和服务供应商接口&nbsp;(SPI):<BR><BR><BR>  “JNDI&nbsp;体系结构由&nbsp;JNDI&nbsp;API&nbsp;和&nbsp;JNDI&nbsp;SPI&nbsp;组成。JNDI&nbsp;API&nbsp;允许&nbsp;Java&nbsp;应用程序访问各种命名和目录服务。JNDI&nbsp;SPI&nbsp;则是设计来供任意一种服务的供应商(也包括目录服务供应商)使用。这使得各种各样的目录服务和命名服务能够透明地插入到使用&nbsp;JNDI&nbsp;API&nbsp;的&nbsp;Java&nbsp;应用程序中。(见&nbsp;JavaSoft,“JNDI:&nbsp;Java&nbsp;Naming&nbsp;and&nbsp;Directory&nbsp;Interface”)&nbsp;<BR><BR><BR>  JNDI&nbsp;API&nbsp;并不同某种专用的命名技术或目录技术连在一起,也不同任何供应商的目录服务连在一起,因此它对&nbsp;EJB&nbsp;组件的可移植性有所贡献。例如,客户可以从多种不同的技术中选择,来为其&nbsp;EJB&nbsp;应用程序提供目录服务,这些技术包括:<BR><BR>  LDAP:Sun&nbsp;的&nbsp;LDAP&nbsp;服务供应商支持&nbsp;LDAP&nbsp;协议的第&nbsp;2&nbsp;版和第&nbsp;3&nbsp;版。&nbsp;<BR><BR>  NIS:Sun&nbsp;提供一个&nbsp;NIS&nbsp;服务供应商(NIS&nbsp;即网络信息服务,以前称为黄页)。&nbsp;<BR><BR>  COS&nbsp;命名:Sun&nbsp;的&nbsp;COS&nbsp;命名服务供应商提供对&nbsp;CORBA&nbsp;命名服务的访问。&nbsp;<BR><BR>  文件系统:Sun&nbsp;提供一个服务供应商来访问文件系统。&nbsp;<BR><BR>  RMI&nbsp;注册:Sun&nbsp;为&nbsp;RMI&nbsp;注册提供一个服务供应商。&nbsp;<BR><BR>  Novell:有几个服务供应商可提供对目录服务&nbsp;NDS&nbsp;的访问以及&nbsp;NetWare&nbsp;3X&nbsp;连接库、Novell&nbsp;文件系统和其他&nbsp;Novell&nbsp;服务(如扩展&nbsp;NCP)的访问。&nbsp;<BR><BR>  虽然&nbsp;JNDI&nbsp;规范对供应商是中立的,但不应认为,实现&nbsp;JNDI&nbsp;接口的应用程序服务器一定要能访问来自多个供应商的服务供应商代码。<BR><BR>  JNDI&nbsp;命名体系结构的关键概念包括:&nbsp;<BR><BR>  对象和名称之间的绑定。&nbsp;<BR><BR>  若干称为命名上下文的绑定集。&nbsp;<BR><BR>  命名系统,即若干组命名上下文。&nbsp;<BR><BR>  命名空间,指一个命名系统中的所有名称。&nbsp;<BR><BR>  名称分类为原子名称、复合名称和合成名称。原子名称是不可分割的,可以绑定到一个对象上。复合名称是原子名称的组合,而合成名称则跨越多个命名系统。<BR><BR>  命名上下文特别重要:所有的命名操作均是在上下文对象上进行的,并且名称解析过程总是从最初的命名上下文开始。<BR><BR>  EJB&nbsp;应用程序是如何使用&nbsp;JNDI&nbsp;的呢?JNDI&nbsp;的主要用途是检索对&nbsp;EJB&nbsp;组件的引用。因为&nbsp;EJB&nbsp;框架是一个分布式对象框架,所以&nbsp;EJB&nbsp;应用程序不应当假定&nbsp;EJB&nbsp;组件的位置。JNDI&nbsp;就是获取对&nbsp;bean&nbsp;的起始引用的一种机制。当一个&nbsp;bean&nbsp;安装到一个&nbsp;enterprise&nbsp;bean&nbsp;服务器上时,一个被称为&nbsp;EJB&nbsp;容器的软件组件就负责创建各个名称-对象绑定,使所需的&nbsp;Java&nbsp;类文件能使用这个&nbsp;bean。应用程序使用&nbsp;JNDI&nbsp;的查找方法来检索对象引用,如下例所示:<BR><BR>  Context&nbsp;initialContext&nbsp;=&nbsp;new&nbsp;InitialContext(&nbsp;);<BR>  CartHome&nbsp;cartHome&nbsp;=&nbsp;javax.rmi.PortableRemoteObject.narrow(&nbsp;<BR>  initialContext.lookup("applications/shopping_cart"),&nbsp;CartHome.class);<BR><BR>  应用程序有责任知道外部名称,应用程序就是通过这个名称才得以引用一个&nbsp;enterprise&nbsp;bean,并通过&nbsp;JNDI&nbsp;来获取对该&nbsp;bean&nbsp;的引用的。<BR><BR>  进一步考察&nbsp;JTA&nbsp;<BR><BR>  除&nbsp;JNDI&nbsp;以外,Enterprise&nbsp;JavaBeans&nbsp;体系结构还使用&nbsp;Java&nbsp;Transaction&nbsp;API&nbsp;(JTA)。因为事务对维护数据完整性和可靠性很重要,所以支持事务处理是&nbsp;EJB&nbsp;体系结构的一个基本部分。如果企业应用程序是分布式的,事务处理就会更加重要:<BR><BR><BR>  “事务的概念是一个重要的编程范例,其目的在于简化既要求可靠性又要求可用性的应用程序结构,特别是那些需要同时访问共享数据的应用程序。事务的概念最早是用在商务运作的应用程序中,其中它被用于保护集中式数据库中的数据。后来,事务的概念已扩展到分布式计算的更广泛的环境中。今天,事务是构建可靠的分布式应用程序的关键,这一点已得到广泛承认。”(见对象管理组的“Transaction&nbsp;Service&nbsp;Specification”)<BR>&nbsp;<BR><BR><BR>  有时将事务描述为具有下列特征的工作单元:&nbsp;<BR><BR>  原子性&nbsp;—&nbsp;如果因故障而中断,所有结果均撤销&nbsp;<BR><BR>  一致性&nbsp;—&nbsp;事务的结果保留不变的特性&nbsp;<BR><BR>  孤立性&nbsp;—&nbsp;中间状态对其他事务是不可见的&nbsp;<BR><BR>  持久性&nbsp;—&nbsp;已完成的事务的结果是持久的&nbsp;<BR><BR>  事务的终止有两种方式:提交一个事务会使其所有的更改永久不变,而回滚&nbsp;(rolling&nbsp;back)&nbsp;一个事务则撤销其所有的更改。<BR><BR>  对象管理组织&nbsp;(OMG)&nbsp;为一种面向对象的事务服务,即对象事务服务&nbsp;(OTS),创建了一种规范。OTS&nbsp;是&nbsp;EJB&nbsp;体系结构内的事务服务的基础。下列事务规范就是为&nbsp;enterprise&nbsp;bean&nbsp;所采用的事务模型而设:<BR><BR>  OMG&nbsp;的对象事务服务&nbsp;(OTS)&nbsp;<BR><BR>  Sun&nbsp;Microsystems&nbsp;的&nbsp;Transaction&nbsp;Service&nbsp;(JTS)&nbsp;<BR><BR>  Sun&nbsp;Microsystems&nbsp;的&nbsp;Java&nbsp;Transaction&nbsp;API&nbsp;(JTA)&nbsp;<BR><BR>  开放组&nbsp;(X/Open)&nbsp;的&nbsp;XA&nbsp;接口<BR><BR>  这种与语言无关的对象事务服务,为一个强健的分布式事务服务提供了基本概念、定义和功能。<BR><BR>  Java&nbsp;Transaction&nbsp;Service&nbsp;是&nbsp;OTS&nbsp;的&nbsp;Java&nbsp;映射,在&nbsp;org.omg.CosTransactions&nbsp;和&nbsp;org.omg.CosTSPortability&nbsp;这两个包中定义。JTS&nbsp;对事务分界和事务环境的传播之类的服务提供支持。JTS&nbsp;功能由应用程序通过&nbsp;Java&nbsp;Transaction&nbsp;API&nbsp;访问。&nbsp;<BR><BR>  Java&nbsp;Transaction&nbsp;API&nbsp;指定事务管理器与分布式事务中涉及的其他系统组件之间的各种高级接口,这些系统组件有应用程序、应用程序服务器和资源管理器等。JTA&nbsp;功能允许事务由应用程序本身、由应用程序服务器或由一个外部事务管理器来管理。JTA&nbsp;接口包含在&nbsp;javax.transaction&nbsp;和&nbsp;javax.transaction.xa&nbsp;这两个包中。<BR><BR>  XA&nbsp;接口定义了资源管理器和分布式事务环境中外部事务管理器之间的约定。外部事务管理器可以跨多个资源协调事务。XA&nbsp;的&nbsp;Java&nbsp;映射包含在&nbsp;Java&nbsp;Transaction&nbsp;API&nbsp;中。<BR><BR><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 + -