有二个因素正在驱动着商业应用程序发生根本性的变化。第一个因素,考虑的是如何开发程序;第二个因素,考虑的是如何布署程序。在另一方面,Internet商业的飞速增长,也正驱动着这些变化。Internet带来了新的商业模式,减少产品上市的时间,而且显著改变了企业在开发、布署企业应用程序的方式。另一方面,对于分布式计算加速得到采用,Internet也提供了介质。Internet提供了标准协议,例如HTTP 和 IIOP,这些协议基于 TCP/IP,使用WWW浏览器作为接口,为应用程序提供了一致的访问途径。Internet已经创造了许多新的应用程序类型,例如:电子商务、自助服务程序,这些程序都要和传统的企业应用程序集成起来。
今天的IT架构和IT 应用程序,需要能够适应全球经济中迅速变化着的商业情况。开发、布署应用程序的传统方法,无法满足大多数IT部门的需求。
开发应用程序的传统方法不足的方面是什么呢?那就是劳动生产率水平不高。首先,传统的应用程序,没有给自己提供代码重用的能力。所以,不得不重新编写数量非常可观的代码段,才能适应新的应用程序。第二,许多研究已经表明:在客户-服务器的配置中布署应用程序,已经造成这些应用程序拥有成本的增长非常巨大。升级和维护客户-服务器应用程序,也是非常昂贵的任务。为了解决这些问题,越来越多的IT公司使用基于组件的开发方式开发新的应用程序,而且用网络计算模型布署这些应用程序。使用这些技术,有许多明显优势。
这份白皮书将讨论为什么公司正在使用基于组件的开发方式,以及如何在Oracle环境中开发和布署基于企业级JavaBean的应用程序。
企业级JavaBean (EJB) 是一种基于组件的分布式计算架构。企业级JavaBean 是面向事务的分布式企业应用程序组件。这份白皮书,是Oracle的Java技术白皮书的一部分,它描述了Oracle的Java虚拟机的架构和编程模型。
这份白皮书分成五部分:
讨论为什么基于组件的开发方法正在成为开发新应用程序的首选方法。它探讨了在加速基于组件开发方法被采用的过程中,Java所扮演的角色。
有关方面重要内容的概述:Oracle 8i的集成Java虚拟机,Oracle JServer,Oracle8i如何支持两种不同组件编程方法, CORBA和企业级JavaBean,用大规模和可靠的方式布署 Java应用程序。
描述了如何在Oracle8i 服务器中布署企业级JavaBean 。大体叙述了在Oracle数据库里开发、打包和布署EJB所必需的步骤。
探讨了Java和SQL间的互操作性,以及组件如何访问来自Oracle数据库的持久数据。
最后,探讨使用企业级JavaBean的好处,特别是在Oracle8i 服务器里布署它们的好处。
基于组件的开发
制造业在很久以前,就学会了组装产品生产的好处:把预先造好的产品组装起来,而不用从头开始一一制作部件。PC产业成功背后的一个原因,就是它拥有了现成的、能够轻松插在一起的组件,廉价地生产桌面计算机的能力。
可以用任何技术制作组件,有助于找到更多低成本、高质量的产品。使用预先制作、测试好的组件,还有助于减少产品面市的时间。这个概念同样适用于软件。基于组件的软件开发提供了许多好处,它使应用程序的开发更具有生产率:
*更好的设计和代码重用 - 允许用户重用商业逻辑。与在类级上重用应用程序相比,做成可重用组件,能更加有效地表达面向服务器的商业逻辑。
*更容易维护 - 改进了应用程序。因为它们在结构上划分成为具有简洁接口的可重用模块。
*更容易跨层布署 - 简化了布署的操作。因为组件能够透明地分布到多层环境里的网络服务器上。这为布署提供了显著的灵活性。
虽然软件业界做过多次尝试,但是,直到最近,用预先编制好的组件组装商业应用程序的承诺,仍然没有实现。面向对象的编程语言承诺了许多重用性,但是却在实现上失败了,因为它无法保证组件在二进制级上的互操作性。但是,开发人员能用预先制作好的组件组装应用程序的希望,重新燃了起来。组件技术,例如JavaBean、CORBA和微软的COM,提供了新的基础架构,让开发人员能够把不同开发商开发的组件组装成应用程序。
在过去的几年里,我们已经目睹了客户端组件的迅速增长。JavaBean和COM组件已经被广泛地用于组装基于GUI的应用程序。许多厂商为开发人员提供了工具,使用Bean或ActiveX控件,帮助开发人员迅速地组装客户端应用程序。但是,仍然缺少健壮的、大规模的服务器端组件模型。
服务器组件封装了能够布署在不同服务器的商业逻辑。组件提供服务,例如事务、安全、以及管理组件所需的消息传递。服务器组件很容易适应不断变化的商业规则,为了取得高可用性和规模性,跨越多种服务器进行布署。与客户端组件不同,服务器端组件使开发人员能够迅速地、用预先造好的组件组装起企业应用程序。这些组件典型地是事务性的,它们需要在某种服务器环境中运行,这种服务器环境能够扩大规模,满足今天关键任务应用程序提出的富有挑战性的需求。
有三种用于服务器端组件的模型正在迅速流行起来:
*企业级JavaBean (EJB) - 一种跨平台的Java服务器端组件模型。企业级JavaBean 扩展了JavaBean 架构,提供了分布式组件架构。它允许开发人员把精力集中在开发商业逻辑上,把它们打包成组件,组件可以透明地布署在支持EJB平台的服务器里。利用会话管理、远程调用、事务、安全性和多线程,开发人员无需顾虑低级的系统编程问题。EJB 还让开发人员能够在一个平台上开发应用程序,不必担心如何布署EJB以及在哪里布署EJB。
CORBA - CORBA是对象管理小组(OMG)建议的一种基于标准的组件模型。它支持的开发环境,适于建立、布署、开发那些具有跨平台互操作能力的分布式对象应用程序。CORBA 对象用OMG的Internet Inter-ORB协议(IIOP)进行通信,IIOB是在Internet、intranet和企业计算环境中运行的分布式对象间通信的标准。*CORBA 组件用不同的语言编写,运行在不同的平台上,彼此之间能够透明地通信和互操作。
*分布式组件对象模型 (DCOM) - 微软为Windows平台建立的专用的分布式对象模型。DCOM 扩展了微软的 COM 组件模型,它建立的组件,可以跨越网络,在桌面上相互操作。
这三种组件模型都依赖于基于多层、分布式对象的应用程序的开发和布署。在这份白皮书里,我们将介绍,如何在Oracle8i 数据库服务器里开发和布署EJB。
ORACLE JServer 虚拟机
Java的承诺:“一次编写,处处运行”,使它成为开发、布署intranet/Internet 应用程序的首选语言。超过400个应用程序已经被证实为是100%的纯Java应用程序。 Java使网络计算解决方案能够运行得更简单、成本更低,能够运行在以网络为中心的基础架构上。当Java 正在帮助IT部门降低商业应用程序的拥有成本时,由于它的高生产率,使它在应用程序开发人员当中,也成为一个非常流行的选择。除了现代、面向对象、平台无关和安全之外,Java 还提供了一个组件模型,让应用程序开发人员可以用组件建立起应用程序。目前在市场上,有多种工具可以使用,只需拖、放Javabean,就能建立起客户端 Java 应用程序。但是,迄今为止,在让服务器端应用程序利用这些强大实力方面,还没有什么进展。Java要想成功地变成服务器端应用程序的开发语言,Java 虚拟机需要具备规模性、安全性、可管理性和高可用性。
用于企业应用程序的JAVA - 一种服务器语言
Java最初流行的起源,是因为它具有以applet的形式,给Web页增加动态内容的能力。但是,Java 正在迅速地朝着它未来的主要用途(编写能够在客户-服务器环境或intranet/Interne环境中布署的企业和Internet 应用程序)进化发展着。许多因素解释了为什么Java会作为服务器语言而流行。
Java是一种安全的语言,所以,非常适合进行数据库集成。数据库是一个安全的环境,给多个关键任务应用程序提供基础。所以,Oracle不允许在数据库内运行危害数据库完整性的应用程序代码(用C编写的代码)。Java 是一种强类型语言,本身就支持数组和字符串,同时具有内置的内存管理支持。内建在Java语言里的垃圾搜集机制,把开发人员从分配、回收内存的工作解放出来,由此消除了内存崩溃和内存漏露的问题。
除了安全,Java 还使多层环境里真正的应用程序分区成为可能。因为Java 是与平台无关的,所以用Java开发的应用程序逻辑,能够布署到任何支持Java的服务器上。用Java编写的应用程序,不必重新编写,就能容易地在另外一台服务器上使用。企业利用这些好处,可以提高产品的上市时间,降低系统开发和管理的成本。
虽然Java是开发企业和Internet 应用程序的理想语言,但是目前在市场上,还没有企业级的Java 服务器。多数的服务器端 Java 应用程序在JavaSoft的Java 虚拟机或它的变体里运行。JavaSoft 的Java 虚拟机是作为客户端虚拟机开发的,它侧重于单用户环境。它不是为了运行企业应用程序而设计的,而且它也不能满足企业服务器的要求。它使用内置的多线程机制,提供了很有限的规模性。它不提供布署企业应用程序所必需的高性能、规模性、健壮性和高可用性。客户端虚拟机由于下面一些原因,无法扩大规模:
*单一对象内存 - 所有的对象,都是用一种“对象内存“类型建立的,所以,需要用垃圾搜集器进行扫描,这样做降低了性能,造成很差的规模性。
*通过线程达到的多用户规模 - JDK Java 虚拟机使用轻量级线程达到了多用户的规模。当并发用户的数量变得非常巨大,超过10,000时,这种模型就没有办法很好地扩大规模。
*动态编译 - Java 是一种解释语言,所以速度很慢。许多厂商已经努力提高Java程序的性能,采用了智能优化和即时编译(JIT)(只在执行前才编译字节码)等技术。由于 JIT 编译器在每次浏览器下载类的时候编译类,所以提供的性能提高很有限。
JIT 编译器的侧重点是快速编译技术。JIT对应用程序编译后的性能,重视较少。而且,这些优化在服务器环境下,作用发挥得不是很好,因为在服务器环境下,多数需要优化的代码,更多地是在布署阶段之前。在这种情况下,可以用粗线(coarse-grained)优化来提高性能,这超出了JIT编译器的作用范围。
实现一个大规模的Java 虚拟机是一项挑战,因为它不得不处理自动存储管理、多线程、动态装入等问题。Oracle Jserver的Java 虚拟机符合Sun的 Java 规范,它为布署企业和Internet Java 应用程序提供了最好的类服务器平台。
Oracle Jserver 的虚拟机设计,有下列特性:
*高性能 - 用于事务处理和决策支持应用程序
*规模性 - 支持非常巨大的用户数量
*高可用性 - 满足企业和Internet 应用程序提出的24 x 365 可用性需求
*可管理性 - 降低总拥有成本,提供高服务质量
*符合标准 - 任何标准的Java 程序都能布署在数据库里
随着Oracle8i 的发行,Oracle发布了Oracle JServer 虚拟机,这是一个服务器端的Java 虚拟机,它与JavaSoft规范100%兼容。它满足了布署服务器端关键任务应用程序的需求:一个大规模的、高可用的、易于管理的、安全的和高性能的Java虚拟机。使用Oracle Jserver,用Java开发商业逻辑,在大规模的Java平台上布署程序,公司就能真正认识到Java真正的强大实力。Oracle JServer 虚拟机运行在数据库引掣里 (图 1),赋予开发人员以多种编程模型建立应用程序的灵活性。虽然应用程序开发人员仍然可以使用传统的存储过程开发应用程序逻辑,但是熟悉基于组件的编程方法的开发人员,可以把应用程序写成CORBA对象,或者写成企业级JavaBean,然后在Oracle的 Java 平台上布署它们。
Java 也适合独立软件开发商(ISV)们编写的全新的软件类别,在Internet上提供大量的新服务。Oracle的企业 Java 平台将为这样的应用程序提供理想的布署载体,保证给Oracle的客户提供可供使用的最广泛的应用程序解决方案。
使用Oracle Jserver进行基于组件的开发
开发人员可以用两种不同的组件模型在Oracle8i Java 虚拟机里开发和布署 Java 应用程序。
CORBA
第一个:熟悉CORBA编程的开发人员可以用Java把商业逻辑开发成CORBA 对象,并把它们布署在Oracle8i 服务器里。因为数据库具有内嵌的Java ORB 和IIOP 解释器,所以可以把 Oracle8i 服务器作为大规模布署CORBA对象的基础架构。数据库支持各种不同的CORBA 客户,其中包括对浏览器的直接支持,比如Netscape 4.0,还直接支持中间层ORB。
由于布署在服务器上的CORBA 对象,运行在SQL和PL/SQL相同地址空间里,所以它们能够无缝地互操作,而且能有效率地访问SQL数据,中间不必经过任何网络迂回。
企业级JavaBean
另一个在Java程序员中占统治地位的组件模型是企业级JavaBean。带有Oracle JServer的Oracle8i支持标准的EJB 1.0 规范,但是Oracle提供了大量数据库方面的特殊功能,保证了它的实现是快速、大规模的和安全的。下面是企业级JavaBean的一些突出特性:
*高级抽象 - 企业级JavaBean比CORBA提供更高级的抽象,但却不要求开发人员具有高级的系统编程技能。
*无需外部IDL - 企业级JavaBean 对于Java开发人员来说是最简单的,因为它具有纯Java的定义,这就免除了象CORBA和DCOM一样的对系统的依赖性。Java开发人员无需学习其它接口定义语言(IDL),就能定义他们所开发组件的接口。
*在容器内执行 - EJB 在容器里执行。简单地说,容器提供了一个操作系统进程,或者线程,组件在容器提供的进程或线程里执行。客户组件通常在某种可视容器(例如窗体或Web页)里执行。服务器组件不是可视的,它运行的容器,由应用程序执行环境提供。应用程序执行环境是指:事务处理(TP)监视器,Web服务器或数据库系统。
*宣告式的编程模型 - EJB 拥有一种简单的宣告式事务模型,它允许用户以宣告的方式指定事务的边界。在执行JavaBean的方法时,它们自动发生。
*跨服务器的移植 - 另外,EJB能够跨Java虚拟机移植。EJB事务服务器的概念,允许平台厂商用规模性、可靠性及原子事务的形式,给平台增加价值。
为了支持基于组件的编程,Oracle 在Oracle8i 发行版里集成了两个主要的组件:
遵循CORBA 2.0 规范的Java 对象请求中介(ORB)
扩展了面向SQL的侦听器/调度器架构,现在支持CORBA/IIOP。ORB 仅仅被用于IIOP 协议的互操作和对象激活,而数据库的多线程服务器 (MTS)内核,则为提供规模性进行了调整。MTS 架构以前已经得到证实,可以提供数十万并发用户的规模性。所以,我们的目标是在一个现有的、大规模的基础架构上,支持开放系统的Java API。Java ORB让用户可以使用CORBA的IIOP协议访问数据库服务器。可以用行业标准的IIOP协议调用在Oracle8i 数据库里布署的CORBA对象。调用之后,数据库服务器的行为,就象是CORBA 服务器。同样,来自数据的IIOP呼出(callout),使数据库可以充当标准的CORBA 客户并调用另一台服务器里的CORBA 对象。而且,RDBMS里的CORBA 设备,都是Java友好的设备,带有大量的自动化工具,例如自动的 “Caffeine” Java-到-IDL 编译器。
具有特别作用的对象适配器
数据库支持一个特别的对象适配器,它是为持久CORBA对象实现的。它充当了发布在RDMBS里的所有CORBA对象的目录,负责查找和激活CORBA 对象,并提供访问控制。关于如何在Oracle8i 服务器里实现CORBA对象的详细内容,会在另一份白皮书里介绍。