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

📄

📁 borand传奇,有关borand公司的书籍
💻
📖 第 1 页 / 共 2 页
字号:
有看到和同步处理有关的范例,难道说,可以不进行任何的处理就让两个客户端同时
存取吗?这当然不会,因为此时EJB Container就会进行管理,以STA的模式控制同步
存取,因此客户端的存取必须依序(排队)来调用Bean Instance。

这个情形也可以直接从Bean的实现程序代码中看出,例如下面的程序代码是EJB的标
准范例Entity Bean的实现程序代码。请注意,在这个Bean类别中定义了数个private
变量,并且在Bean的方法中直接存取和处理这些private变量,完全不需要考虑任何
的同步处理机制,这就是因为EJB Container一般就是使用Object Per Client的模型
以及类似COM的STA的线程控制模型。

这只是一般的EJB Container可能会使用的模型,但有一些EJB服务器提供了最佳化的
机制,可能会提供更为有效率的方式。下面的表格列出了COM/COM+和EJB在线程模型
方面的比较:

因为不同的应用程序服务器厂商实现而不同

读者必须注意的是,上表并不代表COM+是比较好的,只能说COM+提供了较多的选择,
可以让有经验的程序员调整执行效率。但是,相对地也让情形复杂了许多,而且COM+
的MTA线程模型也不容易实现。

正由于EJB功能规格会因为不同的EJB厂商实现而有不同,因此,除了前面提到的EJB 
2.0中CMP和OR Mapping会影响EJB服务器的执行效率之外,如果再结合线程模型和对
象建立的技术,那下面列出的问题是影响执行效率的重要因素:

●如何实现和控制Worker Thread。事实上这就是EJB Server中Thread Pooling的机制
●如何实现和控制EJB Bean Instance。这就是EJB Server中Object Pooling的机制

为了让EJB服务器有公平的效率比较基础,SUN定义了ECperf标准让使用者能够用来评
量各家EJB服务器的执行效率,以避免各说各话的情形。从这一点也可以看出,SUN现
在开始注重EJB服务器的执行效率因素了。

为什么我说线程模型会因为不同的EJB服务器而有不同呢?现在让我们以实例来看看
EJB服务器的行为。下图是我使用4个Delphi建立的客户端应用程序,并且使用SIDL技
术来调用Borland Application Server-BAS中的一个Stateless Session Bean的结果。
从图中可以明显地看到,即使是在有4个客户端的情形中,BAS仍然使用了MTA模式,
只建立一个Stateless Session Bean,并且让4个Worker线程同时存取,因此执行效
率非常高,使用的内存资源也非常少。

而下图则使用4个Delphi客户端应用程序调用Stateless COM+对象(使用Both线程模型),
从图中可以看到,COM+使用Object Per Client的模式,建立了4个COM+对象服务4个
客户端,虽然执行效率也非常高,但是使用的资源稍比BAS多。

接下来,再让我们讨论一下未来Microsoft的组件模型以及SUN的组件模型的演进趋势。


Data Access Technology

在未来,Microsoft和SUN的组件模型大概都会强调数据存取的技术,因为从前面讨论
的EJB 2.0 CMP的内容中我们可以知道,现在SUN已经在为对象和数据之间建立连接的
技术了,而未来的JDO技术将进一步紧密结合数据对象的观念,让程序员面对的所有
东西都是对象,不再有数据和对象不一样的观念和使用方式。

不过别以为Microsoft只会呆在原地,在PDC 2002中Microsoft已经宣示了未来ADO.NET
的发展方向。ADO.NET未来将会结合数据和组件的观念,让.NET的程序员以对象的观
念来代表数据,就像EJB中的CMP/BMP一样。如此一来,.NET的程序员可以像EJB一样
声明代表数据源中数据的数据类型,并且使用以XML格式封装的数据对映叙述器(Data 
Descriptor)来连接数据对象和数据源之中的数据。如此一来,.NET的组件模型也提升
到和EJB 2.0加上未来JDO一样的层次。

例如程序员可以定义如下的数据类型:

    public abstract class Customer {                        
      public abstract string Name{get; set;}                
      [Link(Account)] public abstract IList Accounts {get;} 
    }                                               
                                                    
    public abstract class Account {                     
      public abstract float Amount {get; set;}              
                                                
      public void CalculateTotal() {                        
        // business logic                               
      }                                             
    }                                               

并且定义上述Customer和Account之间的连接关系,这和EJB2.0中新的CMP功能一样,
然后再定义如下的对象/数据对映器,把对象和数据源连接起来,请特别注意下面
relationship的部分:

