第一类:
以组件为基础的开发 vs. 存储过程
目前,“以组件为基础的编程”很快成为许多人首选的应用程序开发方案。它能将来自不
同厂商的组件有机结合到一起,允许代码重复使用,并易于维护,易于展开,易于扩展,从
而快速开发出应用程序。适合采用以组件为基础的开发模型的应用程序包括:
■ 计算密集型应用:假如一个应用程序需要进行密集的逻辑运算和算术计算,那么来自
第三方的组件,以及组件的重复利用能力,可使整个开发过程变得更加容易。
■ 复杂的多层次应用:对o r a c l e 8 i内运行的e j b和c o r b a组件来说,它们通过i i o p,可自
i n t e r n e t浏览器、c o r b a客户机以及纯j a v a客户机中方便地调用。d c o m客户机(如
microsoft transaction server上运行的visual basic应用程序)可通过一个d c o m→
c o r b a桥,方便地访问c o r b a服务器。
另外,适合采用存储过程开发的应用程序包括:
■ s q l密集型应用:存储过程与数据库高度集成,所以特别适合经常要通过s q l访问数
据的应用程序。
■ 传统双层应用:存储过程为传统双层应用程序提供一个简单、直接的编程模型。
o r a c l e 8 i内的存储过程可用一系列数据库客户机方便地访问,比如j d b c、s q l j、
o d b c、o c i和o r a c l e开发客户机等等。
第二类:
以组件开发为基础的: ejb vs. corba
e j b技术使我们能更易在一个c o r b a基础结构的顶部,构建j a v a应用程序。如同本章
“e j b的优点”一节详细讲述的那样, e j b通过覆盖一个更高级别的编程接口,从而实现对
c o r b a的引用。e j b是完全用j a v a写成的,不必使用i d l。e j b事务处理和安全策略通过声明
的方式加以指定,而不是以程序化的形式。
c o r b a对象可在需要良好粒化的功能时,进行编写。o r a c l e 8 i配套提供的c a ff e i n e(咖啡
因)工具可有效地降低用j a v a开发c o r b a服务器时牵涉到的一些复杂性。
注意尽管c o r b a对象可用任何语言写成,但只有用j a v a写成的对象,才能在
o r a c l e 8 i内展开。
第三类:
存储过程: pl/sql vs. java
p l / s q l与数据库紧密集成具有下述优点:
■ 对s q l具有自动可见性:在p l / s q l中,毋需任何条件,所有进程和函数在s q l面前都
是显露无遗的。而在j a v a中,首先必须编写对应的调用规范,发布那些希望s q l“看见”
的方法。
■ 能有效地访问s q l:在s q l密集型应用中(亦即需要频繁地读写数据表),p l / s q l的表
现比j a v a存储过程好。这是由于p l / s q l支持与s q l相同的固有数据类型。o r a c l e并未
在数据库内部直接提供对固有j a v a类型的支持。只有s q l类型和与对象相关的类型才能
保存在数据库内。因此,假如需要从一个j a v a存储过程中访问数据库, o r a c l e必须将
j a v a类型转换成s q l数据类型(反之亦然)。显然,这会造成对执行效率的影响。而且
在某些情况下,这样的转换还会造成精度的下降。
注意在j a v a存储过程中,假如随o r a c l e . s q l数据类型(而非标准j a v a类型)使用s q l
数据,那么应注意到效率和精度的提高,详情可参考第9章。但缺点在于: j a v a代码
将丧失移植类型,因为o r a c l e . s q l类型仅适用于o r a c l e。
针对i n t e r n e t及i n t r a n e t应用的开发, j a v a正在快速成为一种流行的语言。除此以外, j a v a
也正在成为存储过程开发的首选语言。对o r a c l e 8 i来说, j a v a和p l / s q l存储过程相互间是可
以“交互操作”的。因此,以前在p l / s q l代码上的投资不会被无谓地浪费掉。
下面列出一系列典型属性,正是由于它们,使得j a v a成为存储过程开发的一种最佳语言:
■ 移植能力: j a v a存储过程可在来自多家厂商的数据库间自由移植。而在另一方面,
p l / s q l仅适用于o r a c l e。从理论上说,我们可将来自另一个数据库厂商的j a v a存储过
程方便地移植到o r a c l e环境:只需在数据库内装载j a v a源码或二进制数据,然后将它们
发布给s q l就可以了。
■ 真正的面向对象支持: j a v a在设计之初,就被定义成一种真正的“面向对象”程序设
计语言。p l / s q l则不同,它最开始的时候仅仅是一种程序化的编程语言,同数据库紧
密集成,只是现在增加了部分面向对象的语言特性。
■ 丰富的库和工具支持: j a v a比p l / s q l提供了多得多的函数库,以及第三方的开发工具
支持。
■ 一种万能语言,支持所有层面的开发: j a v a是一种“万能型”语言。一种语言便可适
用于所有层面的开发:客户前端的应用程序和小程序( a p p l e t),服务器后端的服务器
小程序(s e r v l e t)和数据库存储过程等等。因此,采用j a v a编程,可有效降低培训和开
发成本。
■ 本地编译好的库:在那些计算密集型的应用程序中,以及那些包含了少量数据库读写
操作的应用程序中, j a v a存储代码的运行速度都要快于对等的p l / s q l代码。这是由于
j a v a . l a n g封装和其他s y s所有的封装是在“本地”编译好的;或者说,是“固有”的。
j a v a存储过程在调用本地编译代码时,速度当然比p l / s q l的解释型执行方式快得多!
