下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、关于本JBchilaor9TheJ2EETutorialSecondEditionProfessionalEJBCoreJ2EEPatterns:BestPracticesandDesignStrategies,SecondEditionJ2EEApplicationsandBEAWebLogicServersUML2Toolkit、SQLServer2000BibleJDBCDatabaseProgrammingwithJ2EEJavaToolsforExtremeProgramming:MasteringOpenSourceToolsIncludingAnt,Junit,andCACTUS试与JUnit实践》12本系统。这12本系统全面讲述了Java语言的各种技术。上述都是关于Java语言的一系列,可以作为本文档的参考书。用。本文档程序实例的讲述步骤是先讲述服务EJB的创建与测试,接着讲述客户端的数据类的创建,再讲述主窗二、本文档第2章:企业进、销、存管理信息系统的建模分析。第4章:企业进、销、存管理信息系统的数据结构分析。的第5章:企业进、销、存管理信息系统的项目创建与设置。应用程序的创建、Cactus测试环境的设置、EAR应用程序创建和部署,使读者能掌握企业进、销、存管理信息系统序、会计科目管理窗口程序、报表管理窗口程序、用户日志查看窗口程序、退出系统程序和基础信息模块6个互联一(一)进、销、存管理信息系统简 (一)进、销、存管理信息系统本系统可以在Windows2000、WindowsNT、WindowsXP、Linux和Unix平台应用STOCKMIS的英文全称是StockManagementInformationSystem,中文全称是进、销、存管理信息系统。(二)进、销、存管理信息系统整体 登录用户可以切换用户,。一(三)小 本软件符合IBM的CUA标准和的GUI标准本系统应用JDK1.4.0、J2EE1.3.1技术标准通口。本系统的通口由WebLogic提供(三)(四)问(一)用例图分节(二)基础信息模块活动图分 修改活动 (三)进货模块活动图分析为每张进货单,根据企业的实际情况批准进货单,订购员完成电子签名后2张进货单,一联送交供应商,一 现金账。进货退货分为3个程序,分别是订购员填写退货单程序、现金管理员收取已经付出金额程序、验收员将货物退进货会计处理分为3个程序实现,分别是审核进货会计分录程序、编写进货会计分录程序和查询进货会计分录(四)库存模块活动图分析库存盘4个程序完成,分别是库存盘点计数程序、库存盘点核查程序、盘点损失单管理程序、盘点盈收单库存会计处理分为3个程序实现,分别是审核库存会计分录程序、编写库存会计分录程序和查询库存会计分录(五)销售模块活动图分析生成会计分录的商品销售单,当用户退出窗口时,系统自动生成会计分录和将现金收入记录在现金账。销售会计处理分为3个程序实现,分别是审核销售会计分录程序、编写销售会计分录程序和查询销售会计分录程序。3个活动图与进货会计处理相同,请参考2.3.7节。(六)系统部署图二(七)小 (七)(八)问三(一)文件总结构 析析 (一)文件总结 (二)源代码的文件结构图(1)maininterface是主窗口程序的 (2)baseinforinterface是基础信息模块程序的 (3)stockinterface是进货模块程序的 (4)stockmanageinterface是库存模块程序的 stockmanagementpro是EJB源代码 user是用户类 print是打印程序的 (11)cactustest是EJB测试类的 (12)junittest是客户端测试类的 (13)servlet是Servlet程序的 (三)互联网程序的文件结构 文件是互联网程序在(四)三(五)问与 (五)问程序的备份文件如何放人 答:当用户修改程序时,JBuilder自动将程序的备份文件放入 析析如何在WebLogic服务器创建数据库联接缓冲池如何创建JNDI数据源(一)数据字典为数据类大唯主外备1**2用户3基础信息模块的用户权456索排升数据类大允许空唯主外备1**序23商品类别名4商品类别描索排升数据类大唯主外备1**2商品分类标345678规9库存上限最大库存下限最小索排升大唯主外备1**2地34简5678传9固地银备索排大唯主外备1**23位4描索排升大唯主自动增外备1**2地34简567数据类大唯主外备8传9固地银电子邮客户信用限备索排升大唯主外备1**序23会计科目名索排升数据类大允许空唯主外备1**序2操作程序名3操作内4用户名5操作时索排升值加备1**2单据类型,0表示进货订单,1表示进货退货单,2表示商品调出单,3表示商品调入单,4表示销售出库单,5表示销售退货单,6表示盘点损失单,7表示盘点盈收单,8上期转入单,9表示数量分拆调出单,10表示数量分拆调入单,11表示数量组合调出单,12表示数量组合调入单,133供应商调拔单的关联标4请购员名字商品调出用户5订购员名字调入仓库名值加备6验收员名字商品验收用户7现金管理员名8收货地9仓库名*订单日期调出日*到货日期验收日完成状态,0表示进行,1表示撤消,2表示完备索引名排序升序大小默值值唯—主加外键备1**23码45数6索引名名排序升数据类值空增备1**2单据类型,0表示前台销货单据,1表示信用销单据,2表示前台销售退货单据,3表示信用销售3客45信用销售用户名6现金管理员名789*默空增备完成状态,0表示进行,1表示撤消,2表示完备索引排序升序数据类大允许空唯主外备1**明细编2单据编34实际售5数索排升型大小默值允空唯—主键自增外键备1**2相关联的票据标3票据类型,0表示应付票据,124金5供应商名字或者客户名6开票据的用户7现金管理员名89*收款或者付款日完成状态,0表示进行,1表示撤消,2表完备索引排序升序大允许空唯主外备1**序2相关联的票据标3借贷标识,0表示借,1表示4数据类大唯主自动增外备56索排升型大小默值值唯—主键加外键备1**序2相关联的票据标3记帐用4审核用5记帐日6*审核日7完成状态,0表示进行,1表示撤消,2完8备索引排序升序型大小默值值唯—主键加外键备1**序2与accountEntryLedger数据表的联系段3借货标识,0表示借,1表示4会计科5发生金索引排序升序(二)数据表的关系分四(三)数据表的SQL创建语 表的关系是一对一关系,相关联的字段是stockLedger数据表的orderld字段、saleLedger数据表的saleld字段、currentAccountLedger数据表的linkld字段。现金账套数据表(cashLedger)与往来账套数据表(currentAccountLedger)是一对一关系,相关联的字段currentAccountLedSer数据表的currentAccountld字段和cashLedger数据表的linkld字段会计分录账套数据表(accountEntryLedger)(accountEntrySubLedger)是一对多关系,相关联的字段是accountEntryLedger数据表的serialld字段和accountEntrySubLedger数据表的linkSerialld字段。账套数据表(currentAccountLedger)是一对一关系,相关联的字段是accountEntryLedger数据表的linkld字段、stockLedger数据表的orderld字段、saleLedger数据表的saleld字段、currentAccountLedger数据表的currentAccountld其他的数据表对应关系不经常使用,将在模块编码中讲述,如商品数据表 与库存账套明细数据(三)数据表的SQL创建语本节介绍数据表的SQL创建语句CREATETABLECREATETABLEuserTableuserPasswordnvarchar(50)NOTNULL,baseInforFunctionintNOTNULL,stockFunctionintNOTNULL,stockManageFunctionintNOTNULL,saleFunctionintNOTNULL)CREATECREATETABLE(categoryIdintNOTNULLPRIMARYKEY,parentIdintNOTNULL,categoryNamenvarchar(100)NOTNULL,categoryDescriptionntextNOTNULL)CREATETABLEgoodsCREATETABLEgoodscategoryIdintNOTNULL,goodsNamenvarchar(100)NOTNULL,goodsNickNamenvarchar(50)NOTNULL,goodsAssistantNamenvarchar(10)NOTNULL,goodsPYNamenvarchar(10)NOTNULL,unitnvarchar(10)NOTNULL,specificationnvarchar(50)NOTNULL,producernvarchar(50)NOTNULL,upperLimitintNOTNULL,lowerLimitintNOTNULL,discountnumeric(18,2)NOTNULL))CREATE rrZonenvarchar(20)NOTNULL,pyCodenvarchar(10)NOTNULL,abbreviationnvarchar(20)NOTNULL,companyPhonenvarchar(15)NOTNULL,linkmannvarchar(20)NOTNULL,mobilePhonenvarchar(15)NOTNULL,faxnvarchar(15)NOTNULL,fixedPhonenvarchar(15)NOTNULL,addressnvarchar(100)NOTNULL,zipCodenvarchar(10)NOTNULL,bankNamenvarchar(50)NOTNULL,bankAccountnvarchar(50)NOTNULL,nvarchar(20)NOTNULL,homesitenvarchar(20)NOTNULL,remarkntextNOTNULL)pyCodenvarchar(10)NOTNULL,locationnvarchar(100)NOTNULL,descriptionntextNOTNULL)CREATETABLEcustomercustomerZonenvarchar(20)NOTNULL,pyCodenvarchar(10)NOTNULL,abbreviationnvarchar(20)NOTNULL,companyPhonenvarchar(15)NOTNULL,linkmannvarchar(20)NOTNULL,mobilePhonenvarchar(15)NOTNULL,faxnvarchar(15)NOTNULL,fixedPhonenvarchar(15)NOTNULL,addressnvarchar(100)NOTNULL,zipCodenvarchar(10)NOTNULL,bankNamenvarchar(50)NOTNULL,bankAccountnvarchar(50)NOTNULL,nvarchar(20)NOTNULL,homesitenvarchar(20)NOTNULL,creditlimitnumeric(18,2)NOTNULL,remarkntextNOTNULL)CREATETABLECREATETABLE(accountIdintNOTNULLPRIMARYKEY,parentIdintNOTNULL,)CREATECREATETABLEuserLogidintNOTNULLPRIMARYprogramNamenvarchar(50)NOTNULL,userNamenvarchar(50)NOTNULL,operationDatedatetimeNOT))CREATETABLECREATETABLEstockLedgerorderTypeintNOTNULL,rNamenvarchar(50)NOTNULL,submitUsernvarchar(50)NOTNULL,commitUsernvarchar(50)NOTNULL,checkUsernvarchar(50)NOTNULL,cashUsernvarchar(50)NOTNULL,addressnvarchar(100)NOTNULL,warehousenvarchar(20)NOTNULL,orderDatedatetimeNULL,stockDatedatetimeNULL,onProcessintNOTNULL,remarkntextNOT)CREATECREATETABLE(serialIdintNOTNULLPRIMARYKEY,orderIdnvarchar(20)NOTNULL,costPricenumeric(18,2)NOTNULL,tyintNOTNULL,)CREATETABLECREATETABLEsaleLedgersaleIdnvarchar(20)NOTNULLPRIMARYKEY,saleTypeintNOTNULL,customerNamenvarchar(50)NOTNULL,counterUsernvarchar(50)NOTNULL,creditUsernvarchar(50)NOTNULL,cashUsernvarchar(50)NOTNULL,addressnvarchar(100)NOTNULL,fillerDatedatetimeNOTNULL,deliveryDatedatetimeNULL,remarkntextNOT)用户可以应用程序创建新的账套数据表(请参考6.7节),账套数据表共有8个,分别是stockLedger、stockSubLedgerSaleLedgerSaleSubLedgercurrentAccountLedgercashLedgeraccountEntryLedger、(四)数据表的创建和数据导如果不熟悉SQLServer的数据库的创建,请参考《SQLServer2000Bible先选择stockmanagement数据库,选择Tools菜单→SQLQueryyzer选项打开SQL代码窗口,将CompositiveExample\stockmanagement.sql文件(应用记事本程序打开,该文件在本设计附带的程序包)的代码放人SQL代码窗口,如图所示。确认的数据库是stockmanagement,单击上的“运行”按钮,为stockmanagement数据库创建个数据表(其中有两个账套,分别是200404账套和200405账套)。本节应用stoekmanagement.mdb文件 是CompositiveExample,共有32个数据表数据打开SQLServer管理窗口,选择Tools菜单→DataTransformationServices→ImportData选项,进人数据导人本例选择Accessstockmanagement.mdb文件作为导人数据库本例选择stockmanagement作为目标数据库 保留默认的选项便可,表示立即数据库。单击“完成”按钮,便可以将stockmanagement.mdb的数据导人SQLServerstockmanagement数据库,如(五)数据库联接缓冲池的创启动WebLogic服务器,进入WebLogic在左边的结构树选择examples→Services→JDBC→ConnectionPoolsConfigureanewJDBCConnectionPool…(设置一个新的JDBC联接缓冲池),如图所示。四(六)JNDI数据源的创 上述4个步骤完成了stockmanagement数据库的联接缓冲(六)JNDI数据源的在WebLogic管理窗口内的左边结构树选择examples→Services→JDBC→TxDataSources,在右边的内容框选择ConfigureanewJDBCTxDataSource…(设置一个新的带事务处理的数据源),如图所示。(七)SQL代码,剖析了数据表创建、数据导入、数据库联接缓JNDI数据源的创建。通过本章的考查,指导老(八)问答:数据表关系不用在数据库内创建,通过SQL语句where语句实现便可答:创建数据库的联接缓冲池的作用是提高数据库的速度,要了解J2EE方面的知识,请参考《TheJ2EETutorialSecondEdition》一书。五(一)JBuilder项目创 (1如何创建进、销、存管理信息系统的JBuilder项目?(2)如何创建进、销、存管理信息系统的EJB模板?如何设置进、销、存管理信息系统的EJB模板的数据源?(5)如何设置进、销、存管理信息系统的Cactus测试环境(6)如何创建和部署EJB和互联网模板的应用程序(一)JBuilder项目 要进一步了解JBuilder的项目设置,请参考《精通JBuilder9上述3个步骤完成了StockManagementPro项目的创建(二)EJB模板的EJB的模板创建的步骤如下(Weblogic服务器,请参考《J2EEApplicationsandBEAWebLogic打开JBuilder窗口,选择Tools菜单→选择ConfigureServer选项,进入服务器的设置窗口在左边的结构树选择WebLogicApplicationServer7.x选项,勾选EnableServer复选框,单击General选项卡,在Homedirectory(主 )内选择WebLogic服务器的安装 ,其他的选项由JBuilder自动生成。①Homedirectory定义WebLogic服务器所在的路径单击Custom选项卡,进入WebLogic服务器在JBuilder①BEAhomedirectory定义BEA程序的安 ,该参数由JBuilder自动生成②JDKInstallationdirectory定义JDK1.4的安装路径⑦Listenaddress定义WebLogic服务器所在的服务器名字⑧Listenport定义WebLogic服务器所在的动选择Project菜单→ProjectProperties选项,打开项目属性框,单击Server选项卡,为项目选择WebLogic选择File菜单→New选项,单击Enterprise选项卡,双击EJBModule图标④OutputJARfile区域中的Name定义JAR文件的名字,保留默认值⑤OutputJARfile区域中的PathJAR文件的保存路径,保留默认值。单击“OK”完成EJB模板的创建。选择StockManagementEJBProperties选项,打开EJB模板设置框。取消AlwayscreateJARwhenbuildingtheproject复选项的选择,取消该复选项的作用是避免每次编译项目(Ctrl+F9)时都自动编译EJB模板,节省项目编译时间,但更新EJB后,需要选择项目面板的StockManagementEJB选项,单击鼠标右键,从弹出的快捷菜单中选择Rebuild选项重新编译EJB。(三)EJB模板数据源的设打开EJB模板,在左边的结构面板内选择DataSources节点,单击鼠标右键,从弹出的快捷菜单中选 的程序包,要进一步了解Java联接数据库方面的知识,请参考《JDBCDatabaseProgrammingwithJ2EE③URL(数据库的联接地址)的设置是“jdbc :sqlserver://localhost:1433的,如果不设置sa用户的,保留空值便可。⑥JNDIname的值是“stockManagement”,该WebLogicstockmanagementJNDI数据源,请参考4.6节。局EJB使用,当全局EJB在服务器部署时,该数据源不起作用,起作用的是stockManagement数据源。如果不能看到上述数据表,选择stockManagement节点,单击鼠标右键,从弹出的快捷菜单中选择RefreshfromDatabase选项,检查数据库设置是否正确,再重新载人数据表。选择结构面板的stockManagement节点→userTable数据表,单击鼠标右键,从弹出的快捷菜单中选择五(四)互联网应用程序的创 CMP2.0EntityBean选项该选项的作用是创建userTable数据表的全局EJB选择项目面板的StockManagementEJB选项,单击鼠标右键,从弹出的快捷菜单中选择RebuildEJB模板,生成StockManagementEJB.jar文件上述5个步骤完成了EIB模板数据源的设置,第(3)步至第(5)步的作用是创userTable数据表的全局EJB,使EIB模板可以生成StockManagementEJB.jar文件,EJB的具体应用请参考6.1节。(四)互联网应用程序打开项目StockManagementPro,选File菜单→New选项,单击Web选项卡,双击WebApplication ③BuildWAR定义互联网应用程序的编译方式,保留默认选项便可。(五)Cactus测试环境的设置CactusServlet和EJB,步骤如下(要进一步了解Cactus技术,请参考《JavaToolsforExtremeProgramming:MasteringOpenSourceToolsIncludingAnt,Junit,andCACTUS》):选择Wizard菜单→CactusSetup选项,进入Cactus测试环境的设置,Cactus②设置Cactus关联的压缩包,选择stockmanagement.war选项用是定义Cactus测试程 #定义Cactus工具应 1:#定义Servlet导向器的cactusservletRedirectorName=#定义用是定义Cactus测试程 #定义Cactus工具应 1:#定义Servlet导向器的cactusservletRedirectorName=#定义JSP导向器cactusjspRedirectorName=#定义filter导向器的cactuscactusenableLogging=true1:要成功运行Cacms客户端的程序,需要正确设置cactus.properties文件的cactus.contextURL参数 (六)EAR应用程序创建和部选择File菜单→New选项,单击Enterprise选项卡,双击EAREAR7步1步定义EAR(stockmanagementapp)EAR2步选择EJB模板如果要选择项目外的EJBJAR文件,可以单击ExternalJARFiles选项卡选择项目外的EJBJAR文件4步选择EJB的客户端程序,本例不选择任何EJB的客户端程序单击“Finish”按钮完成EAR的应用程序创建,编译EAR应用程序,生成stoekmanagementapp.ear展开EAR文件,查看其中的文件 <?xmlversion="10"encoding="UTF-<?xmlversion="10"encoding="UTF- Inc 1 suncom/dtd/application_1_3<display-name>stockmanagementapp</display-<ejb>StockManagementEJB<web-uri>stockmanagementwar</web-<context-root>stockmanagement</context-在右边的内容框内单击Configureanew ,进入EAR应用程序的部署步骤,如图所示五(六)EAR应用程序创建和部 of行最前面的机器名字,显示盘符,通过单击相应的盘符和路径,显示stockmanagementapp.ear文件,如图所单击stockmanagementapp.ear文件旁边的 examplesServer为EAR应用程序的服务器单击“ConfigureandDeploy”按钮部署EAR5—34EAR应用程序可以同时部署JAR文件和WAR网应用程序的创建、Cacms测试环境的设置、EAR应用程序创建和部署,使读者能掌握企业进、销、存管理信息系(七)问如何安装Weblogic服务器为什么要取消EJB模板的AlwayscreateJARwhenbuildingtheprject复选项的选择为什么EJBJDBCWebLogicJDBC驱动程序可答:EJB模板数据源应用的JDBC驱动程序是JDBC驱动程序包,WebLogic的数据库联接缓冲池应用的JDBC驱动程序是WebLogicJDBCJBuilder上设置数据源的作用是在本地创建一个数据数据源,使用WebLogic自带的JDBC驱动程序包建立数据库联接,所以两者的JDBC驱动程序可以不相同。(一)用户登录窗口程本节将介绍用户登录窗口程序和其涉及的全局EJB、状态EJB全局EJB和UserLogUserTable全局EJB的创建与测UserTable全局EJB的创建与测试步骤如下打开项目StockManagementPro,打EJB模板StockManagementEJB schemaname属性值必须和EJBSQL语句的数据表②Interfaces属性定义EJB的接口,local将EJB所有属性的InejbCreate值设为“true”,作用是使却ejbCreate方法包括这些属性值。是第(2)步定义 完成创建后的UserTable全局EJB6-4所示packagepackageimportjavautilpublicinterfaceUserTableHomeextendsjavaxejbEJBLocalHomepublicUserTablecreate(StringuserName,StringuserPassword,intbaseInforFunction,intstockFunction,intstockManageFunction,intsaleFunction)throwsCreateException;publicCollectionfindByUserName(StringuserName)throws packagepackageimportjavautilpublicinterfaceUserTableextendsjavaxejb{publicStringpublicStringgetUserPassword();publicvoidsetBaseInforFunction(intbaseInforFunction);publicintgetBaseInforFunction();publicintgetStockFunction();publicintgetStockManageFunction();publicintgetSaleFunction();}importjavaxejb*;publicclassUserTableBeanimplements{EntityContextpublicjavalangStringejbCreate(javalangStringjavalangStringintbaseInforFunction,intintstockManageFunction,intsaleFunction){setUserName(userName);return}publicvoidejbPostCreate(javalangStringjavalangStringintbaseInforFunction,intintstockManageFunction,intsaleFunction)CreateException}publicvoidejbRemove()throwsRemoveException} voidsetBaseInforFunction(intbaseInforFunction); voidsetStockFunction(intstockFunction); voidsetSaleFunction(intsaleFunction); javalangString intgetBaseInforFunction();intintgetSaleFunction();publicvoidejbLoad()}publicvoidejbStore()}publicvoidejbActivate()}publicvoidejbPassivate()}publicvoid{thisentityContext=}publicvoidsetEntityContext(EntityContext{thisentityContext=}}选择File菜单→New选项,打开程序创建窗口,单击Enterprise选项卡,双EJBTestClient图标,进入EJB的创建步骤,选择CactusJUnitTest单选项,表示应用Cactus技术测试EJB。 packageimportorgapachecactus*;importjavaxnaming*;importjavautilimportpackageimportorgapachecactus*;importjavaxnaming*;importjavautilimportjavarmiprivatestaticfinalStringERRORNULLREMOTE对象未定义";privatestaticfinalintMAXOUTPUTLINELENGTH=100;privatebooleanlogging=false;privateUserTableHomeuserTableHome=null;privateUserTableuserTable=null;publicTestUserTableCactus1(String{}//初始化EJBpublicvoidinitializeLocalHome()throws{Contextcontext=new}publicvoidsetUp()throws{supersetUp();}publicvoidtearDown()throws{userTableHome=null;userTable=null;super}//测试记录创建方publicvoidtestCreateUser()throwsException{StringuserName="test";StringuserPassword="test";intbaseInforFunction=0;intstockFunction=0;intstockManageFunction=0;intsaleFunction=0;//创建一条新记}//测试记录更新方publicvoidtestUpdateUser()throwsException{StringuserName="test";StringuserPassword="test1";intbaseInforFunction=1;intstockFunction=1;intstockManageFunction=1;intsaleFunction=1;//根据主键找到记录//userTablesetUserPassword(userPassword);userTablesetStockFunction(stockFunction);userTablesetSaleFunction(saleFunction);//检查更新thisassertEquals("returnvalue",userPassword,userTablegetUserPassword());thisassertEquals("returnvalue",baseInforFunction,userTablethisassertEquals("returnvalue",stockFunction,userTablegetStockFunction());thisassertEquals("returnvalue",stockManageFunction,userTable}//publicvoidtestFindByUserName()throws//查找用户名为jackif(colsize()>0){javautilIteratoriterator=coliterator();while(iteratorhasNext()){//取 接userTable=(UserTable)javaxrmiPortableRemoteObjectnarrow(iteratornext(),UserTableclass);}}}//测试记录删除方publicvoidtestDeleteUser()throwsException{StringuserName="test";//根据主键找到记录//testthisassertEquals("returnvalue",0,colsize());}}JBuilder重新编译EJB模板和EAR应用Weblogic服务器的"DeployApplication”按钮重新部署stockmanagement.war文件和StockManagementEJB.jar。EAR应用程序的部署请参考5.6节UserLog全局EJB的创建与测UserLog全局EJB的创建与测试步骤如下单中选择CreateCMP2.0EntityBean选项,创建userLog数据表的全局EJB。将EJB 将UserLogEJB所有属性的InejbCreate()值设为“true”,作用是使ejbCreate将鼠标移到EJB,单击鼠标右键,从弹出的快捷菜单中选择Add选项-*Finder选项,创建EJB寻找方法,名③Inputparamerters属性的值为空完成UserLog全局EJB的创建packagepackageimportjavautil*;importjavasql*;publicinterfaceUserLogHomeextendsjavaxejbEJBLocalHomepublicUserLogcreate(Integerid,StringprogramName,StringoperationContent,StringuserName,TimestampoperationDate)throwspublicCollectionfindAll()throwspublicCollectionfindByProgramName(StringprogramName)throwsFinderException;publicCollectionfindByUserName(StringuserName)throwsFinderException;publicUserLogfindByPrimaryKey(Integerid)throwsFinderException;}packagepackageimportjavautil*;importjavasql*;publicinterfaceUserLogextendsjavaxejb{publicIntegerpublicStringgetProgramName();publicStringgetOperationContent();publicStringgetUserName();publicTimestampgetOperationDate();}importjavaxejb*;publicimportjavaxejb*;publicclassUserLogBeanimplements{EntityContextpublicjavalangIntegerejbCreate(javalangIntegerid,javalangStringprogramName,javalangStringoperationContent,javalangStringuserName,javasqlTimestampoperationDate)throwsCreateException{returnnull;}publicvoidejbPostCreate(javalangIntegerid,javalangStringprogramName,javalangStringoperationContent,javalangStringuserName,javasqlTimestampoperationDate)throwsCreateException{}publicvoidejbRemove()throwsRemoveException} voidsetId(javalangInteger voidsetProgramName(javalangStringprogramName); voidsetOperationContent(javalangStringoperationContent); voidsetUserName(javalangStringuserName); javalangIntegergetId(); javalangStringgetProgramName(); javalangStringgetUserName(); javasqlTimestampgetOperationDate();publicvoidejbLoad(){}publicvoidejbStore()}publicvoidejbActivate()}publicvoidejbPassivate()}publicvoid{thisentityContext=}publicvoidsetEntityContext(EntityContext{thisentityContext=}}创建UserLog全局EJB的测试类TestUserLogCactus1,代码如下 package importorgapachecactus*;importjavaxnaming*;importjavasqlTimestamp;importjavautil*;privatestaticfinalStringERROR_NULL_REMOTE对象未定义";privatestaticfinalintMAX_OUTPUT_LINE_LENGTH=100;privatebooleanlogging=false;privateUserLogHomeuserLogHome=null;privateUserLoguserLog=null;publicTestUserLogCactus1(String{}//EJB初始化方publicvoidinitializeLocalHome()throws{Contextcontext=newuserLogHome=(UserLogHome)context}publicvoidsetUp()throws{supersetUp();}publicvoidtearDown()throws{userLogHome=null;userLog=null;}publicvoidtestCreateUserLog()throwsException{IntegeridnewInteger(1);StringprogramName="登陆窗口";StringoperationContent="登陆";StringuserName="jack";javautilCalendarnow=javautilCalendarjavasqlTimestampoperationDate=newjavasqlTimestamp(nowgetTime()getTime());userLogHomecreate(id,programName,operationContent,userName,operationDate);}//publicvoidtestUserLogFindAll()Exception{Collectioncol=userLogHomefindAll();thisassertEquals("",187,colsize());}//测试根据操作程序名字取得日志publicvoidtestUserLogFindByProgramName()Exception{CollectioncoluserLogHomefindByProgramName("%登陆窗口%");thisassertEquals("",106,colsize());}//测试根据操作内容取得日志记录publicvoidtestUserLogFindByOperationContent()throwsException{Collectioncol=userLogHomefindByOperationContent("%删除%");thisassertEquals2col}//测试根据用户名取得日志记录的方publicvoidtestUserLogFindByUserName()throwspublicvoidtestUserLogFindByUserName()throwsException{Collectioncol=userLogHomefindByUserName("%ame%");thisassertEquals("",23,col}//publicvoidtestUserLogFindByOperationDate()throws//javautilCalendardate=javautilCalendargetInstance();dateset(2004,4,4,0,0,0);javasqlTimestampstartDate=newjavasqlTimestamp(dategetTime()getTime());dateset(2004,4,8,23,59,59);javasqlTimestampendDate=newjavasqlTimestamp(dategetTime()getTime());Collectioncol=userLogHomefindByOperationDate(startDate,endDate);thisassertEquals("",69,col}Exception{Integerid=newInteger(1);userLogremove();}JBuilder重新编EJBEARWeblogic服务器的"DeployApplication”按钮,重新部署stockmanagement.war和StockManagementEJB.jar文件。状态EJB本节将介绍用户登录窗口程序相关的状态EJB的创建与测试,状态EJBpackageuser;1:publicclassUserimplementspackageuser;1:publicclassUserimplementsprivateStringuserName;privateStringuserPassword;privateintstockFunction;privateintsaleFunction;//用户类的构造方publicUser(StringuserName,StringuserPassword,intintstockFunction,intstockManageFunction,int{thisuserName=userName;thisbaseInforFunction=baseInforFunction;thisstockFunction=stockFunction;thisstockManageFunction=stockManageFunction;thissaleFunction=saleFunction;}return11:因为在服务端EJB之间传送的类需 }//取得用 的方publicString{return}//设置用 的方publicvoidsetUserPassword(String{thisuserPassword=}publicintgetBaseInforFunction(){return}//publicvoidsetBaseInforFunction(int{thisbaseInforFunction=}publicintgetStockFunction(){return}//publicvoidsetStockFunction(int{thisstockFunction=}return}//publicvoidsetStockManageFunction(int{thisstockManageFunction=}publicintgetSaleFunction(){return}//publicvoidsetSaleFunction(int{thissaleFunction=}}StoekManagementData状态EJB的创建与测试步骤如下 是非会话状态EJB。StockManagementDataBean是EJB的主文件,StockManagementDataHome是EJB的创建接口文件,StockManagementData是EJB的接口文件。为StockManagementData添加7个接口方法,分别是eheckUser、createUser、updateUser、deleteUser、getUserByUserName、~reateUserLog和deleteUserLog。packagepackageimportjavautil*;importjavarmi*;publicinterfaceStockManagementDataHomeextendsjavaxejbEJBHomepublicStockManagementDatacreate()throwsCreateException,}packagepackageimportjavautil*;importjavarmi*;importuser*;publicinterfaceStockManagementDataextendsjavaxejbEJBObjectpublicint[]checkUser(StringuserName,StringuserPassword)throwsRemoteException;publicintcreateUser(Useruser)throwsRemoteException;publicintupdateUser(Useruser)throwsRemoteException;publicintdeleteUser(Useruser)throwsRemoteException;publicString[][]getUserByUserName(StringuserName)throwspublicintcreateUserLog(StringprogramName,StringoperationContent,StringuserName)throwsRemoteException;publicintdeleteUserLog(Integerid)throwsRemoteException;}packagepackageimportjavaxejb*;importuser*;importjavautil*;importjavaxrmipublicclassStockManagementDataBeanimplements{SessionContextprivateUserTableHomeuserTableHome=null;privateUserTableuserTable=null;privateUserLoguserLog=null;//创建EJBpublicvoidejbCreate()throws{Contextcontext=newuserLogHome=(UserLogHome)contextlookup("UserLog");}catch(Exception}}publicvoidejbRemove()}publicvoidejbActivate()}publicvoidejbPassivate()}publicvoidsetSessionContext(SessionContext{thissessionContext=}//publicint[]checkUser(StringuserName,StringuserPassword){int[]functions=newint[4];//EJB的接//Stringname=userTable//if(nameequals(userName)&&passwordequals(userPassword)){functions[0]=userTablefunctions[1]=userTablegetStockFunction();functions[3]=userTablegetSaleFunction();}ex){functions[0]}}//创建用publicintcreateUser(User{intresult=0;usergetStockFunction(),usergetStockManageFunction(),usergetSaleFunction());result=ex){ex}}//更新用publicintupdateUser(User{intresult=0;////userTablesetUserPassword(user//更新用户权userTablesetStockFunction(usergetStockFunction());userTablesetSaleFunction(usergetSaleFunction());result=}catch(Exceptionex}}//删除用publicintdeleteUser(User{intresult=0;//result=1;ex){ex}}//根据用户名查询用publicString[][]getUserByUserName(StringString[][]detail=null;//取得用户的所有记Collectioncol=userTableHomefindByUserName("%"+userName+"%");if(colsize()>0){Iteratoriterator=col//inti=0;////取 接userTable=(UserTable)PortableRemoteObjectnarrow(iteratornext(),UserTableclass);detail[i][0]=userTablegetUserName();detail[i][2]=StringvalueOf(userTablegetBaseInforFunction());detail[i][3]=StringvalueOf(userTablegetStockFunction());detail[i][5]=StringvalueOf(userTablegetSaleFunction());}detail=new}ex){detail=newString[0][6];ex}return}//publicintcreateUserLog(StringprogramName,StringoperationContent,String{intresult=0;//创建日期 javautilCalendarnow=javautilCalendargetInstance();javasqlTimestampoperationDate=newjavasqlTimestamp(nowgetTime()getTime());//Vector集合类Integerid=null;if(colsize()>0)//narrow(vectorlasement(),UserLogclass);//intnewInt=userLoggetId()intValue()+1;id=newInteger(newInt);}elseid=newInteger(1);}//userLogHomecreate(id,programName,operationContent,userName,operationDate);result=1;ex){ex}}publicintdeleteUserLog(Integer{intresult=0;userLogremove();result=ex){ex}packagepackageimportorgapachecactus*;importjavaxnaming*;importjavarmiRemoteException;importuserUser;publicclass actus1extends{privatestaticfinalStringERROR_NULL_REMOTE对象未定义";privatestaticfinalintMAX_OUTPUT_LINE_LENGTH=100;privatebooleanlogging=false;privateStockManagementDataHomestockManagementDataHome=null;privateStockManagementDatastockManagementData=null;public actus1(String{}publicvoidinitialize()throws{Contextcontext=newObjectref=contextstockManagementDataHome=(StockManagementDataHome)PortableRemoteObjectnarrow(ref,StockManagementDataHomeclass);}publicvoidsetUp()throws{supersetUp();}publicvoidtearDown()throws{stockManagementDataHome=null;stockManagementData=null;super}//创建EJB 接publicStockManagementDatacreate()throws{stockManagementData=stockManagementDataHomecreate();returnstockManagementData;}//测试检查用户的方publicvoidtestCheckUser()throwsRemoteExceptionStringuserPassword=//检查用户的方int[]functions=stockManagementDatacheckUser(userName,userPassword);thisassertEquals("returnvalue",0,functions[0]);userName="jack1";//检查用户的方functions=stockManagementDatacheckUser(userName,userPassword);thisassertEquals("returnvalue",1,functions[0]);}//测试创建用户的方publicvoidtestCreateUser()throws{StringuserName="test";intbaseInforFunction=0;intstockFunction=0;intstockManageFunction=0;intsaleFunction=0;Useruser=newUser(userName,userPassword,intresult=stockManagementDatacreateUser(user);thisassertEquals("returnvalue",1,}//测试更新用户的方publicvoidtestUpdateUser()throws{StringuserName="test";intintbaseInforFunction=1;intstockFunction=1;intstockManageFunction=1;intsaleFunction=1;Useruser=newUser(userName,userPassword,intresult=stockManagementDataupdateUser(user);thisassertEquals("returnvalue",1,}publicvoidtestDeleteUser()throws{StringuserName="test";intbaseInforFunction=0;intstockFunction=0;intstockManageFunction=0;intsaleFunction=0;Useruser=newUser(userName,userPassword,intresult=stockManagementDatadeleteUser(user);thisassertEquals("returnvalue",1,}//publicvoidtestGetUserByUserName()throws{StringuserName=thisassertEquals("returnvalue","jack",result[0][1]);}Exception{StringprogramName登陆窗口";StringoperationContent="登陆";StringuserName=//stockManagementDatacreateUserLog(programName,operationContent,}Exception{Integerid=new//stockManagementData}}JBuilder重新编译EJB模板和EAR应用程序,单击Weblogic服务器的“DeployApplieation”按钮重新部署EAR应用程序。本节将介绍用户登录窗口程序相关的数据类的创建与测试,数据类的作用是非状态EJB的方法和为窗口程packageimportjavaxnamingpackageimportjavaxnamingimportuser*;importjavautil*;publicclassStockManagementDataprivatestockmanagementproStockManagementDatastockManagementData=public{try{ex){ex}}//EJBpublicvoidinitialize()throwsException//Contextcontext=//EJBObjectref=context//取得StockManagementDataEJB的创建接stockManagementDataHome=(StockManagementDataHome)PortableRemoteOb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025油漆工的合同承包合同
- 2025年香菇食品出口贸易代理服务合同3篇
- 新型苝酰亚胺基光热材料的构建及生物应用研究
- 2025年度大白施工合同范本适用于装配式建筑示范项目4篇
- 2025购房合同补充协议条款如何更改
- 2025年度出租房卫生设施改造与租户生活便利协议4篇
- 二零二五年度消防器材采购与维护合同6篇
- 2025彩妆造型师个人品牌形象包装服务合同3篇
- 2025年度木工产品设计与市场推广合同4篇
- 2025版代收货款服务协议书与跨境电商平台合作规范4篇
- 西方史学史课件3教学
- 2024年中国医药研发蓝皮书
- 广东省佛山市 2023-2024学年五年级(上)期末数学试卷
- 台儿庄介绍课件
- 疥疮病人的护理
- 人工智能算法与实践-第16章 LSTM神经网络
- 17个岗位安全操作规程手册
- 2025年山东省济南市第一中学高三下学期期末统一考试物理试题含解析
- 中学安全办2024-2025学年工作计划
- 网络安全保障服务方案(网络安全运维、重保服务)
- 现代科学技术概论智慧树知到期末考试答案章节答案2024年成都师范学院
评论
0/150
提交评论