最后,程序员可以使用如下的形式通过数据对象存取数据,并且在数据对象之间自动
形成关联的关系。这非常有威力,和EJB/JDO不相上下。事实上,ADO.NET和EJB/JDO
实现的观念和想法非常类似,这是巧合还是模仿呢?基本上可以说,这两大阵营都有
互相参考对方技术的地方。

下图就是未来ADO.NET的数据对象架构,程序员只需要修改Schema Mapper就可以连接
到不同的数据源,例如MS SQL Server或是Oracle等。

除了ADO.NET的数据对象外,Microsoft也开始定义类似于EJB QL的对象查询语言,目
前暂时称为OPath。当然,我们可以进一步地讨论更为深入的组件技术问题,不过由
于篇幅的限制,就让我们以后在专门讨论技术的书籍中继续说明好了。

下图很清楚地说明了Microsoft和SUN组件模型的发展趋势。从图中,我们几乎可以知
道这两者非常类似,发展的方向也趋于一致。未来比较的因素可能是执行效率、延展
性、能够执行的平台以及开发工具的支持程度和使用的方便性吧。

综合上述内容,从最近Microsoft的COM+/.NET的推出、SUN的EJB 2.0功能规范的完成、
以及中间件厂商实现的EJB应用程序服务器来看,Microsoft似乎也已经开始采用类似
Java的虚拟执行环境以及EJB的模型来重新塑造.NET的组件模型了。COM+将逐渐退居幕
后提供系统核心服务,甚至会慢慢地消失于未来.NET的执行平台之中。不过由于.NET
的进入门槛不低,而且目前仍然有大量的原生Windows开发人员以及Windows应用程序,
因此,这个从COM组件模型完整转换到.NET的过程可能仍然需要数年之久,而COM在现
在开始的数年内仍然是Windows平台上最重要的中间件技术。

据Gartner Group的调查和估计,在2003到2004年使用EJB技术开发的Java应用系统将
占整个Java平台的40%左右,这表示EJB技术已经获得了大型企业和专业软件厂商的
认可,是企业级的组件模型。EJB 2.0必须开始增加执行效率,故此加入了Local 
Interface。此外延展性也成为EJB应用程序服务器的发展重点,因为EJB应用程序服务
器势必将承载更多的存取,以担负起企业的关键应用。因此,EJB厂商开始在EJB服务
器中切割虚拟伺服环境,并且在每一个虚拟伺服环境中执行不同的软件。例如一个虚
拟伺服环境负责执行JSP/Servlet Container,而另外的虚拟伺服环境则执行EJB 
Container等,如下图所示。这样做的好处是不但每一个Container更安全,而且应用
程序服务器的延展性将更为优秀,因为在多CPU的机器中可以分配专门的CPU给不同的
Container,并且在一个EJB服务器中可以同时执行多个EJB Container。

这里有一个很有趣的区别,那就是由于Microsoft掌握了操作系统,Microsoft可以尽
量地把.NET的虚拟执行环境移往操作系统的核心,提供更为良好的执行效率;但是由
于提供EJB的厂商没有这项优势,因此必须以更好的实现方式来开发EJB应用程序服务
器,这也是为什么SUN以ECperf这个标准来评定各家EJB应用程序服务器的执行效率的
原因。但是从目前EJB服务器的实现观念和技术看,仍然是领先于Microsoft的.NET。
不过不要小看Microsoft,虽然.NET在2002年的第一季才推出,但是Microsoft已经在
开发.NET的第2个版本了,.NET的发展步伐是很快速的。

中间件技术将会继续不断地发展下去,各种新的组件观念和实现技术也将持续地出现。
组件模型技术和中间件已逐渐取代早期的程序语言和数据库服务器,成为现在信息架
构的主导力量,Microsoft和SUN都希望成为这个领域的领导者。不过谢谢信息市场的
竞争力量,让这两家大厂都无法消灭对方,反而由于竞争的力量造成了组件模型不断
地创新,使信息人员能够持续地使用新的、更好的、更成熟的中间件技术,来实现日
趋复杂的信息系统,虽然这个学习的过程很辛苦,但这也是信息行业让人感觉到有趣
味的地方,因为你不会总觉得工作是一成不变的。

只是现在Web Service的兴起让组件模型的界限开始显得模糊了,而Web Service也是
Microsoft.NET和下一版Java JDK强调的重点功能。看起来,Web Service技术将会开
始把组件模型逐渐地转换为面向组件服务,让组件模型的决胜点从面向功能逐渐转向
面向服务。以后哪一个组件模型能够提供企业级的服务模型,将会是决定系统使用的
架构的关键点,而这个现象已经可以从一些中间件厂商最近的动作中隐约的看出。


.NET对于开发工具厂商的影响

