




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WRITINGCONTAINERMANAGEDPERSISTENTENTITYBEANSCONTAINERMANAGEDFIELDSACONTAINERMANAGEDPERSISTENTENTITYBEANALLOWSTHECONTAINERTOHANDLESOMEORALLOFITSDATAACCESSLOGICRATHERTHANCODINGJDBCORSQL/JOPERATIONSINYOURBEANCLASS,YOURCONTAINERIMPLICITLYPERFORMSALLDATABASEOPERATIONSBEHINDTHESCENESWITHCONTAINERMANAGEDPERSISTENCE,YOUMUSTMAKESOMEOFYOURENTITYBEANCLASSSFIELDSPUBLICSOTHATTHECONTAINERCANSETTHEFIELDSWHENITPERFORMSDATABASEOPERATIONSONBEHALFOFYOURBEANTHEFIELDSTHATYOUWANTTOBEPERSISTENTARECALLEDCONTAINERMANAGEDFIELDSYOUDONTHAVETOWORRYABOUTSETTINGTHESEFIELDSTHEEJBCONTAINERWILLAUTOMATICALLYMANIPULATETHEMFORYOUBEHINDTHESCENESWHENITPERFORMSSTORAGEOPERATIONSONERESTRICTIONOFCONTAINERMANAGEDFIELDSISTHATEVERYFIELDYOUWANTTOBEMANAGEDBYTHECONTAINERMUSTFOLLOWTHERULESFORJAVAOBJECTSERIALIZATIONWEDESCRIBETHESERULESINFULLINAPPENDIXATHISMEANSTHATPRIMITIVETYPESSUCHASDOUBLESANDBOOLEANS,ASWELLASSERIALIZABLECLASSESSUCHASPRIMARYKEYCLASSESOREJBHANDLESTOOTHERENTITYBEANS,CANBECONTAINERMANAGEDFIELDSFOREXAMPLE,THEFOLLOWINGISASNIPPETOFCODEFROMOURBANKACCOUNTENTITYBEANCLASSTHATWEWROTEINCHAPTER8WITHCONTAINERMANAGEDPERSISTENCE,THECONTAINERCANPERSISTEACHOFTHESEFIELDSFORYOUBEHINDTHESCENESWHENSAVINGYOURBEANINSTANCESFIELDS,THECONTAINERISRESPONSIBLEFORQUERYINGYOURBEANINSTANCEFORTHESEFIELDVALUESWHENLOADINGDATAINTOYOURBEANINSTANCE,THECONTAINERSETSTHESEFIELDSTHISISPOSSIBLEBECAUSEEACHOFTHEFIELDSISDECLAREDASPUBLICOFCOURSE,YOUSTILLMUSTINFORMTHECONTAINERABOUTWHICHFIELDSITSHOULDMANIPULATEYOUSPECIFYTHISINYOURBEANSDEPLOYMENTDESCRIPTORTHEEJBCONTAINERWILLINSPECTTHEDEPLOYMENTDESCRIPTORTOFIGUREOUTWHICHOFYOURENTITYBEANSFIELDSTOMANIPULATENOTETHATNOTALLFIELDSWITHINTHEBEANHAVETOBEMANAGEDBYTHECONTAINERYOUMIGHTBEPULLINGDATAMANUALLYFROMASECONDARYSOURCE,ORYOUMIGHTHAVECALCULATEDFIELDSTHEEJBCONTAINERWILLAUTOMATICALLYNOTIFYYOURBEANCLASSDURINGPERSISTENTOPERATIONS,ALLOWINGYOUTOMANAGETHESEFIELDSPRIMARYKEYCLASSASWITHBEANMANAGEDPERSISTENCE,CONTAINERMANAGEDPERSISTENCEDICTATESTHATYOURPRIMARYKEYCLASSMUSTBESERIALIZABLEBECAUSETHEEJBCONTAINERWILLWORKWITHYOURPRIMARYKEY,THEREARENEWRESTRICTIONSFORHOWYOUWRITEYOURPRIMARYKEYCLASSTHEMOSTIMPORTANTRESTRICTIONISTHATTHEFIELDSYOUHAVEINYOURPRIMARYKEYMUSTCOMEFROMTHECONTAINERMANAGEDFIELDSOFYOURENTITYBEAN,WHICHWEDESCRIBEDPREVIOUSLYTHISRESTRICTIONALLOWSTHEEJBCONTAINERTOSET,ASWELLASEXTRACT,YOURENTITYBEANSPRIMARYKEYFIELDSFOREXAMPLE,TAKEOURPRIMARYKEYCLASSFROMOURCHAPTER8SBANKACCOUNTTHISISAVALIDPRIMARYKEYCLASSFORCONTAINERMANAGEDPERSISTENCEBECAUSEITSSERIALIZABLEANDBECAUSEITSPUBLICFIELDSCOMEFROMOURBEANCLASSSCONTAINERMANAGEDFIELDSIMPLEMENTATIONGUIDELINESFORCONTAINERMANAGEDPERSISTENCETHEMETHODIMPLEMENTATIONSOFYOURENTITYBEANSSHOULDBEDIFFERENTFORCONTAINERMANAGEDPERSISTENTENTITIESNOLONGERAREYOUCONTROLLINGTHEROUTINEPERSISTENTOPERATIONSOFYOURBEANS,ANDSOMANYOFTHEMETHODSCANBELEFTEMPTYTHECONTAINERWILLDOITFORYOUTABLE91ISASUMMARYOFWHATYOUSHOULDIMPLEMENTINEACHMETHOD,ASSUMINGYOURENTITYBEANSPERSISTENCEISCONTAINERMANAGEDTAKEAQUICKGLANCEATTHECHARTFORNOWASYOUCANSEEFROMTHETABLE,MANYOFTHEDATABASEINTENSIVEOPERATIONSHAVEBEENREDUCEDINSCOPESIGNIFICANTLYYOUSHOULDREFERBACKTOTHECHARTWHENREADINGTHROUGHTHECODEINTHISCHAPTERORWHENPROGRAMMINGYOUROWNENTITYBEANCLASSESTHEORDEROFMETHODSLISTEDVERYROUGHLYMODELSTHEFLOWOFCONTROLOFANENTITYBEANINSTANCESLIFECYCLETHATWESAWATTHEENDOFCHAPTER7CONTAINERMANAGEDPERSISTENCEEXAMPLEAPRODUCTLINELETSSEEAQUICKDEMONSTRATIONOFCONTAINERMANAGEDPERSISTENCEINACTION,APPLIEDTOTHECONCEPTOFAPRODUCTLINEIFYOUREWORKINGFORAPRODUCTBASEDCOMPANY,YOURCOMPANYSPRODUCTLINEISTHESUITEOFPRODUCTSYOURCOMPANYOFFERSFOREXAMPLE,IFYOUREANAPPLIANCECOMPANY,YOUMIGHTOFFERADISHWASHER,ASTOVE,ANDADRYERIFYOUREACOMPUTERHARDWARECOMPANY,YOUMIGHTOFFERMEMORY,HARDDISKS,ANDPROCESSORSWEREGOINGTOMODELAGENERICPRODUCTASANENTITYBEANTHATUSESCONTAINERMANAGEDPERSISTENCETHEOBJECTMODELFOROURPRODUCTLINEISDETAILEDINFIGURE91LETSTAKEALOOKATEACHOFTHEFILESTHATWEMUSTCREATEFOROURENTITYBEANCOMPONENTPRODUCTJAVAOURREMOTEINTERFACEISSPECIFIEDBYPRODUCTJAVA,SHOWNINSOURCE91OURREMOTEINTERFACEISVERYSIMILARTOCHAPTER8SBANKACCOUNTREMOTEINTERFACEITHASMETHODSTOMODIFYTHEENTITYBEANINSTANCESFIELDSANDTHROWSREMOTEEXCEPTIONSTOINDICATESYSTEMLEVELERRORSPRODUCTHOMEJAVANEXT,WEHAVETHEPRODUCTSHOMEINTERFACE,PRODUCTHOMEJAVA,PRESENTEDINSOURCE92OURHOMEINTERFACEDEFINESASINGLECREATEMETHODTOCREATEANEWPRODUCTINTHEDATABASEITRETURNSAPRODUCTEJBOBJECTSOTHECLIENTCANMANIPULATETHEENTITYBEANDATAANDTHROWSAJAVAXEJBCREATEEXCEPTIONTOINDICATEANAPPLICATIONLEVELPROBLEMWEALSOEXPOSEALLSORTSOFFINDERMETHODSTOFINDEXISTINGPRODUCTSSOMEOFTHEFINDERSRETURNASINGLEEJBOBJECT,WHILEOTHERSRETURNAJAVAUTILENUMERATIONOFMULTIPLEEJBOBJECTSTHISISNEEDEDIFTHEFINDERMETHODSFINDMORETHANONEMATCHINGOBJECTNOTETHATFINDBYPRIMARYKEYSHOULDNEVERRETURNANENUMERATIONBECAUSEPRIMARYKEYSMUSTBEUNIQUEPRODUCTPKJAVAOURPRIMARYKEYCLASSISDEFINEDBYPRODUCTPKJAVA,SHOWNINSOURCE93ASWITHOURBANKACCOUNT,OURPRIMARYKEYISASIMPLESTRINGANDASWEVEFOUNDOUT,THEREARERESTRICTIONSFORWHATOURPRIMARYKEYCANBEOURPRIMARYKEYFIELDSARECOMINGFROMTHECONTAINERMANAGEDFIELDSOFTHEENTITYBEANCLASS,ASISREQUIREDWITHCONTAINERMANAGEDPERSISTENCEINPARTICULAR,OURPRIMARYKEYREPRESENTSTHEIDSTRINGOFAPRODUCTSUCHASAPRODUCTSKUNUMBERPRODUCTBEANJAVANEXT,WEHAVEOURCONTAINERMANAGEDENTITYBEANIMPLEMENTATION,PRODUCTBEANJAVA,SHOWNINSOURCE94THISBEANISMORECOMPLEXTHANOURBANKACCOUNTEXAMPLEWEVEDEFINEDMANYFINDERMETHODS,ANDWEHAVEFOURPERSISTENTFIELDSYETEVENTHOUGHWEVEADDEDALLTHISCOMPLEXITY,OURBEANISLESSTHAN40PERCENTOFTHESIZEOFOURBANKACCOUNTBEANTHISISANAMAZINGREDUCTIONINCODECOMPLEXITYANDBECAUSEOURBEANHASNODATABASECODEINIT,WEHAVEREDUCEDTHECHANCEFORBUGSINOURBEANTHATWOULDBEDUETOUSERERRORWORKINGWITHJDBCCODETHISISAHUGESAVINGSINDEVELOPMENTANDTESTINGTIMEWEHAVEFOURCONTAINERMANAGEDFIELDS,ALLWITHPUBLICSCOPETHEYREPUBLICSOTHATTHECONTAINERCANMANIPULATETHEMOUREJBCREATEMETHODSIMPLYSETSOURCONTAINERMANAGEDFIELDSTOTHEPASSEDINCLIENTPARAMETERSTHEEJBCONTAINERWILLEXTRACTTHOSEFIELDSANDSETUPTHEDATABASEDATAFORUSNOTICETHATOUREJBCREATEMETHODDOESNOTRETURNAPRIMARYKEYBECAUSETHEEJBCONTAINERDOESTHATFORUSTHERESTOFOURBEANISJUSTEMPTYMETHODSANDCOMMENTSTHERESALMOSTNOLOGICATALLOURBEANCLASSISJUSTDATAWITHSOMEACCESSORMETHODSCLIENTJAVAOURCLIENTCODEISASIMPLESUITEOFTESTCASESTOTRYOUTOURBEAN,ASSHOWNINSOURCE95WEPERFORMAJNDILOOKUPTOACQUIRETHEHOMEOBJECTANDCREATESOMEENTITYBEANDATAWETHENTRYOUTACOUPLEOFFINDERMETHODSWECANLOOPTHROUGHTHEFINDERSRETURNEDNUMERATIONSANDCALLBUSINESSMETHODSONEACHEJBOBJECTWETHENDESTROYALLTHEEJBOBJECTSWECREATEDINAFINALLYCLAUSETHEDEPLOYMENTDESCRIPTORWENOWNEEDTOWRITEOURDEPLOYMENTDESCRIPTORINADDITIONTODEFININGTHESTANDARDENTITYBEANFIELDS,WENOWNEEDTOINFORMTHECONTAINERABOUTOURPUBLICCONTAINERMANAGEDFIELDSTHEDEPLOYMENTDESCRIPTORISSHOWNINTABLE92NOTICETHATWENOLONGERHAVEANYJDBCAPPLICATIONSPECIFICPROPERTIESBECAUSEWEVEEXTERNALIZEDALLDATABASEACTIVITYTOTHECONTAINERINADDITIONTOTHEDEPLOYMENTDESCRIPTOR,WENEEDTOTELLTHECONTAINEREXACTLYHOWTOPERFORMPERSISTENTOPERATIONSTHISISONETRADEOFFOFCONTAINERMANAGEDPERSISTENCEYOUSTILLNEEDTODECLAREPERSISTENTRULES,RATHERTHANCODETHEMINTOYOURBEANUSINGJDBCORSQL/JIFYOUREUSINGARELATIONALDATASTORE,YOULLNEEDTODEFINEEXACTLYHOWYOURENTITYBEANSPUBLICFIELDSMAPTOTHATDATABASETHUS,WEMUSTDEFINEASERIESOFOBJECTRELATIONALMAPPINGENTRIESTHESEENTRIESMAPENTITYBEANFIELDSTORELATIONALDATABASECOLUMNNAMESTHEEJBCONTAINERINTHISCASE,BEAWEBLOGICWILLUSETHISMAPPINGWHENSTORINGORRETRIEVINGOURCONTAINERMANAGEDFIELDSFROMTHEDATABASENOTETHATTHISISVERYEJBCONTAINERSPECIFICSOMEEJBCONTAINERSWILLSUPPORTOBJECTDATABASESANDTHUSWILLNOTHAVEAMAPPINGINTOATWODIMENSIONALRELATIONALDATABASECONSULTYOUREJBCONTAINERSDOCUMENTATIONFORMOREINFORMATIONOURPRODUCTLINESPERSISTENTENTRIESFORBEASWEBLOGICSERVERARESHOWNINTABLE93WEALSONEEDTOSPECIFYTHEIMPLEMENTATIONOFOURHOMEOBJECTSFINDERMETHODSTHISISALSO,UNFORTUNATELY,PROPRIETARYFOREACHEJBCONTAINERBEAWEBLOGICHASASIMPLESCRIPTINGLANGUAGEFORTHISPURPOSEFOREXAMPLETHECOMPLETESCRIPTISSHOWNINTABLE94THECONTAINERWILLIMPLEMENTTHISLOGIC,PERHAPSUSINGJDBCORSQL/JWHENEVERACLIENTWANTSTOEXECUTEAFINDERMETHODONTHEHOMEOBJECT,THECONTAINERWILLAUTOMATICALLYRUNTHEIMPLEMENTEDJDBCORSQL/JCODERUNNINGTHECLIENTPROGRAMTORUNTHECLIENTPROGRAM,TYPEACOMMANDSIMILARTOTHEFOLLOWINGDEPENDINGONWHATYOUREJBCONTAINERJAVANAMINGANDDIRECTORYINTERFACE,ORJNDI,INITIALIZATIONPARAMETERSARETHEINITIALIZATIONPARAMETERSAREREQUIREDBYJNDITOFINDTHEHOMEOBJECT,ASWELEARNEDINCHAPTER4SERVERSIDEOUTPUTWHENYOURUNTHECLIENT,YOUSHOULDSEESOMETHINGSIMILARTOTHEFOLLOWINGONTHESERVERSIDENOTETHATYOURPARTICULAROUTPUTMAYVARY,DUETOVARIANCESINEJBCONTAINERBEHAVIORWECREATEDANUMBEROFNEWPRODUCTSINOURCLIENTCODEFOREACHNEWPRODUCT,OUREJBCONTAINERCREATEDADEDICATEDBEANINSTANCEITDIDNTHAVETODOTHISITCOULDHAVEPASSIVATED/ACTIVATEDTHESAMEBEANANDSWITCHEDCONTEXTBETWEENCLIENTSWHENCREATINGABEAN,OURCONTAINERFIRSTCALLEDNEWINSTANCE,FOLLOWEDBYSETENTITYCONTEXT,WHICHGOTTHEBEANINTOTHEPOOLITTHENCALLEDEJBCREATE,SETUPTHEDATABASEDATA,BOUNDTHEBEANTOANEJBOBJECT,ANDFINALLYCALLEDEJBPOSTCREATEALLASEXPECTEDITTHENSERVICEDAFEWBUSINESSCALLS,INSTANTIATEDAFEWNEWBEANS,ANDOCCASIONALLYSYNCHRONIZEDTHEBEANSWITHTHEUNDERLYINGDATABASECLIENTSIDEOUTPUTFORTHECLIENTSIDE,AFTERCREATINGSOMEPRODUCTS,WEPERFORMEDAFINDFORALLPRODUCTSTHATCOST200INDEED,MULTIPLEENTITYBEANSWERERETURNEDINOURENUMERATION,ASISSHOWNBELOWPROMISESANDREALITIESBEANMANAGEDPERSISTENCEVERSUSCONTAINERMANAGEDPERSISTENCENOWTHATYOUVESEENBOTHBEANMANAGEDANDCONTAINERMANAGEDPERSISTENTENTITYBEANS,YOUMUSTBECONVINCEDTHATCONTAINERMANAGEDBEANSARETHEWAYTOGOALLTHATJDBCCODEWASELIMINATEDFROMOURBEANCLASS,SAVINGUSSIGNIFICANTDEVELOPMENTTIMEHOWEVER,THECHOICEBETWEENCONTAINERANDBEANMANAGEDPERSISTENCEISNOTNECESSARILYCLEARCUTBOTHBEANMANAGEDANDCONTAINERMANAGEDBEANSHAVEVIRTUESCONTAINERMANAGEDPERSISTENCEMAYPROMISEALOT,BUTITSCURRENTMANIFESTATIONFAILSTODELIVERONNUMEROUSCOUNTS,ABOUTWHICHYOUMUSTBEINFORMEDLETUSLOOKATTHREEPROMISES,ANDTHEREALITIESOFTHOSEPROMISES,FORCONTAINERMANAGEDPERSISTENCEPROMISECONTAINERMANAGEDPERSISTENCEREDUCESCODEIFYOUTELLTHEEJBCONTAINERACOUPLEOFTHINGSABOUTYOURBEAN,CONTAINERMANAGEDPERSISTENCECANPERFORMALLDATAACCESSLOGICFORYOUTHISREDUCESTHESIZEOFYOURBEANTREMENDOUSLYNOMOREJDBCCODEINYOURBEANSWHICHREDUCESOVERALLDEVELOPMENTTIMEREALITYDEPENDINGONYOURCONTAINER,YOUSTILLMAYNEEDTOWRITEPERSISTENTCODEWITHCONTAINERMANAGEDBEANSTHISCOULDBEGOINGTHROUGHASERIESOFWIZARDSTOSPECIFYHOWYOURENTITYBEANSMAPTOANUNDERLYINGSTOREYOUALSONEEDTOSPECIFYTHELOGICBEHINDYOURFINDERMETHODSTHEDIFFERENCEISTHATYOURDATAACCESSLOGICISNOWSPECIFIEDDECLARATIVELY,RATHERTHANBEINGWRITTENINJAVATHISDOESSIGNIFICANTLYREDUCEYOURCODESIZE,HOWEVER,ANDHASTHENICEFEATURETHATYOUCANMIGRATETONEWDATABASESCHEMASVERYQUICKLYWITHOUTCHANGINGANYSOURCECODEANOTHERCODEBENEFITRARELYMENTIONEDISTHATYOURCONTAINERCANBEVERYSMARTABOUTHOWITCACHESENTITYBEANSTATEINMEMORYADVANCEDEJBCONTAINERSSHIPWITHASHAREDOBJECTCACHE,WHICHSTORESENTITYBEANDATAINMEMORYACROSSTRANSACTIONSUSINGASHAREDOBJECTCACHE,THECONTAINERCANAVOIDUNNECESSARYEJBLOAD/EJBSTORECALLS,WHICHINCREASESTRANSACTIONALTHROUGHPUTEXPONENTIALLYNOTETHATYOUCANCACHEENTITYBEANSTATEINMEMORYUSINGBEANMANAGEDPERSISTENCEASWELL,BUTTHEBURDENOFDOINGTHISFALLSONYOUPROMISECONTAINERMANAGEDPERSISTENCEREDUCESBUGSONEBENEFITOFCONTAINERMANAGEDPERSISTENCEISTHATITELIMINATESMANYOFTHEBUGSTHATOCCURINADEPLOYMENTMOSTLYDUETOBUGGYJDBCCODETHEPROBLEMWITHJDBCCODEISTHATITSNOT“TYPESAFE”YOUCANTDETECTWHETHERITWILLWORKATCOMPILETIMEYOURJDBCSTATEMENTSARESIMPLESTRINGSTHATCANBERESOLVEDONLYATRUNTIMEBYWAYOFCOMPARISON,WITHCONTAINERMANAGEDPERSISTENCETHEEJBCONTAINERHASBEENWRITTENBYADATABASEPROFESSIONALWHOSESOLEJOBISTOMAKESURETHEGENERATEDDATABASECALLSARE,INGENERAL,ACCURATEPLUS,IFYOUASAUSERHAVESPECIFIEDANERRORPERHAPSYOUMISNAMEDACONTAINERMANAGEDFIELDINTHEDEPLOYMENTDESCRIPTOR,YOUCANDETECTERRORSATCOMPILETIMETHEWAYYOUDETECTTHESEERRORSISBYRUNNINGYOUREJBCONTAINERTOOLS,WHICH,IFTHEYREANYGOOD,SHOULDUSEJAVAREFLECTIONORTHEEQUIVALENTTOFIGUREOUTWHETHERYOURDEPLOYMENTDESCRIPTORDOESINDEEDMAPTOYOURCONTAINERMANAGEDFIELDSITCANALSOCHECKTHINGSSUCHASWHETHERYOURPRIMARYKEYFIELDSAREASUBSETOFYOURCONTAINERMANAGEDFIELDSWRITINGCONTAINERMANAGEDPERSISTENTENTITYBEANS编写容器管理持久性实体BEAN容器管理作用域一个容器管理的持久性实体BEAN,让容器处理一些或所有的数据访问逻辑。与编码使用JDBC或SQL/J操作你的BEAN类不同,你的容器在后台执行了所有的数据库操作。使用容器管理持久化,你必须在你的实体BEAN类中做出一些的公有访问的作用域,使容器在它执行数据库操作时你的BEAN能够设置访问各个作用域。你想使用持久性操作的作用域,被称作容器管理作用域。你不必担心如何设置这些作用域当EJB容器执行存储操作时,EJB容器将自动在后台为你操纵这些作用域。一个容器管理作用域的约束,是每个你想使用容器管理的作用域必须遵循JAVA对象序列化的规则(我们在附录A中完整的说明了这些规则)。这意味着原始类型,如DOUBLE型和布尔型,以及SERIALIZABLE类中的主键类或EJB处理其他实体BEAN时,可以使用容器管理作用域。举例来说,以下是我们在第8章中我们的银行帐户实体BEAN类的部分代码使用容器管理持久化,容器能够为你在后台持续上述每个作用域。当保存你的BEAN的实例对象的作用域时,容器负责为这些作用域的值来检查你的BEAN的实例。当向你的BEAN的实例对象中载入数据时,容器设置这些作用域。这很可能是因为每一个作用域都被声明为PUBLIC。当然,你还必须告知容器应该操控哪些作用域。你在你的BEAN的部署描述符中详细说明这一点。EJB容器会检查部署描述符,断定操控你的实体BEAN的哪个作用域。注意不是BEAN内的所有作用域都必须由容器管理。你可以手动的从一个次级来源中引入数据,或者你有合适的作用域。EJB容器在持久化操作时会自动通知你的BEAN类,允许你来管理这些作用域的操作。主键类与BEAN管理的持久化相同,容器管理持久化指令时你的主键类必须被SERIALIZABLE。由于EJB容器会操作你的主键,你如何写自己的主键类也有了新的限制。最主要的限制是你主键中的作用域必须来自已经声明的由容器管理的你的实体BEAN的作用域。我们前面所述。这项限制允许EJB容器设置,以及提取,你的实体BEAN的主键作用域。举例来说,我们第8章的银行账户的主键类这是一个容器管理持久化的有效的主键类,因为它是可序列化的,并且是从我们BEAN类的容器管理作用域而来的公有的作用域。为容器管理持久化执行准则你的实体BEAN执行方法应该与容器管理持久性实体不同。不再是你为你的BEAN控制程序持久化操作,有许多方法可以为空容器会为你完成这些方法。表91是你在每个方法里应该实现什么的一个概要,假定你的实体BEAN的持久性,是由容器管理的。现在快速扫视图91。正如你从表中所看到的,许多数据库加强器操作在范围上已明显降低。,当你读完这一章中的代码或当你编写你自己的实体BAN类时,你应该参考着对照表91。该方法的顺序非常概略模型的列出了我们曾在第7章末尾看到的一个实体BEAN实例的控制流的生命周期。容器管理持久化举例一个生产线让我们来看一个在实际中容器管理持久化的快速演示,应用这一概念的一个产品线。如果你为一家制造某种产品的公司工作,你的公司的生产线是一组由你的公司生产的产品。例如,如果你是一个家电公司,你可能会生产洗碗机,炉灶和烘干机。如果你是一个电脑硬件公司,你可能会生产内存,硬盘和处理器。我们将要使用一个实体BEAN模仿一个普通的产品,并使用容器管理持久化。我们的生产线的对象模型,详见图91。让我们来看看每个我们必须为我们的实体BEAN构成创建的文件。PRODUCTJAVAPRODUCTJAVA指定了我们的远程接口,见源代码91。我们的远程接口与第八章中的银行账户中的远程接口十分相似。它拥有修改实体BEAN实例作用域并抛出接口异常来显示系统级的错误的方法。PRODUCTHOMEJAVA接下来,我们分析产品的主接口,PRODUCTHOMEJAVA,见源代码92。我们的主接口定义了一个单一的CREATE方法在数据库中创建一个新产品。它返回一个产品的EJB对象,使客户端可以操纵实体BEAN数据,并抛出一个JAVAXEJBCREATEEXCEPTION显示一个应用级问题。我们还给出各种搜索方法来查找现有的产品。一些查找方法返回一个单一的EJB对象,而另一些返回一个JAVAUTILENUMERATION来枚举多个EJB对象。如果搜索方法找到一个以上匹配的对象这个方法是非常必要的。注意FINDBYPRIMARYKEY方法应该永远不会返回一个枚举,因为主键必须是唯一的。PRODUCTPKJAVA我们的主键类由PRODUCTPKJAVA定义,见源代码93。在我们的银行账户中,我们的主键是一个简单的字符串。正如我们设定的我们对我们的主键的值有相应的限制。我们的主键作用域来自由容器管理的作用域的实体BEAN类,并作为容器管理的持久化单元的必要部分。特别是,我们的主键代表一个产品的ID字符串(如一个产品SKU编号)。PRODUCTBEANJAVA接下来,我们来看我们容器管理实体BEAN的执行,PRODUCTBEANJAVA,见源代码94。这个BEAN比我们的银行账户的例子复杂得多。我们已经定义了许多搜索方法,并且我们有四个持久性作用域。然而尽管我们已经添加这一切的复杂性,我们的BEAN却是我们的银行账户BEAN大小的40。这是一个对代码的复杂性了不起的减少。因为我们的BEAN中没有数据库代码,我们减少了在我们的BEAN中出现BUG的可能,这应归于用户错误处理与JDBC的代码。这样可以节省巨大的开发和测试时间。我们有4个容器管理的作用域,都是PUBLIC作用范围。这样容器可以操纵他们。我们的EJBCREATE方法向已通过进入系统的客户端参数,简单地设定我们的容器管理作用域。EJB容器将提取这些作用域,并为我们从数据库中提取数据。注意,我们EJBCREATE方法并不返回一个主键,因为EJB容器已经为我们执行了这样的操作。我们BEAN中其余的只是空的方法和注释。这些几乎没有逻辑可言。我们的BEAN类只是数据与一些存取器方法。CLIENTJAVA我们的客户端代码是一套简单测试案例,用来测试我们的BEAN,见源代码95。我们执行一个JNDI查找获得有效的对象并创造一些实体BEAN数据。然后,我们尝试一系列的搜索方法。我们可以通过循环调用搜索方法返回编号并可以对每个EJB的对象调用业务方法。最后,我们在我们创造的FINALLY子句中销毁所有EJB对象。部署描述符我们现在需要编写我们的部署描述符。除了界定标准实体BEAN作用域,我们现在还需要通知容器我们公共的容器管理作用域。部署描述符列在表92中。注意,我们不再有任何JDBC的明确应用性能,因为我们已经向容器具体化数据库的所有行为。除上述部署描述符,我们需要告诉容器到底履行持久化操作。这是一个容器管理持久化的交替使用你依然需要定义持久化规则,而不只是把他们添加到你使用JDBC或SQL/J编写的BEAN中。如果你使用的是关系数据存储,你需要严格定义如何把你的实体BEAN的公共作用域映射到数据库。因此,我们必须定义一系列的关系对象映射到实体。这些实体把实体BEAN作用域映射到关系型数据库的字段。该EJB容器(在此我们使用的是BEA公司的WEBLOGIC)在向数据库存储或从数据库中读取我们的容器管理作用域时将利用这个映射。注意,这是这个特殊EJB容器的特性一些EJB的容器支持对象数据库,并因此将不会有一个二维关系型数据库的映射。查询你的EJB容器文档可以获取更多信息。我们使用BEA公司的WEBLOGICSERVER的生产线持久化的实体,列在表93中。我们还需要指定实现的是我们内部对象的查找方法。不幸的是,这也是为每个EJB容器专有的。BEA公司的WEBLOGIC有一个用于这一目的简单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仲夏促销活动策划方案
- 仿生青蛙活动方案
- 企业万圣节活动方案
- 企业人才周活动方案
- 企业全年活动方案
- 企业冰壶团建活动方案
- 企业十周年庆活动方案
- 企业咨询服务公司策划方案
- 企业基金会募捐活动方案
- 企业宣传前期活动方案
- 注塑工艺培训资料史上最全课件
- 初中数学几何1000题专项训练(含详解分析)-最新
- 《德意志意识形态》讲解课件
- 电力拖动自动控制系统-运动控制系统期末试卷附答案共6套
- 医疗器械随货同行单模版
- 康复科实习生入科教育
- 青岛市 主要片区 项目 拆迁补偿方案 链接
- Q∕GDW 11612.2-2018 低压电力线高速载波通信互联互通技术规范 第2部分:技术要求
- 《国际贸易实务》全书电子教案完整版教学设计
- JTT888-2020公共汽车类型划分及等级评定_(高清-最新)
- DR曝光参考条件
评论
0/150
提交评论