|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难j2ee|数据上月的“探险者”专栏先容了用于数据耐久性的J2EE手艺:实体bean、JDBC和Java数据对象(JavaDataObject,JDO)。本月,企业Java专家KyleGabhart不再专门会商对照成熟的JDBC手艺和EJB手艺,而是次要先容JDO。只管这类手艺与别的手艺比拟还不成熟,但您会发明JDO有一些举世无双的长处。
使用程序组件应完成针对企业服务的哀求。要完成这些哀求,使用程序组件经常必需变动底层数据存储的形态。这些变动相对不克不及损坏耐久数据存储的完全性。(在有关数据耐久性的第一篇文章中,我们将耐久数据存储界说为自力的数据资本库,即便在服务器溃散或收集失利时,这个数据资本库也能回护个中的数据。)为了确坚持久性,使用程序组件必需能处置并发性、毗连办理、数据完全性和同步。J2EE的三种数据办理手艺都能为开辟职员处置这些功效,只不外每种手艺都有本人的处置办法。
上月我们切磋了实体bean和JDBC的优弱点。本月,我们将检察Java数据对象怎样与无形态会话bean组合,和该办理计划怎样与尺度实体bean使用程序举行对照。因为JDO还是一种相称新的手艺(最新的J2EE耐久性办理计划),以是我们将起首概述其事情道理。
JDO概述
久长以来,Java使用程序和耐久数据办理之间的干系一向是不简单处置的。很多耐久性机制以干系的办法而不是面向对象办法存储数据。即,数据存储在由包括字段的纪录构成的表中,而不是存储为自包括对象(这些对象具有外部数据和对别的对象的援用,而别的对象也具有外部数据和援用)。将面向对象的暗示转换成干系暗示一向就很贫苦、易堕落且会下降使用程序功能。直到比来,多数几个实质上长短干系型的耐久性机制(比方SQLBLOB和Java序列化)利用起来也很贫苦。年夜多半耐久性机制闪开发职员卖力处置耐久性,或利用非Java言语(比方SQL)与后端数据存储举行互相感化。
JDO的长处在于它很复杂。开辟职员利用Java言语耐久存储对象实例并从存储器检索实例。处置逻辑、同步和妨碍转移等均被通明地处置。开辟职员无需利用SQL或Java言语供应的方便的序列化机制,只利用POJO(无格局一般Java对象)便可,使用JDO接口将对象援用传送到存储器中并从存储器检索对象援用。
J2EE耐久性手艺
实体bean供应强健的数据耐久性。bean容器处置数据完全性、资本办理和并发性功效的尽年夜部合作作,从而闪开发职员专注于营业逻辑和数据处置,而不用思索这些初级其余细节。利用Bean办理的耐久性(BeanManagedPersistence,BMP)实体bean,开辟职员编写耐久性代码,但由容器断定什么时候实行该代码。利用容器办理的耐久性(ContainerManagedPersistence,CMP)实体bean,容器天生耐久性代码,并办理耐久性逻辑。
JDBC在预会话bean组应时能够供应简单的EJB开辟和与平台有关的部署,而且没有EJB手艺中罕见的资本利用和内存开支。与BMP实体bean相似,这一办理计划请求开辟职员编写耐久性代码。与BMPbean分歧的是,它还请求开辟职员编写耐久性逻辑。因而,开辟职员就要卖力断定什么时候使数据耐久保留到数据存储和什么时候从数据存储装进数据。
Java数据对象(JDO)是最新的耐久性机制。JDO供应了面向对象的耐久数据存储。开辟职员可使用POJO(无格局一般Java对象)来装进和存储耐久数据。
JDO还接纳了良多JDBC利用的初级系统布局。它利用一种可拔出的系统布局,在这一系统布局中,开辟职员将本人的代码编写成尺度接口集(JDOAPI),而供给商供应这些接口的完成。这同意利用JDO接口的使用程序“拔出”任何撑持JDOAPI的数据存储。和JDBC一样,这可使移植简单,并增进各供给商之间的合作,从而发生更好的产物,由于供给商会力图供应更无效且功效更壮大的完成。
会话bean和JDO
会话bean是任何兼并了EJB手艺的J2EE系统布局的基干。关于无形态会话bean特别云云。正如之前会商的,无形态会话bean的不乱性和可展望性使其出格合适于办理耐久的企业数据。
可是会话bean自己不克不及会见耐久数据存储。它们必需与别的手艺(照实体bean、JDBC或JDO)相分离以创立一种耐久数据办理机制。将会话bean与JDO分离相似于将它们与JDBC分离,但JDO是以更面向对象且更以Java为中央的概念处置该成绩的。
功效壮大的组合
经由过程向EJB容器哀求资本办理器毗连工场,企业bean取得对内部资本的会见权。利用JDBC的EJB组件是如许做的,利用JDO的EJB组件也是如许做的。会话bean必需做的第一件事是经由过程挪用JNDI查询,取得对PersistenceManagerFactory的援用。然后从工场取得PersistenceManager实例。假如会话bean正在利用容器办理的事件,那末每一个营业办法将利用工场来取得新的PersistenceManager实例,以后在加入该办法之前封闭该实例。假如利用的是bean办理的事件,那末开辟职员将断定事件的入手下手前提和停止前提。因而,能够在多个营业办法挪用中利用统一PersistenceManager实例。一样,能够在一个营业办法中翻开并办理多个事件。PersistenceManagerAPI撑持一切这些计划。
与PersistenceManager交互的JDOAPI很复杂且十分直不雅。开辟职员经由过程挪用makePersistent()办法使对象耐久。并且,这个办法特性符被重载,从而同意将各类对象范例视为耐久对象(单个对象、对象数组或对象汇合)。检索对象一样很复杂。getObjectById()办法利用由开辟职员断定的独一值(相似于主键)来区分对象实例。JDO还撑持基于范例的查询,这些查询能基于指定的范例(即,完成大众接口的子类和类)检索单个对象或对象汇合。与JDBC相似,JDO撑持基础的事件性控件:begin()、commit()和rollback(),并能指出PersistenceManager实例应当接纳悲观的仍是失望的事件办理办法。
长处
作为组合手艺办理计划,会话bean和JDO供应了很多长处,个中有些来自会话bean,而别的的来自JDO。正如我们上个月所懂得的,利用会话bean而不利用实体bean举行托付的次要长处有两个:
计划复杂。从系统布局计划的概念来看,间接经由过程会话bean来处置数据办理比利用实体bean复杂很多。
细粒度把持。由于会话bean是通用的事情程序组件,以是它们同意开辟职员对全部耐久性历程举行完整把持,包含高速缓存、耐久性、并发性和同步等。
这两个长处并非会话bean/JDO组合所独有的:会话bean与JDBC的结对也存在这两个长处。可是,JDO的确供应了一些共同的长处:
编码复杂。JDO系统布局向开辟职员埋没了初级其余耐久性细节,从而使他们专注于从营业历程的角度办理对象,不至于堕入数据耐久性逻辑的噜苏细节中。
进步的临盆力。JDO程序员能完整在面向对象的典范内操纵。这一般会使开辟更简便、更光滑且更不容易堕落,由于程序员不必在干系的头脑系统和面向对象的头脑系统之间频仍地转换。
面向对象的耐久性。JDO的面向对象实质不但进步了开辟职员临盆力,并且它还思索到比干系耐久性所供应的还要丰厚的耐久性机制。JDO其实不仅仅使Java对象耐久;它还通明地处置全部相干对象图的耐久性。因而,当实例被耐久存储时,它所保护的对别的对象实例的任何外部援用也都被耐久存储(除非它们已被声明为瞬态)。JDO还存储范例条理布局的完全信息,并能依据范例(父类和接口)完成哀求,而不是只懂得耐久实例的特定部分范例。
归纳综合起来,将会话bean与JDO分离利用能够发生三个次要长处:复杂(在计划和开辟方面)、临盆力和加强了对数据耐久性的把持。
弱点
从其长处来看,会话bean与JDO是完善的组合,能够办理一切耐久性困难!但仍是让我们思索一下这类办法的一些弱点:
JDO不成熟。JDO还处于早期。到编写本文时,JDO1.0标准的公布还不到一年。其了局是,JDO社区还十分小,最年夜且最具声威的JDO流派网站能够夸耀的也只是其会员有五千多一点。只管这些数据其实不暗示JDO是一种低劣的手艺,但它们的确标明它还处于前沿。几近没有几家公司乐意实验在营业级完成中利用JDO。一切这些近况使JDO开辟职员和架构计划师几近没有已理论证实的计划形式或案例研讨来引导他们的JDO开辟事情。
会话bean不是事件性的。J2EE客户机不克不及间接会见JDO对象。必需由servlet或会话bean处置进进哀求。因而,只管很简单将JDO对象声明为事件性的,但仍必需利用非事件性组件来会见它们。在将事件语义间接编码到会话bean的使用程序代码中时,开辟职员必需尽统统大概确保每一个功效的营业划定规矩、流程把持和事件完全性都得以保存并是容错的。只管利用容器办理的事件能够极年夜地减缓这一成绩,可是如许做限定了开辟职员对耐久性历程的把持,并撤除了很多把持事件粒度所发生的系统布局上的天真性。
归纳综合起来,会话bean和JDO的组合有两个次要弱点:与其余手艺比拟,JDO是一种未经理论证实的手艺,而会话bean向营业历程引进了固有的非事件层。
实体bean
我们已(在前一篇文章中)较具体地会商了利用实体bean的优弱点,以是这里只归纳综合与本文干系最严密的几点。
作为企业数据耐久性机制,实体bean有五个次要长处:
尺度化。EJB标准对照成熟,因此有很多上风:尽人皆知的计划形式、案例研讨和最好理论,另有丰厚的供给商撑持的开辟工具集。
容器办理的服务。EJB容器使开辟职员不用办理罕见的企业功效,如平安性、事件处置、毗连适用和内部资本办理。
通明的耐久性。实体bean为处置耐久性供应了两个通明选项。容器办理的耐久性(CMP)实体bean在容器中主动处置一切耐久性语义。bean办理的耐久性(BMP)实体bean同意开辟职员编写耐久性逻辑,但仍旧加重了确保数据完全性和并发性的义务(经由过程将这些义务分派给容器)。
事件撑持。实体bean供应了两个事件撑持模子。在CMPbean中声明事件语义。在BMPbean中,开辟职员间接完成这些语义。这两种情形中,都是容器办理事件,并断定应当提交给定的事件仍是应当回滚它。
基于组件的计划。实体bean被计划成自我包括的组件,这些组件利用部署形貌符设置,而且不必修正任何代码就能够将它们部署就任何J2EE使用程序服务器中。
另外一方面,实体bean也有四个次要弱点:
计划庞大性。容器办理的服务和主动且通明的耐久性为全部使用程序计划引进了庞大性。实体bean一般也能够经由过程会话bean来会见,这意味着每一个事件最少包括两个企业bean,而一般会更多。
构建周期很长。一个EJB周期(计划/构建/测试/集成/测试/部署)所花的工夫比可比的Java耐久性办理计划多两到三倍。
呼应工夫。实体bean与bean实例的粒度相干。因而,开辟职员一直面对选择:要末将bean按原样装进,而在其余方面办理呼应工夫长的成绩;要末将数据分化成较小的实体,从而创立更庞大的体系系统布局。
资本利用情形。实体bean损耗了大批体系资本。
归纳综合起来,实体bean得益于尺度化和业界最好理论、削减了企业开辟的一些庞大性并供应了固定的基于组件的计划。但取得这些长处所支付的价值就是实体bean一般会引进庞大性和很长的构建周期,从而使包括它们的体系计划和开辟更坚苦。实体bean还因为过分损耗资本和对年夜型实体并发哀求的呼应较慢而名誉欠佳。
几点对照
在对照任何两种手艺时,主要的是不但要思索它们的不同,还要思索它们的类似点。作为J2EE手艺,实体bean和Java数据对象有几个配合的特征。我们先会商这几个特征,随后会商每种办理计划独有的优弱点。
实体bean和JDO都有以下特性:
通明的耐久性。通明的耐久性所带来的自在是人们朝思暮想的,开辟职员不用晓得也不用体贴个中的手艺耐久性细节。JDO和实体bean都使Java程序员享用到了这一点。
可移植性。JDO和实体bean都基于与供给商有关的尺度。利用各自的尺度API编写的使用程序能够移植到分歧供给商的API完成。
天真的事件办理。JDO和实体bean都为开辟职员供应了选择:经由过程编程办理事件,仍是主动办理事件。JDO利用PersistenceManager办理事件,而实体bean将事件办理委派给了EJB容器。
在断定接纳实体bean仍是接纳JDO时,请思索这两种手艺的以下优弱点:
最好理论与计划庞大性。EnterpriseJavaBeans手艺包括丰厚的文献、已成文的计划形式和最好理论、精致的工具和大批具有EJB手艺履历的J2EE程序员。其弱点是,实体bean的庞大性使您必需使用一切这些有效资产才干确保项目乐成。针对大批的EJB手艺,架构计划师和开辟职员必需在有履历的程序员、计划形式和业界最好理论的可用性方面找到均衡。
缺少履历与复杂性。关于在最好理论方面的不敷,JDO用复杂性来填补。它很复杂且易利用,并且POJO比“实体”观点更容易于了解。只管具有实践JDO履历的Java编程专家很少,但该手艺很简单把握。相对JDO固有的复杂性,J2EE架构计划师和开辟职员必需衡量缺少形式、最好理论和案例研讨所发生的影响。
缺少旧的撑持。今朝,没有任何次要的干系数据库办理体系(RDBMS)供给商撑持JDO。因而,开辟职员必需将体系数据迁徙到撑持JDO的供给商,大概将JDO只用于其功效不依附旧RDBMS数据存储的新项目或组件。
新的耐久性典范。JDO思索到了丰厚的面向对象的耐久性机制,它充实使用了对象分解(包括别的对象的对象)及承继(经由过程完全的范例条理布局来辨认对象范例)。只管JDO的面向对象耐久性典范给使用程序开辟职员带来了很多便当,但它也使数据库办理员(DBA)悲观和狐疑。今朝JDO不供应分离存储历程的机制,因而DBA要花鼎力气进修怎样利用XML声明束缚,或怎样引导Java开辟职员如何办理数据。我们再次发明JDO更合适于新项目、新组件或现有的自力于旧RDBMS的使用程序。
资本利用情形。只管可用的功能基准测试程序十分少,但我们能够假定依附实体bean而取得通明耐久性的使用程序所损耗的服务器资本将比基于JDO的使用程序多。
停止语
在这篇J2EE探险者系列的专栏文章中,我们已完成了对数据耐久性的探求,它是Java开辟中最具有技能性的范畴之一。只管J2EE对处置数据耐久性的确供应了三种牢靠手艺,但没有一种是完善的。
多年来JDBC一向是Java开辟职员举行数据会见的尺度。它是一种固定的且已证明的手艺,同意架构计划师和开辟职员使用现有干系数据库基本布局和现有的专门手艺来发生数据库查询。跟着工夫的流逝,它已开展成能够供应完整具有高速缓存和资本池机制的完美的数据库驱动程序,很明显这使开辟职员得益颇多。作为企业耐久性手艺,JDBC还存在一些不敷,它闪开发职员或数据库卖力办理并发性和数据完全性。只管有这个弱点,可是因为其成熟性、广泛合用性和功能使它被普遍利用。
实体bean比JDBC稍欠成熟,可是它们仍对企业数据耐久性供应了牢靠的办理计划。就好像利用JDBC的情形,架构计划师和开辟职员在利用实体bean时,能使用现有的干系数据库基本布局和现有的专门手艺发生数据库查询。实体bean能够简化开辟强健数据耐久性代码的历程,由于EJB容器供应了很多性命周期企业服务,比方平安性、资本办理、事件把持和通明的耐久性。实体bean供应了功效壮大的数据耐久性办理计划,它为开辟职员通明地处置大批语义和细节。这一壮大功效和轻松的开辟所支付的价值就是实体bean是资本麋集型的,并且准确设置它很庞大,调试很坚苦。
关于J2EE阵营中较成熟但不以Java为中央的手艺,Java数据对象是一种惹人存眷的替换手艺。JDO的纯面向对象办法和计划的复杂性使把握它所需的顺应期比别的两种耐久性手艺都短。但JDO也没有JDBC或EJB手艺成熟,这招致开辟职员和架构计划师在作计划和部署决意时没法取得充足有匡助的资本。并且,关于它向Java开辟职员供应的一切易用性,JDO请求DBA作出明白答应,即为利用它必需尽快懂得全新的数据办理典范。
下个月,我们将探究企业动静传送,以此来停止对EJB手艺范畴的初次探险。到当时,但愿能康乐地探险!
作者Blog:http://blog.csdn.net/zaowei21/
相干文章
浅析对当局信息化建立熟悉的一些误区
SOA:服务架构组件化
制作支持体系的三年夜手艺
企业级软件的汗青与将来
教你在Java中完成3d编程简介
在1995年5月23日以“Java”的名称正式发布了。 |
|