.NET的推出,对于所有开发工具厂商而言都是一大挑战,这除了牵涉到技术层面之外,
还包含了复杂的产品定位的问题。相对于当初Windows 3.0/3.1推出时各个开发工具厂
商百家争鸣的盛况比起来,如今的.NET平台就显得逊色了许多。当然这主要的原因在
于.NET中语言不再是重点,再加上语言可以内嵌在Microsoft的Visual Studio.NET中,
这顿时让许多的开发工具厂商失去了定位以及竞争优势。如果开发工具厂商只是做一
个语言的Plug-In到Visual Studio.NET中,那将很难生存下去。

对于像Borland的Delphi、C++Builder以及Sybase的PowerBuilder而言,如何在新的
.NET环境中保持竞争优势是很重要的问题。因为在.NET中,应用程序执行环境、Common 
Language Runtime(CLR)以及.NET Framework都是由Microsoft所掌握,其他工具厂
商如何在Microsoft一手控制的环境中营造出竞争优势呢?另外在.NET中,开发工具
厂商必须把应用程序编译成Common Intermediate Language(CIL)的格式,再由JIT编
译器编译成原生机械码执行,如下图所示。

因此,如果开发工具厂商要在.NET环境中继续提供竞争产品,那至少必须在下面的三
个领域中找到答案,并且做出实际的解决方案:

■  编译器的竞争--如何把程序语言最正确且有效率地编译成CIL
■  .NET Framework的竞争--如何在.NET Framework上进行加值的工作,并且定位产
    品竞争力
■  开发工具本身功能集(Feature Set)的竞争

从编译器角度来说,由于.NET的CLR内建的Virtual Execution System(VES)支持一般
的程序语言功能,同时又提供了丰富的对象模型支持能力,以提供面向对象语言对映
到CLR的能力,因此.NET可以说是OOP-Friendly的执行环境,这非常有助于面向对象
程序语言在.NET中实现,例如对C/C++、Object Pascal等真正的OOP来说是个好消息,
而Microsoft的新语言C#就是一个好的OOP实现范例。但是对于使用脚本语言作为骨架
的开发工具(例如PowerBuilder)来说,可能就需要花上许多的功夫重新规范,以便能
够适当地使用CLR的特性。当然除了程序语言之外,如何开发出一个有效率的CLR编译
器更是开发工具厂商需要费心的地方。

在Framework方面,Microsoft的.NET Framework摆明了要和SUN的J2EE/J2SE/JEME等
竞争,而且花了许多的资源打造.NET Framework,力求能够提供给程序员最好的开发
功能。但是,对于开发工具厂商来说则是有喜有忧。一方面,Microsoft虽然提供了
良好的.NET Framework,可以减少开发工具厂商需要花费的成本;但另一方面,开发
Framework的权力掌握在Microsoft手中,特别是Microsoft也有Visual Studio.NET作
为竞争产品,因此如何定位便成了重要的问题。就我的看法,如果开发工具厂商无法
在.NET Framework上进行增值的工作,那最后仍然难逃被淘汰的命运。

即使开发工具厂商能够克服前面讨论的两个问题,最后仍然要回到产品本身的竞争力
上来。没有集成开发环境、组件架构、调试环境和高生产力,仍然无法和Visual Studio
.NET竞争。开发工具厂商不但要像以往一样提供一个集成开发环境,甚至还必须做得
比Visual Studio.NET更好、更具创意。这也不是一件容易的事情,因为这必须有突
破性的想法。例如,其中的一种可能就是再把.NET的通用性延伸,除了像.NET不把语
言的差异作为重点之外,也不把CIL产生的结果作为差异。由于CIL是一组标准的中介
信息,开发工具厂商可以继续把CIL转化为.NET、原生窗口应用程序、Linux应用程序,
甚至是移动设备上的程序代码,如下图所示。

如此一来,这种开发工具将更为广泛和实用,也是开发工具极好的竞争优势,特别是
现在仍然有许多的软件厂商需要继续开发小而快的原生窗口应用程序。

Microsoft .NET的出现不单对于Microsoft本身有重大的意义,对于窗口平台上所有
开发工具厂商和SUN都有巨大的影响。开发工具厂商正面对着从Windows推出以来最严
格的考验,这是一场生与死的竞争。对于SUN来说,.NET代表的是Microsoft正式全面
地向Java平台挑战,时间将决定JVM和CLR的胜负,而Java单一语言的通用性也将面临
.NET语言中立的考验。至于传统的窗口程序设计人员而言,也许正如"魔戒传奇"中的
哈比人一样,明知前途坎坷,仍然必须选择走向严寒的雪山或是诡谲的地道,因为目
的只有一个:在新一波的软件技术和平台中找到一条生存之路。
 

⌨️ 快捷键说明

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