翻译文献-编写bean管理持久性的实体bean_第1页
翻译文献-编写bean管理持久性的实体bean_第2页
翻译文献-编写bean管理持久性的实体bean_第3页
翻译文献-编写bean管理持久性的实体bean_第4页
翻译文献-编写bean管理持久性的实体bean_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

外文原文CHAPTER8WRITINGBEANMANAGEDPERSISTENTENTITYBEANSINCHAPTER7,WECOVEREDSOMEBASICENTITYBEANCONCEPTSWELEARNEDTHATTHEREARETWOKINDSOFENTITYBEANSBEANMANAGEDPERSISTENTANDCONTAINERMANAGEDPERSISTENTINTHISCHAPTER,WELLDEMONSTRATEHOWTOPROGRAMBEANMANAGEDPERSISTENTENTITYBEANSWHENYOUCODETHESETYPESOFENTITYBEANS,YOUMUSTPROVIDEYOUROWNDATAACCESSLOGICYOUARERESPONSIBLEFORPROVIDINGTHEIMPLEMENTATIONTOMAPYOURENTITYBEANINSTANCESTOANDFROMSTORAGETODOTHIS,YOUDTYPICALLYUSEADATABASEAPISUCHASJDBCORSQL/JTHISISINSTARKCONTRASTTOCONTAINERMANAGEDPERSISTENTENTITYBEANS,WHICHHAVETHEIRDATAACCESSHANDLEDFORTHEMBYTHEEJBCONTAINERTHISCHAPTERWILLTEACHYOUTHEBASICSOFBEANMANAGEDPERSISTENCEANDSHOWYOUHOWTOBUILDASIMPLEBEANMANAGEDENTITYBEANUSINGJDBCIMPLEMENTATIONGUIDELINESFORBEANMANAGEDPERSISTENCEINCHAPTER7,WESAWTHATALLENTITYBEANCLASSESBOTHBEANMANAGEDPERSISTENTANDCONTAINERMANAGEDPERSISTENTMUSTIMPLEMENTTHEJAVAXEJBENTITYBEANINTERFACETHISINTERFACEDEFINESCALLBACKMETHODSTHATTHECONTAINERINVOKESONYOURBEANSWHATYOUSHOULDPUTINTHESEMETHODSDEPENDSINPARTONWHETHERYOUAREUSINGBEANMANAGEDPERSISTENCEORCONTAINERMANAGEDPERSISTENCETABLE81ISASUMMARYOFWHATYOUSHOULDIMPLEMENTINEACHMETHOD,ASSUMINGYOURENTITYBEANSPERSISTENCEISBEANMANAGEDTAKEAQUICKGLANCEATTHETABLE81DESCRIPTIONSANDIMPLEMENTATIONGUIDELINESFORBEANMANAGEDPERSISTENTENTITIESCHARTFORNOWYOUSHOULDREFERBACKTOTHECHARTWHENREADINGTHROUGHTHECODEINTHISCHAPTERORWHENPROGRAMMINGYOUROWNENTITYBEANCLASSESTHEORDEROFMETHODSLISTEDVERYROUGHLYMODELSTHEFLOWOFCONTROLOFANENTITYBEANINSTANCESLIFECYCLETHATWESAWATTHEENDOFCHAPTER7BEANMANAGEDPERSISTENCEEXAMPLEABANKACCOUNTOURFIRSTEXAMPLEWILLBEASIMPLEBANKACCOUNTENTITYBEANTHISBANKACCOUNTBEANCANBEUSEDTOREPRESENTANDMANIPULATEREALBANKACCOUNTDATAINANUNDERLYINGRELATIONALDATABASETHEOBJECTMODELFOROURBANKACCOUNTISDETAILEDINFIGURE81LETSTAKEALOOKATEACHOFTHEFILESTHATWEMUSTCREATEFOROURENTITYBEANCOMPONENTFIGURE81THEBANKACCOUNTOBJECTMODELACCOUNTJAVAACCOUNTJAVAISOURENTITYBEANSREMOTEINTERFACEWHATTHECLIENTSEESITSSHOWNINSOURCE81NOTICETHATTHEACCOUNTREMOTEINTERFACEEXTENDSJAVAXEJBEJBOBJECT,WHICHALLREMOTEINTERFACESMUSTDOOURINTERFACEEXPOSESANUMBEROFMETHODSFORMANIPULATINGENTITYBEANS,SUCHASFORMAKINGDEPOSITSANDWITHDRAWALSALLOFOURMETHODSTHROWREMOTEEXCEPTIONSTOFACILITATESYSTEMLEVELCATASTROPHICSOURCE81ACCOUNTJAVAFAILURESNOTICETHATINOURWITHDRAWALMETHOD,WEALSOTHROWOUROWNCUSTOMAPPLICATIONLEVELEXCEPTION,ACCOUNTEXCEPTIONWELLDEFINETHATEXCEPTIONBITLATERACCOUNTHOMEJAVAOURHOMEINTERFACEISSPECIFIEDBYACCOUNTHOMEJAVA,SHOWNINSOURCE82SOURCE82ACCOUNTHOMEJAVACONTINUEDWEPROVIDEONEMETHODTOCREATEANEWACCOUNTTHISWILLCREATENEWDATABASEDATAREPRESENTINGABANKACCOUNTITRETURNSANEJBOBJECTTOTHECLIENTSOTHATTHECLIENTCANMANIPULATETHATNEWLYCREATEDACCOUNTNOTICETHATWETHROWTHEAPPLICATIONLEVELJAVAXEJBCREATEEXCEPTION,WHICHALLCREATEMETHODSMUSTTHROWWEALSOHAVETWOFINDERMETHODSFINDBYPRIMARYKEYSEARCHESTHEDATABASEFORABANKACCOUNTTHATALREADYEXISTSITSEARCHESBYTHEACCOUNTID,WHICHWEWILLDEFINEBELOWINACCOUNTPKJAVAWEALSOHAVEACUSTOMFINDERMETHOD,FINDBYOWNERNAME,WHICHSEARCHESTHEDATABASEFORALLBANKACCOUNTSTHATHAVETHESAMEOWNERSNAMEBECAUSEWEREUSINGBEANMANAGEDPERSISTENCEWELLNEEDTOIMPLEMENTBOTHOFTHESEFINDERMETHODSINOURENTITYBEANIMPLEMENTATIONIFWEWEREUSINGCONTAINERMANAGEDPERSISTENCE,THECONTAINERWOULDSEARCHTHEDATABASEFORUSASWITHOURCREATEMETHOD,BOTHFINDERSRETURNEJBOBJECTSSOTHATTHECLIENTCANMANIPULATETHENEWLYFOUNDBANKACCOUNTSWETHROWTHEAPPLICATIONLEVELJAVAXEJBFINDEREXCEPTION,WHICHALLFINDERSMUSTTHROWACCOUNTPKJAVAOURENTITYBEANSPRIMARYKEYCLASSISDEFINEDBYACCOUNTPKJAVA,DETAILEDINSOURCE83OURPRIMARYKEYISASIMPLESTRINGTHEACCOUNTIDSTRINGFOREXAMPLE,ANACCOUNTIDSTRINGCOULDBE“ABC1230000”THISSTRINGMUSTBEUNIQUETOITSBANKACCOUNTWERELYONTHECLIENTCODETHATCONSTRUCTSOURACCOUNTIDTOMAKESUREITSUNIQUETHEPRIMARYKEYISUSEDTOIDENTIFYEACHBANKACCOUNTUNIQUELYACCOUNTBEANJAVANEXT,WEHAVEOURENTITYBEANIMPLEMENTATIONCLASS,ACCOUNTBEANJAVAOURBEANIMPLEMENTATIONCODEISQUITELENGTHY,ANDITISDIVIDEDINTOSEVERALSECTIONSBEANMANAGEDSTATEFIELDSTHESEARETHEPERSISTABLEFIELDSOFOURENTITYBEANCLASSOURBEANINSTANCEWILLLOADANDSTORETHEDATABASEDATAINTOTHESEFIELDSSOURCE83ACCOUNTPKJAVABUSINESSLOGICMETHODSTHESEMETHODSPERFORMSERVICESFORCLIENTS,SUCHASWITHDRAWINGORDEPOSITINGINTOANACCOUNTTHEYAREEXPOSEDBYTHEREMOTEINTERFACE,ACCOUNTEJBREQUIREDMETHODSTHESEAREEJBREQUIREDMETHODSTHATTHECONTAINERWILLCALLTOMANAGEOURBEANTHEYALSOINCLUDEOURCREATORANDFINDERMETHODSDEFINEDINTHEHOMEINTERFACETHECODEISPRESENTEDINSOURCE84NOTICEHOWCUMBERSOMETHECODEISJUSTFORASIMPLEBANKACCOUNTTHISISANUNFORTUNATEDRAWBACKOFBEANMANAGEDPERSISTENCEBECAUSEYOUMUSTPROVIDEALLDATAACCESSCODENOTICETHATMOSTOFTHELOGICINOURBEANISJDBCCODEOURWITHDRAWANDDEPOSITMETHODSSIMPLYMODIFYTHEINMEMORYFIELDSOFTHEENTITYBEANINSTANCEIFTHECLIENTTRIESTOWITHDRAWFROMANEGATIVEACCOUNT,WETHROWOURCUSTOMAPPLICATIONLEVELEXCEPTION,ACCOUNTEXCEPTIONWHENEVERWEPERFORMPERSISTENTOPERATIONS,WERETRIEVEAJDBCCONNECTIONVIATHEGETCONNECTIONMETHODWEACQUIREOURENVIRONMENTINFORMATIONFROMTHEENTITYCONTEXTBYCALLINGGETENVIRONMENTWETHENUSETHATENVIRONMENTASAPARAMETERTOTHEJDBCDRIVERMANAGERSGETCONNECTIONMETHODTHISENVIRONMENTSPECIFIESTHEJDBCDRIVERSTOLOAD,VIATHEJDBCDRIVERSPROPERTYWESPECIFYTHISPROPERTYINTHESOURCE84ACCOUNTBEANJAVACONTINUESAPPLICATIONSPECIFICENVIRONMENTPROPERTIESTHATSHIPWITHOURBEAN,ASWELLSEEVERYSHORTLYWEALSOSPECIFYTHEPARTICULARDATABASETOCONNECTTOVIAAPROPERTYWECALLJDBC_URLTHISPROPERTYISPASSEDTOTHEDRIVERMANAGERASWELL,SOITKNOWSWITHWHICHDATABASETOHOOKUPINOURBANKACCOUNTEXAMPLE,WERETRIEVEOURJDBCCONNECTIONSVIATHEJDBCCALLDRIVERMANAGERGETCONNECTIONWEALSOCLOSEEACHCONNECTIONAFTEREVERYMETHODCALLTHISALLOWSOUREJBCONTAINERTOPOOLJDBCCONNECTIONSWHENTHECONNECTIONISNOTINUSE,ANOTHERBEANCANUSEOURCONNECTIONALTHOUGHTHISWORKSWITHBEAWEBLOGICSERVER,ITISNOTASTANDARD,PORTABLEWAYFORCONNECTIONPOOLINGWEBLOGICPERFORMSPOOLINGDIRECTLYBENEATHTHEJDBC10DRIVERSHELL,BUTOTHEREJBVENDORSMAYREQUIREDIFFERENTMECHANISMSFORPOOLINGDATABASECONNECTIONSCONNECTIONPOOLINGISUNFORTUNATELYNOTSPECIFIEDBYJDBC10,WHICHMEANSTHATANYENTERPRISEBEANSTHATUSEJDBC10ARENOTVERYPORTABLETHEREISALIGHTATTHEENDOFTHETUNNELTHENEWJDBC20SPECIFICATION,WHICHHASBEENFINALIZED,SUPPORTSAPORTABLEMECHANISMOFDATABASECONNECTIONPOOLINGALREADYVENDORSAREBEGINNINGTOSUPPORTJDBC20,ANDBYTHETIMEYOUREADTHIS,MOSTEVERYSERIOUSRELATIONALDATABASEVENDORSHOULDHAVEAJDBC20DRIVERTHEJAVA2PLATFORM,ENTERPRISEEDITIONJ2EESPECIFICATIONMANDATESSUPPORTOFJDBC20ASWELL,WHICHISGOODNEWSFORANYONEWRITINGTOJ2EEANDTHEEJB11SPECIFICATIONFURTHERMORE,EJB11SPECIFIESAPORTABLEWAYTORETRIEVEAJDBCDRIVERTHROUGHTHEJAVANAMINGANDDIRECTORYINTERFACEJNDI,WHICHWEDETAILINAPPENDIXDOURFINDERMETHODSUSEJDBCTOPERFORMSELECTSTATEMENTSONTHERELATIONALDATABASETOQUERYFORBANKACCOUNTRECORDSWECREATEANEWPRIMARYKEYCLASSFORTHEDATAWEFIND,ANDWERETURNTHEPRIMARYKEYTOTHECONTAINERTHECONTAINERWILLTHENINSTANTIATEEJBOBJECTSTHATMATCHEACHPRIMARYKEY,SOTHATTHECLIENTSCANSTARTWORKINGWITHTHEDATATOCREATEANEWBANKACCOUNT,THECLIENTCALLSCREATEONTHEHOMEOBJECT,WHICHCALLSOUREJBCREATEANDEJBPOSTCREATEMETHODSNOTICETHATWEINSERTSOMEDATAINTOTHEDATABASEUSINGJDBCINEJBCREATEWEALSOASSIGNOURMEMBERVARIABLESTHEDATAPASSEDINFROMTHECLIENTWEDONTNEEDTOUSEEJBPOSTCREATEFORANYTHINGOURENTITYBEANISNOWASSOCIATEDWITHSOMESPECIFICDATABASEDATAANDISASSOCIATEDWITHACLIENTSPECIFICEJBOBJECTNOTICETHATWEDONTHOLDANYBEANINDEPENDENTRESOURCES,SOOURSETENTITYCONTEXTANDUNSETENTITYCONTEXTMETHODSAREFAIRLYBAREBONEDWEALSODONTHOLDANYBEANSPECIFICRESOURCES,SOOUREJBPASSIVATEANDEJBACTIVATEMETHODSAREEMPTYWHENTHECONTAINERSYNCHRONIZESOURBEANWITHTHEDATABASE,THEEJBLOADANDEJBSTOREMETHODSPERFORMJDBCPERSISTENCE,THUSKEEPINGEVERYONESDATAINSYNCHNOTICETHATEJBLOADACQUIRESTHEPRIMARYKEYVIAAGETPRIMARYKEYCALLTOTHEENTITYCONTEXTTHISISHOWITFIGURESOUTWHATDATATOLOADJDBCCANBEVERYTOUGHTODEBUGDUETOINCOMPATIBILITIESBETWEENDATABASESITSMUCHEASIERTODEBUGJDBCIFYOULOGWHATJDBCISDOINGBEHINDTHESCENESTODOTHIS,SEETHECOMMENTEDCODEINTHEGETCONNECTIONMETHODOFACCOUNTBEANJAVASIMPLYUNCOMMENTTHOSELINESTOENABLELOGGINGACCOUNTEXCEPTIONJAVAOURCUSTOMEXCEPTIONCLASSISACCOUNTEXCEPTIONJAVA,DISPLAYEDINSOURCE85ITSIMPLYDELEGATESTOTHEPARENTJAVALANGEXCEPTIONCLASSITSSTILLUSEFULTODEFINEOUROWNCUSTOMEXCEPTIONCLASS,HOWEVER,SOTHATWECANDISTINGUISHBETWEENAPROBLEMWITHOURBANKACCOUNTCOMPONENT,ANDAPROBLEMWITHANOTHERPARTOFADEPLOYEDSYSTEMSOURCE85ACCOUNTEXCEPTIONJAVACLIENTJAVAOURLASTJAVAFILEISASIMPLETESTCLIENTTOEXERCISEOURBEANSMETHODSITSSHOWNINSOURCE86THECLIENTCODEISFAIRLYSELFEXPLANATORYWEPERFORMSOMEBANKACCOUNTOPERATIONSINTHETRYBLOCKWEHAVEAFINALLYCLAUSETOMAKESUREOURBANKACCOUNTISPROPERLYDELETEDAFTERWARD,REGARDLESSOFANYEXCEPTIONSTHATMAYHAVEBEENTHROWNTHEDEPLOYMENTDESCRIPTORNOW,LETSTAKEALOOKATOURDEPLOYMENTDESCRIPTORTHEDEPLOYMENTDESCRIPTORSFORENTITYBEANSARESLIGHTLYDIFFERENTFROMTHOSEFORTHEIRSISTERSESSIONBEANSOURDEPLOYMENTDESCRIPTORISSHOWNINTABLE82TABLE82DEPLOYMENTDESCRIPTORSETTINGSFORACCOUNTBEANTABLE82ILLUSTRATESATYPICALDEPLOYMENTDESCRIPTORFORABEANMANAGEDPERSISTENTENTITYBEANNOTICETHATWEHAVETWONEWFIELDSTHATWEDONOTHAVEFORSESSIONBEANSTHEPRIMARYKEYCLASSNAMEIDENTIFIESTHEJAVACLASSFOROURPRIMARYKEYSESSIONBEANSDONOTHAVEPRIMARYKEYSBECAUSETHEYARENOTPERSISTENTTHECONTAINERMANAGEDFIELDSENTRYSPECIFIESWHATFIELDSOFYOURENTITYBEANCLASSAREPERSISTENTFIELDSTHISAPPLIESONLYTOCONTAINERMANAGEDPERSISTENTENTITYBEANSDESCRIBEDINCHAPTER9,ANDITSHOULDBELEFTBLANKWHENUSINGBEANMANAGEDPERSISTENCEENVIRONMENTPROPERTIESNEXT,WEHAVEOURBEANSCUSTOMENVIRONMENTPROPERTIESTHESEENVIRONMENTPROPERTIESALLOWCONSUMERSOFYOURBEANTOTUNEYOURBEANSFUNCTIONALITYWITHOUTTOUCHINGYOURBEANSSOURCECODESHOWNORIGINALLYINCHAPTER6OURBEANCLASSRETRIEVESTHESEPROPERTIESVIAENTITYCONTEXTGETENVIRONMENTTHEPROPERTIESARESHOWNINTABLE83NOTICETHATWEREUSINGENTERPRISEBEANENVIRONMENTPROPERTIESTOSPECIFYJDBCINITIALIZATIONINFORMATIONTHISENABLESACONSUMEROFOURBEANTOUSETHEDATABASEOFHISORHERCHOICEWITHOUTMODIFYINGOURBEANCODETHEPARTICULARJDBCSETTINGSYOUUSEWILLVARYDEPENDINGONYOURCONFIGURATIONCONSULTYOURDATABASEDOCUMENTATIONORJDBCDRIVERDOCUMENTATIONFORMOREDETAILSTHEJDBC_URLSETTINGISPASSEDTOTHEDRIVERMANAGERTOLOCATETHEPROPERDATABASETHEJDBCDRIVERSSETTINGISPASSEDTOTHEDRIVERMANAGERTOLOCATETHEPROPERJDBCDRIVERSETTINGUPTHEDATABASELASTLY,YOUNEEDTOCREATETHEAPPROPRIATEDATABASETABLEANDCOLUMNSFOROURBANKACCOUNTSYOUCANDOTHISTHROUGHYOURDATABASESGUIORCOMMANDLINEINTERFACETHEBOOKSINCLUDEDCDROMCOMESWITHAPRECONFIGUREDSAMPLEDATABASETHATYOUCANUSERIGHTAWAYIFYOUREUSINGADIFFERENTDATABASE,YOUTABLE83ENVIRONMENTPROPERTIESFORACCOUNTBEANSHOULDENTERTHEFOLLOWINGSQLDATADEFINITIONLANGUAGEDDLSTATEMENTSINYOURDATABASESSQLINTERFACETHISCREATESANEMPTYTABLEOFBANKACCOUNTSTHEFIRSTCOLUMNISTHEBANKACCOUNTIDTHEPRIMARYKEY,THESECONDCOLUMNISTHEBANKACCOUNTOWNERSNAME,ANDTHETHIRDCOLUMNISTHEBANKACCOUNTBALANCERUNNINGTHECLIENTPROGRAMSERVERSIDEOTORUNTHECLIENTPROGRAM,TYPEACOMMANDSIMILARTOTHEFOLLOWINGDEPENDINGONWHATYOUREJBCONTAINERSJAVANAMINGANDDIRECTORYINTERFACEJNDICONNECTIONPARAMETERSARESEEYOURCONTAINERSDOCUMENTATIONTHEINITIALIZATIONPARAMETERSAREREQUIREDBYJNDITOFINDTHEHOMEOBJECT,ASWELEARNEDINCHAPTER4UTPUTWHENYOURUNTHECLIENT,YOUSHOULDSEESOMETHINGSIMILARTOTHEFOLLOWINGONTHESERVERSIDENOTETHATYOURPARTICULAROUTPUTMAYVARY,DUETOVARIANCESINEJBCONTAINERBEHAVIORNOTICEWHATSHAPPENINGHEREWHENOURCLIENTCODECALLEDCREATEONTHEHOMEOBJECT,THECONTAINERCREATEDANENTITYBEANINSTANCETHECONTAINERFIRSTCALLEDNEWINSTANCEANDSETENTITYCONTEXTTOGETTHEENTITYBEANINTOTHEAVAILABLEPOOLOFENTITYBEANSTHECONTAINERTHENSERVICEDOURCLIENTSCREATEMETHODBYTAKINGTHATBEANOUTOFTHEPOOLITCALLEDTHEBEANINSTANCESEJBCREATEMETHOD,WHICHCREATEDSOMENEWDATABASEDATA,ANDRETURNEDCONTROLBACKTOTHECONTAINERFINALLY,THECONTAINERASSOCIATEDTHEBEANINSTANCEWITHANEWEJBOBJECTANDRETURNEDTHATEJBOBJECTTOTHECLIENTTOSERVICEOURFINDERMETHOD,THECONTAINERINSTANTIATEDANOTHERENTITYBEANTHECONTAINERCALLEDNEWINSTANCEANDTHENSETENTITYCONTEXTTOGETTHATNEWBEANINSTANCEINTOTHEAVAILABLEPOOLOFENTITYBEANSITTHENUSEDTHEBEANINTHEPOOLTOSERVICEOURFINDERMETHODNOTETHATTHEBEANINSTANCEISSTILLINTHEPOOLANDCOULDSERVICEANYNUMBEROFFINDERMETHODSINADDITIONTOTHEMETHODSTHATTHECLIENTCALLS,OUREJBCONTAINERINTERLEAVEDAFEWEJBSTOREANDEJBLOADCALLSTOKEEPTHEDATABASEINSYNCHTESTINGJDBCDATABASEWORKPROBABLYTHEMOSTFRUSTRATINGPARTOFANAPPLICATIONISDOINGTHEDATABASEWORKOFTENYOUWILLHAVEPUNCTUATIONERRORSORMISSPELLINGS,WHICHARETOUGHTODEBUGWHENPERFORMINGJDBCTHISISBECAUSEYOURJDBCQUERIESARENOTCOMPILEDTHEYAREINTERPRETEDATRUNTIME,SOYOUDONTGETTHENIFTYTHINGSLIKETYPECHECKINGTHATTHEJAVALANGUAGEGIVESYOUYOUAREBASICALLYATTHEMERCYOFTHEJDBCDRIVERITMAYORMAYNOTGIVEYOUUSEFULFEEDBACKYOUMIGHTCONSIDERUSINGSQL/JINSTEADOFJDBCSQL/JPRECOMPILESYOURSQLCODE,ANDYOUDONTHAVETOWRITEALLTHEPREPARESANDJDBCCONNECTIONCODEYOUJUSTWRITEEMBEDDEDSQLCODESQL/JISAVAILABLEWITHORACLECORPORATIONSORACLEDATABASEANDWITHIBMSDB2DATABASEWHENPERFORMINGANYKINDOFDATABASEWORK,THEBESTWAYTODEBUGISTOSETUPASIMPLETESTDATABASEIFYOURQUERIESARENOTFUNCTIONINGPROPERLY,TRYDUPLICATINGANDRUNNINGTHEMAGAINSTYOURDATABASEUSINGYOURDATABASESDIRECTINTERFACETHISSHOULDHELPYOUTRACKDOWNYOURDATABASEPROBLEMSMUCHMOREQUICKLYCLIENTSIDEOUTPUTRUNNINGTHECLIENTPROGRAMYIELDSTHEFOLLOWINGCLIENTSIDEOUTPUTWECREATEDANENTITYBEAN,DEPOSITEDINTOIT,ANDTRIEDTOWITHDRAWMORETHANWEHADTHEENTITYBEANCORRECTLYTHREWANAPPLICATIONLEVELEXCEPTIONBACKTOUSINDICATINGTHATOURBALANCEHADINSUFFICIENTFUNDSSUMMARYINTHISCHAPTER,YOUVESEENHOWTOWRITEBEANMANAGEDPERSISTENTENTITYBEANSBEANMANAGEDPERSISTENTENTITYBEANSAREUSEFULIFYOUNEEDTOCONTROLTHEUNDERLYINGDATABASEOPERATIONSYOURSELFEJBSREALADVANTAGECOMESFROMCONTAINERMANAGEDPERSISTENTENTITYBEANSCONTAINERMANAGEDPERSISTENTENTITYBEANSCANBEDEVELOPEDMUCHMORERAPIDLYBECAUSETHECONTAINERHANDLESALLDATAACCESSLOGICFORYOUTHENEXTCHAPTERCOVERSCONTAINERMANAGEDPERSISTENCE中文翻译第八章编写BEAN管理持久性的实体BEAN在第七章里,我们已经介绍了一些基本的实体BEAN概念。我们已经掌握了两种实体BEANBEAN管理持久性和容器管理持久性。这一章,我们将示范怎样使用BEAN管理持久性的实体BEAN编写程序。当你编写这样的实体BEAN代码时,你必须提供自己的数据存取逻辑。为了从存储器中映射实体BEAN实例,你需要负责提供数据来源。为此,你会代表性地使用一个数据库应用程序接口,例如JDBC或SQL/J。这与容器管理持久性实体BEAN组件形成明显的对比,使用从它们的EJB容器提供的数据存储句柄商业应用组件为其处理数据存取。这一章将讲解一些BEAN管理持久性的基础知识,以及向你展示如何应用JDBC连接方式建立一个简单的BEAN管理持久化操作的实体BEAN。81BEAN管理持久化组件处理的指导方针在第七章,我们已经了解了包括BEAN管理持久化操作和容器管理持久化操作在内的所有必须实现JAVAXEJBENTITYBEAN接口的实体BEAN类。这一接口规定了容器调用你的实体BEAN的所有返回方法。通过这些方法所能输入的信息在某种程度上取决于是否正在使用持久性组件处理或持久性容器处理持久化操作。假设你的组件是持久性组件处理持久化操作,表格81是对在每种方法中所应执行的摘要信息。快速浏览此图表。你应该在通读本章节的代码或为自己的实体组件编码时回过头来参考这张图表。我们在第七章结尾粗略的列出的方法指令代表了实体组件实例生命周期的控制流的控制方法。82持久性组件处理实例银行账户我们的第一个实例将是一个简单的银行账户实体组件。这个银行账户组件能够潜在的使用在关系数据库里声明和操作银行真正的账户数据。我们银行账户的对象模型详见图81。我们看一下实体组件必须创建的每个文件。821账户账户是客户看到的实体组件的远程接口,详见资料81。注意账户远程接口实现了商业应用组件JAVAXEJBEJBOBJECT接口,这是所有远程接口必须要实现的。我们的接口提供了一系列的方法用来操作实体组件,如标识存款和取款。所有的方法都会抛出接口异常用来表示系统级的灾难性失败。注意我们的撤回方法,我们同样抛出我们客户的应用级异常ACCOUNTEXCEPTION。我们将在稍后这个异常。822账户原置我们的本地接口用账户本地表示,见源代码82。我们提供一种方法去建立一个新的账户。这就将建立一个新的表示银行账户的数据库。它将商业应用组件技术对象返回给顾客,使顾客能够操作那个新建的账户。注意我们抛出应用级的JAVAXEJBCREATEEXCEPTION异常。所有的CREATE方法必须能够抛出这个异常。我们同样有两种定位方法。原始码定位搜索已存在的银行账户数据库,它用账户身份识别,我们将在下面的原始码定位语言中作以规定。我们还有自定义定位法物主姓名搜索,用来搜索所有同姓名的银行账户数据。因为我们正在用持久性组件处理,所以需要在实体组件设备中同时使用这两种定位方法(如果使用持久性容器处理,容器会为我们搜索数据库)。根据我们的建立方法,两种定位程序返回商业应用组件技术客体,这样,客户就能够操作新建的银行账户。823账户原始密码我们的实体组件原始码由账户原始码定义,详见83。我们的原始码是一个简单的账户身份识别串。例如,一个账户识别串为“ABC1230000”这个串是只有银行账户才有的。我们依靠客户密码建立账户身份识别以确保它是唯一的。原始码用于识别银行账户的唯一性。824账户组件接下来,我们看实体组件设备分类,账户组件。我们的组件设备代码非常长,我们将其分为几个部分(1)组件处理状态域我们的实体组件分类里有持续的场。实体组件实例将向这些场里载入并储存数据库数据。(2)业务逻辑处理方法这些方法为客户提供服务,如账户存款和取款。它们被远程接口账户所暴露。(3)业务组件处理方法商业组件应用法中容器会调用去管理组件。它们也包括原置借口中所规定的创建者和定位程序。代码见代码84。注意一个简单的银行账户,其代码是如此的烦琐。这是持久性组件处理的一个令人遗憾的缺点,因为你必须提供所有的数据存取代码。我们的组件逻辑大部分都是数据库连接代码。我们的存取款方式完全的改变了实体组件实例的存储区域。如果客户想要从一个透支的账户中取款,我们抛出自定义应用水平异常账户异常。任何时候执行持续操作,我们检索数据库连接孔获取连接法。我们通过调用获取环境的实体环境获取环境信息。然后我们将此环境作为数据库连接驱动管理器的一个参数来获取连接。这种环境指定数据库连接驱动器通过驱动性质去加载。我们在即将看到的特定环境中规定这种性质载入我们的组件。我们也规定了特定的数据库去通过道具来连接,称为数据库连接拥护要求语言。这种道具传到驱动管理器,所以它知道与哪个数据库连接。在银行账户实例中,我们检索数据库连接通道。没一个方法调用之后我们关闭各个连接。这就允许我们的容器收集数据库连接,当这个连接不在使用中,另一个组件就能够使用这个连接。尽管与东亚银行的服务器连接,它也不是连接集中合成的标准,便携式的方法。网络逻辑电路执行数据库连接10驱动外壳的直接收集合成,但是其他的厂家可能需要收集数据库连接的不同机制。遗憾的是数据库连接10无法指定连接的合成,也就是说应用数据库连接10的企业组件并不是非常方便的。已经定案的新的数据库连接20的规约提供了一种方便的数据库连接收集合成。厂家已经开始支持数据库连接20,当你读到这篇文章的时候,差不多每个厉害关系数据库厂家已经拥有一台数据库连接20驱动器。我们的定位程序使用数据库连接在相关的数据库中执行选择指令来查询银行账户记录。我们为发现的数据建立原始码,并将原始码返回到容器。容器将用具体例子说明与每个原始码匹配的客体,因此,客户就能够用数据开始工作。为了建立一个新的银行账户,我们运用数据库连接法将一些数据插入数据库中,同时指定客户输入可变数据。我们的实体组件现在与特定数据和特定客户对象连接。我们没有保留任何独立组件资源,所以实体设置和清楚是空白的。同时,我们也没有保留特殊组件资源,所以关闭和即或也是空的。当容器使组件和数据库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论