




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
外文原文CHAPTER9WRITINGCONTAINERMANAGEDPERSISTENTENTITYBEANSINCHAPTER8,WEWROTEABEANMANAGEDPERSISTENTENTITYBEANREPRESENTINGABANKACCOUNTINTHISCHAPTER,WELLSEEHOWTHINGSCHANGEWHENWEMOVETOACONTAINERMANAGEDMODELWITHCONTAINERMANAGEDPERSISTENCE,YOUDONTIMPLEMENTANYPERSISTENCELOGICINTHEENTITYBEANITSELFRATHER,THEEJBCONTAINERPERFORMSSTORAGEOPERATIONSFORYOUASYOUWILLSEE,THISGREATLYSIMPLIFIESBEANDEVELOPMENTBEFOREREADINGTHISCHAPTER,YOUSHOULDBEFAMILIARWITHTHEENTITYBEANCONCEPTSWECOVEREDINCHAPTER7CONTAINERMANAGEDFIELDSACONTAINERMANAGEDPERSISTENTENTITYBEANALLOWSTHECONTAINERTOHANDLESOMEORALLOFITSDATAACCESSLOGICRATHERTHANCODINGJDBCORSQL/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,SHOULDUSEJAVAREFLECTIONORTHEEQUIVALENTTOFIGUREOUTWHETHERYOURDEPLOYMENTDESCRIPTORDOESINDEEDMAPTOYOURCONTAINERMANAGEDFIELDSITCANALSOCHECKTHINGSSUCHASWHETHERYOURPRIMARYKEYFIELDSAREASUBSETOFYOURCONTAINERMANAGEDFIELDS中文翻譯第9章編寫容器管理持久性實體BEAN第8章中,我們寫了一個BEAN來管理持久性實體BEAN來表示銀行戶口。在這一章中,我們將看到當我們移動一個容器管理模式時會有怎樣的變化。用容器管理持久化,使你不必在實體BEAN中執(zhí)行任何持久性邏輯,反之,EJB容器為你執(zhí)行存儲操作。你會看到,這極大地簡化了BEAN的開發(fā)。在學習本章前,你應該熟悉我們在第7章中講述的實體BEAN概念。容器管理作用域一個容器管理的持久性實體BEAN,讓容器處理一些或所有的數(shù)據(jù)訪問邏輯。與編碼使用JDBC或SQL/J操作你的BEAN類不同,你的容器在后臺執(zhí)行了所有的數(shù)據(jù)庫操作。使用容器管理持久化,你必須在你的實體BEAN類中做出一些的公有訪問的作用域,使容器在它執(zhí)行數(shù)據(jù)庫操作時你的BEAN能夠設置訪問各個作用域。你想使用持久性操作的作用域,被稱作容器管理作用域。你不必擔心如何設置這些作用域當EJB容器執(zhí)行存儲操作時,EJB容器將自動在后臺為你操縱這些作用域。一個容器管理作用域的約束,是每個你想使用容器管理的作用域必須遵循JAVA對象序列化的規(guī)則(我們在附錄A中完整的說明了這些規(guī)則)。這意味著原始類型,如DOUBLE型和布爾型,以及SERIALIZABLE類中的主鍵類或EJB處理其他實體BEAN時,可以使用容器管理作用域。舉例來說,以下是我們在第8章中我們的銀行帳戶實體BEAN類的部分代碼使用容器管理持久化,容器能夠為你在后臺持續(xù)上述每個作用域。當保存你的BEAN的實例對象的作用域時,容器負責為這些作用域的值來檢查你的BEAN的實例。當向你的BEAN的實例對象中載入數(shù)據(jù)時,容器設置這些作用域。這很可能是因為每一個作用域都被聲明為PUBLIC。當然,你還必須告知容器應該操控哪些作用域。你在你的BEAN的部署描述符中詳細說明這一點。EJB容器會檢查部署描述符,斷定操控你的實體BEAN的哪個作用域。注意不是BEAN內(nèi)的所有作用域都必須由容器管理。你可以手動的從一個次級來源中引入數(shù)據(jù),或者你有合適的作用域。EJB容器在持久化操作時會自動通知你的BEAN類,允許你來管理這些作用域的操作。主鍵類與BEAN管理的持久化相同,容器管理持久化指令時你的主鍵類必須被SERIALIZABLE。由于EJB容器會操作你的主鍵,你如何寫自己的主鍵類也有了新的限制。最主要的限制是你主鍵中的作用域必須來自已經(jīng)聲明的由容器管理的你的實體BEAN的作用域。我們前面所述。這項限制允許EJB容器設置,以及提取,你的實體BEAN的主鍵作用域。舉例來說,我們第8章的銀行賬戶的主鍵類這是一個容器管理持久化的有效的主鍵類,因為它是可序列化的,并且是從我們BEAN類的容器管理作用域而來的公有的作用域。為容器管理持久化執(zhí)行準則你的實體BEAN執(zhí)行方法應該與容器管理持久性實體不同。不再是你為你的BEAN控制程序持久化操作,有許多方法可以為空容器會為你完成這些方法。表91是你在每個方法里應該實現(xiàn)什么的一個概要,假定你的實體BEAN的持久性,是由容器管理的?,F(xiàn)在快速掃視圖91。正如你從表中所看到的,許多數(shù)據(jù)庫加強器操作在范圍上已明顯降低。,當你讀完這一章中的代碼或當你編寫你自己的實體BAN類時,你應該參考著對照表91。該方法的順序非常概略模型的列出了我們曾在第7章末尾看到的一個實體BEAN實例的控制流的生命周期。容器管理持久化舉例一個生產(chǎn)線讓我們來看一個在實際中容器管理持久化的快速演示,應用這一概念的一個產(chǎn)品線。如果你為一家制造某種產(chǎn)品的公司工作,你的公司的生產(chǎn)線是一組由你的公司生產(chǎn)的產(chǎn)品。例如,如果你是一個家電公司,你可能會生產(chǎn)洗碗機,爐灶和烘干機。如果你是一個電腦硬件公司,你可能會生產(chǎn)內(nèi)存,硬盤和處理器。我們將要使用一個實體BEAN模仿一個普通的產(chǎn)品,并使用容器管理持久化。我們的生產(chǎn)線的對象模型,詳見圖91。讓我們來看看每個我們必須為我們的實體BEAN構(gòu)成創(chuàng)建的文件。PRODUCTJAVAPRODUCTJAVA指定了我們的遠程接口,見源代碼91。我們的遠程接口與第八章中的銀行賬戶中的遠程接口十分相似。它擁有修改實體BEAN實例作用域并拋出接口異常來顯示系統(tǒng)級的錯誤的方法。PRODUCTHOMEJAVA接下來,我們分析產(chǎn)品的主接口,PRODUCTHOMEJAVA,見源代碼92。我們的主接口定義了一個單一的CREATE方法在數(shù)據(jù)庫中創(chuàng)建一個新產(chǎn)品。它返回一個產(chǎn)品的EJB對象,使客戶端可以操縱實體BEAN數(shù)據(jù),并拋出一個JAVAXEJBCREATEEXCEPTION顯示一個應用級問題。我們還給出各種搜索方法來查找現(xiàn)有的產(chǎn)品。一些查找方法返回一個單一的EJB對象,而另一些返回一個JAVAUTILENUMERATION來枚舉多個EJB對象。如果搜索方法找到一個以上匹配的對象這個方法是非常必要的。注意FINDBYPRIMARYKEY方法應該永遠不會返回一個枚舉,因為主鍵必須是唯一的。PRODUCTPKJAVA我們的主鍵類由PRODUCTPKJAVA定義,見源代碼93。在我們的銀行賬戶中,我們的主鍵是一個簡單的字符串。正如我們設定的我們對我們的主鍵的值有相應的限制。我們的主鍵作用域來自由容器管理的作用域的實體BEAN類,并作為容器管理的持久化單元的必要部分。特別是,我們的主鍵代表一個產(chǎn)品的ID字符串(如一個產(chǎn)品SKU編號)。PRODUCTBEANJAVA接下來,我們來看我們?nèi)萜鞴芾韺嶓wBEAN的執(zhí)行,PRODUCTBEANJAVA,見源代碼94。這個BEAN比我們的銀行賬戶的例子復雜得多。我們已經(jīng)定義了許多搜索方法,并且我們有四個持久性作用域。然而盡管我們已經(jīng)添加這一切的復雜性,我們的BEAN卻是我們的銀行賬戶BEAN大小的40。這是一個對代碼的復雜性了不起的減少。因為我們的BEAN中沒有數(shù)據(jù)庫代碼,我們減少了在我們的BEAN中出現(xiàn)BUG的可能,這應歸于用戶錯誤處理與JDBC的代碼。這樣可以節(jié)省巨大的開發(fā)和測試時間。我們有4個容器管理的作用域,都是PUBLIC作用范圍。這樣容器可以操縱他們。我們的EJBCREATE方法向已通過進入系統(tǒng)的客戶端參數(shù),簡單地設定我們的容器管理作用域。EJB容器將提取這些作用域,并為我們從數(shù)據(jù)庫中提取數(shù)據(jù)。注意,我們EJBCREATE方法并不返回一個主鍵,因為EJB容器已經(jīng)為我們執(zhí)行了這樣的操作。我們BEAN中其余的只是空的方法和注釋。這些幾乎沒有邏輯可言。我們的BEAN類只是數(shù)據(jù)與一些存取器方法。CLIENTJAVA我們的客戶端代碼是一套簡單測試案例,用來測試我們的BEAN,見源代碼95。我們執(zhí)行一個JNDI查找獲得有效的對象并創(chuàng)造一些實體BEAN數(shù)據(jù)。然后,我們嘗試一系列的搜索方法。我們可以通過循環(huán)調(diào)用搜索方法返回編號并可以對每個EJB的對象調(diào)用業(yè)務方法。最后,我們在我們創(chuàng)造的FINALLY子句中銷毀所有EJB對象。部署描述符我們現(xiàn)在需要編寫我們的部署描述符。除了界定標準實體BEAN作用域,我們現(xiàn)在還需要通知容器我們公共的容器管理作用域。部署描述符列在表92中。注意,我們不再有任何JDBC的明確應用性能,因為我們已經(jīng)向容器具體化數(shù)據(jù)庫的所有行為。除上述部署描述符,我們需要告訴容器到底履行持久化操作。這是一個容器管理持久化的交替使用你依然需要定義持久化規(guī)則,而不只是把他們添加到你使用JDBC或SQL/J編寫的BEAN中。如果你使用的是關系數(shù)據(jù)存儲,你需要嚴格定義如何把你的實體BEAN的公共作用域映射到數(shù)據(jù)庫。因此,我們必須定義一系列的關系對象映射到實體。這些實體把實體BEAN作用域映射到關系型數(shù)據(jù)庫的字段。該EJB容器(在此我們使用的是BEA公司的WEBLOGIC)在向數(shù)據(jù)庫存儲或從數(shù)據(jù)庫中讀取我們的容器管理作用域時將利用這個映射。注意,這是這個特殊EJB容器的特性一些EJB的容器支持對象數(shù)據(jù)庫,并因此將不會有一個二維關系型數(shù)據(jù)庫的映射。查詢你的EJB容器文檔可以獲取更多信息。我們使用BEA公司的WEBLOGICSERVER的生產(chǎn)線持久化的實體,列在表93中。我們還需要指定實現(xiàn)的是我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 裝修成本培訓
- 超聲波清洗工藝
- 律所民法典培訓
- 子宮頸腫瘤教學
- 秘書入職培訓
- 電廠安全教育
- 留守女童保護培訓課件
- 中醫(yī)護理學:病因病機
- 擔當力培訓課件
- 中醫(yī)內(nèi)科心衰診療要點
- 個人墊付資金協(xié)議書
- 核磁共振與DSA融合技術的臨床應用-全面剖析
- 2025春季學期國開電大??啤秱€人與團隊管理》一平臺在線形考(形考任務3)試題及答案
- JJG 1-1999 國家檢定校準 規(guī)范
- 2024年中國資源循環(huán)集團有限公司招聘筆試真題
- 腫瘤患者全程健康管理
- 能源設備的使用和維護指南
- 美國特殊教育介紹
- 腹股溝疝嵌頓病人的護理
- T-NBSES 007-2024 化工過程安全緊急泄放、旁路設施大氣污染管控技術指南
- 2025年江蘇省職業(yè)院校技能大賽高職組(導游服務)參考試題庫資料及答案
評論
0/150
提交評論