已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XXX大学毕业设计(论文)论文题目基于OFBIZ的电子商务平台开发办学单位XXX指导老师XXX职称工程师学生姓名XX学号XXX专业计算机科学与技术2013年05月15日摘要OFBIZ是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。OFBIZ最主要的特点是OFBIZ提供了一整套的开发基于JAVA的WEB应用程序的组件和工具。包括实体引擎,服务引擎,消息引擎,工作流引擎,规则引擎等。OFBIZ已经正式成为APACHE的顶级项目APACHEOFBIZ。关键词JAVAJ2EEERPOFBIZABSTRACTOFBIZISAVERYWELLKNOWNECOMMERCEPLATFORM,ISAVERYWELLKNOWNOPENSOURCEPROJECT,CREATEDBASEDLATESTJ2EE/XMLSPECIFICATIONANDTECHNICALSTANDARDS,BUILDINGLARGEANDMEDIUMSIZEDENTERPRISECLASS,CROSSPLATFORM,CROSSDATABASE,CROSSAPPLICATIONSERVERMULTILAYERTHECLASSWEBAPPLICATIONSYSTEMFORDISTRIBUTEDECOMMERCEFRAMEWORKOFBIZMAINFEATUREISTHETHEOFBIZPROVIDEASETOFDEVELOPMENTCOMPONENTSANDTOOLSBASEDONTHEJAVAWEBAPPLICATIONENTITIESENGINE,SERVICEENGINE,NEWSENGINE,WORKFLOWENGINE,RULESENGINEOFBIZHASOFFICIALLYBECOMEATOPLEVELPROJECTOFTHEAPACHEAPACHEOFBIZKEYWORDSJAVAJ2EEERPOFBIZ目录第一章OFBIZ概述2第一节OFBIZ结构2第二节项目的安装4第三节简单的例子4第四节做一些复杂的UI7第二章OFBIZ中使用GROOVY9第一节GROOVY是什么9第二节GROOVY基础10第三章服务和事件MINILANG18第一节什么是MINILANG18第二节定义简单的SERVICE18第二节简单的方法19第二节简单的事件20第四章实体和服务22第一节实体数据模型22第二节BEANSHELL25第五章综合实例25第一节目录结构26第二节相关配置说明26第二节相关数据文件说明29第二节业务逻辑31第二节屏幕的创建33结束语35谢辞36参考文献37第一章OFBIZ概述第一节OFBIZ结构OFBIZ的宗旨,还是使用一系列自创的开源技术,开发大规模的企业级应用程序。它的目标,不是工作流,也不是APPFUSE这样一个整合其他开源技术的演示性的网站,而是一个综合的、企业级的电子商务网站。(1)OFBIZ结构该结构去掉了些LINUX的文件,比如DEBIAN文件夹和后缀为SH的脚本。该项目可以直接导入到ECLIPSE中,集成了ANT工具,可以使用相关的命令进行操作。2012/11/07224418,235CLASSPATH2012/03/1810372,229GITIGNORE2009/03/050706636HGIGNORE2010/03/171828499PROJECT2010/09/1519571,373ANT2010/09/1519571,153ANTBAT2009/04/1423015,984APACHE2_HEADER2013/01/141053APPLICATIONS2012/03/18103753,115BUILDXML2010/09/1519576,969COMMONXML2013/01/141055FRAMEWORK2013/01/141055HOTDEPLOY2010/08/3110031,318IJOFBIZ2011/03/0117512,155IVYXML2010/04/0709113,998KEYS2013/01/141055LIB2012/11/072244163,481LICENSE2011/03/1316258,271MACROSXML2011/05/0223152,283MERGEFROMTRUNKBAT2011/04/22205117,759NOTICE2011/01/1316005,147OFBIZAPTANAJSFORMATXML2010/10/1812568,959OPTIONAL_LIBRARIES2010/09/0923324,172RCOFBIZ2012/05/2020003,492README2011/12/2913411,127REVERTBAT2013/01/1410568REVISIONOF110402TXT2013/01/141052RUNTIME2013/01/141055SPECIALPURPOSE2010/09/0923322,709STARTOFBIZBAT2010/09/0923322,713STARTOFBIZBOTHBAT2010/09/0923322,712STARTOFBIZPOSBAT2013/01/141052THEMES2013/01/141055TOOLSAPPLICATIONS目录,包含了OFBIZ核心的应用程序组件,如订单管理,电子商务存储等。COMPONENTLOADXML文件配置需要载入哪几个应用程序组件。这里的每一个组件,都是一个基于OFBIZ构建的WEB应用程序。FRAMEWORK框架目录,包含OFBIZ框架的组件,例如实体引擎和服务引擎。这是OFBIZ框架的核心。其他应用程序都是基于它来构建的,COMPONENTLOADXML文件配置需要载入哪几个框架组件。(2)OFBIZ框架简介整体采用3层架构用户接口,逻辑和数据,在设计一些用户用例时推荐从底部到顶部的实现,这样能够在心中明白应用程序整体的架构,允许你使用OFBIZ的工具在高层模块使用低层模块的架构。1定义实体ENTITIESOFBIZCOMPONENTXML,每一个主件(COMPONENT)中实体和服务的定义,类路径和WEB的根路径都和该配置文件相关联2数据层DATALAYER数据层的最佳实践就是使用OFBIZENTITYENGINEOFBIZ实体引擎,绝大多数情况下实体引擎会处理99的数据库的交互问题,如果不能处理就可以使用JDBC来进行处理。3表现层模板最佳的实践就是HTML或者是使用FREEMAKER,推荐使用FREEMAKER,它能够更好的和OFBIZ核心框架工具进行结合,一般来说推荐不直接使用FREEMAKER而是使用OFBIZSCREENWIDGET,目的是为了让ACTION能和SCREENS相关联。表现层模板应该尽可能简化,一些公共的内容比如HEADER,FOOTER,导航条,这些应该在允许时使用适配者模式进行加载,修饰每一页的模板文件应该在SCREEN的定义XML中指定。第二节项目的安装该项目集成了ANT,可以通过ANT进行安装,将项目解压出来后会看到BUILDXML,定位到这个XML文件的目录下也就是项目的根路径,输入命令ANT,会安装一个数据集DEMO,该DEMO中包含了很多完整的例子,包括供应商,仓库,以及商店等完整供应链的流程命令ANTRUNINSTALL,会安装一些数据库和提取准备好的后端给用户,但是没有默认的商店和账号被创建。命令ANTRUNINSTALLEXTSEED,会创建一个管理员的账号。命令ANTCREATEADMINUSERLOGIN,执行OFBIZ,完成OFBIZ的构建和配置。命令ANTRUN,执行完成后就可以在浏览器里输入。HTTPS/LOCALHOST8443/MYPORTAL/CONTROL/MAIN/登陆时的默认账号是ADMIN密码是OFBIZ,该端口号的配置位于/OFBIZ/FRAMEWORK/BASE/CONFIG/BOTHCONTAINERSXML第三节简单的例子简单在页面上输出1行文本,这个例子将会演示如何创建和加载你自己的组件,增加一个SCREEN(VIEW)来显示文本“THISISPRACTICEAPPLICATION“。一创建一个组件在项目根路径的HOTDEPLOY文件夹下创建1个PRACTICE文件夹HOTDEPLOY/PRACTICE,该文件夹的名字和新创建的组件名是对应的,OFBIZCOMPONENTXML文件如下对OFBIZCOMPONENTXML的说明该文件的作用就告诉OFBIZ哪些资源会被加入到类路径里,NAME的值会是任意字符串,TYPE告诉OFBIZ我们将会加载1个组件。在里NAME定义WEB应用程序的名字。TITLE显示在浏览器选项卡上的名字。SERVER使用什么服务。BASEPERMISSION需要用户拥有OFBTOOLS的权限才能使用该程序,ADMIN用户有这个权限,所以就没有单独创建新的用户。LOCATION指定服务器默认的根路径。MOUNTPOINT用于访问资源的URL在这个例子中应该是LOCALHOST8080/PRACTICE。APPBARDISPLAY让OFBIZ知道是否我想要自己的主件在在主应用程序的选项卡中显示,成为公共OFBIZ修饰的一部分。二创建WEBAPP创建文件夹WEBAPP,目录结构HOTDEPLOY/PRACTICE/WEBAPP,该文件夹包含了所有WEBAPP想关联的文件以及所创建的COMPONENT。其中HOTDEPLOY时热部署目录,系统在加载完APPLICATION和FRAMEWORK后就会自动加载热部署目录里的文件。在创建文件夹“PRACTICE“在WEBAPP下,目录结构HOTDEPLOY/PRACTICE/WEBAPP/PRACTICE,一个COMPONENT可以有多个APP,比如WEBAPP的创建是遵循的J2EE的标准,在创建文件夹“WEBINF“HOTDEPLOY/PRACTICE/WEBAPP/PRACTICE/WEBINF一个OFBIZ的WEB应用程序需要两个配置文件CONTROLLERXML和AWEBXML。CONTROLLERXML文件告诉OFIBZ不同的访问者不同的请求,使用哪一个ACTION,转到哪一个页面。WEBXML告诉OFBIZ哪些资源是可用的比如数据库和业务逻辑的访问,如何处理WEB相关的问题,比如欢迎页WELCOMEPAGES,重定向和错误页。这些XML可以从其他存在的COMPONENT中拷贝,重要的值得改变,THELOCALDISPATCHERNAME,THEMAINDECORATORLOCATIONANDTHEWEBSITEID比如WEBSITEIDPRACTICEAUNIQUEIDUSEDTOLOOKUPTHEWEBSITEENTITYTOGETINFORMATIONABOUTCATALOGS,ETCLOCALDISPATCHERNAMEPRACTICEAUNIQUENAMEUSEDTOIDENTIFY/RECOGNIZETHELOCALDISPATCHERFORTHESERVICEENGINEMAINDECORATORLOCATIONCOMPONENT/PRACTICE/WIDGET/COMMONSCREENSXMLTHELOCATIONOFTHEMAINDECORATORSCREENTOUSEFORTHISWEBAPPREFERREDTOASACONTEXTVARIABLEINSCREENDEFXMLFILES把WEBSITEID参数的值改为“PRACTICE“,把MAINDECORATORLOCATION参数的值改为COMPONENT/PRACTICE/WIDGET/COMMONSCREENSXML这个位置是主要的修饰文件的。PARAMETERSMAINDECORATORLOCATION这样做增加了代码的独立性,改变相关路径,就可以和之前使用过的SCREENS一起工作,增加了代码的重用性,把存在的SCREENS用于其他的COMPONENT。创建一个新文件夹ERRORHOTDEPLOY/PRACTICE/WEBAPP/PRACTICE/ERROR创建ERRORJSP该文件可以从其他项目中拷贝。在CONTROLLERXML文件中指定错误页。在你的组件目录PRACTICE中创建一个“WIDGET“HOTDEPLOY/PRACTICE/WIDGET这个目录就包含FORMS,MENUS,ANDSCREENS,用来处理用户界面的。通过命令行输入下面JAVAXMX256MJAROFBIZJARTHEXMX256M命令仅保证程序有足够的内存。然后在浏览器上点击这个地址HTTPS/LOCALHOST8443/PRACTICE/CONTROL/MAIN第四节做一些复杂的UI一创建DECORATOR在这个应用中为SCREENS创建DECORATOR。在“WIDGET“目录中创建一个COMMONSCREENSXML。这个文件包括公用SCREENS,用来贯穿整个应用。一个公用SCREEN可以有一个HEADER和FOOTER被包含以便任意其它SCREENS能用它作修饰器也同样有这些项。这些你可以参考“EXAMPLE“组件中的COMMONSCREENSXML文件。COMMONSCREENSXML文件中代码将是二创建一个菜单为此在你的组件的“WIDGET“目录中创建一个PRACTICEMENUSXML文件。这个可以参考“EXAMPLE“组件的EXAMPLEMENUSXML文件。三创建子目录“ACTIONS“在WEBINF目录中创建子目录“ACTIONS“。在这个目录中我们将创建脚本文件。脚本文件是准备数据的。这些文件将是GROOVY文件。以前我们是用BSHBEANSHELL文件。这是用来在运行中从数据库中取数据给用户界面的脚本。工作在GROOVY中总是要注意导入类和包。仅导入在你文件中使用的。要从“DEBUG“类使用方法来放置日志消息,仅从它自己开始做起。因此在ACTIONS目录中创建一个PERSONGROOVY,用来从实体“PERSON“取出所有记录。这时实际上做这些只要很少代码一行ASINGLELINE,如下CONTEXTPERSONSDELEGATORFINDLIST“PERSON“,NULL,NULL,NULL,NULL,FALSE上面的语句将从PERSON实体获取所有记录并通过名字PERSONS放在CONTEXT。这个列表通过名称PERSON在FTL文件中迭代显示记录。现在在“PRACTICE“的WEB应用中创建一个名称为“PERSONFTL“的FTL文件,用来显示从GROOVY文件中取来的数据。这时你仅需迭代存在CONTEXT中的PERSONS列表。仅需要如下代码PERSONFTLSOMEOFTHEPEOPLEWHOVISITEDOURSITEAREPERSONFIRSTNAMEIF_EXISTSPERSONLASTNAMEIF_EXISTS现在在PRACTICESCREENSXML文件中创建一个“PERSON“的SCREEN,也在PRACTICEMENUSXML文件中创建一个新的菜单项。PRACTICESCREENSXML的新SCREEN输入将是第二章OFBIZ中使用GROOVY第一节GROOVY是什么GROOVY是一种基于JVM的敏捷开发语言,它结合了PYTHON、RUBY和SMALLTALK的许多强大的特性,GROOVY代码能够与JAVA代码很好地结合,也能用于扩展现有代码。由于其运行在JVM上的特性,GROOVY可以使用其他JAVA语言编写的库。GROOVY是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。GROOVY是JVM的一个替代语言(替代是指可以用GROOVY在JAVA平台上进行JAVA编程),使用方式基本与使用JAVA代码的方式相同,该语言特别适合与SPRING的动态语言支持一起使用,设计时充分考虑了JAVA集成,这使GROOVY与JAVA代码的互操作很容易。(注意不是指GROOVY替代JAVA,而是指GROOVY和JAVA很好的结合编程。第二节GROOVY基础一创建GROOVY项目NEWPROJECTJAVAPROJECT创建一个JAVA项目。为了方便管理,建议在SOURCE中建两个SOURCE文件夹JAVA和GROOVY,分别用于存储JAVA源文件和GROOVY源文件1添加GROOVY特性在项目上右击,GROOVYADDGROOVYNATURE,这样会在项目中添加GROOVYLIBRARIES。2添加GROOVY类在项目GROOVY源文件下右键,NEWOTHERGROOVYGROOVYCLASS自动生成的源代码如下PUBLICCLASSHELLOWORLD/PARAMARGS/PUBLICSTATICVOIDMAINDEFARGS/TODOAUTOGENERATEDMETHODSTUB我们在MAIN方法中加一句打印语句PRINTLN“HELLOWORLD“3编译运行GROOVY类在源文件上右键,COMPILEGROOVYFILE,然后右键,RUNASGROOVY,在控制台中查看运行结果。实际上GROOVY语法的简练还体现在,就算整个文件中只有PRINTLN“HELLOWORLD“这一句代码(把除这一句以外的语句删除掉吧),程序也照样能够运行。当然,为了说明GROOVY其实就是JAVA,你也可以完全按照JAVA语法来编写HELLOWORLD类。二GROOVY语法简介1没有类型的JAVA作为动态语言,GROOVY中所有的变量都是对象所有对象继承自JAVALANGOBJECT,在声明一个变量时,GROOVY不要求强制类型声明,仅仅要求变量名前使用关键字DEF(从GROOVYJSR1开始,在以前的版本中,甚至连DEF都不需要)。修改MAIN方法中的代码DEFVAR“HELLOWORLD“PRINTLNVARPRINTLNVARCLASS你可以看到程序最后输出了VAR的实际类型为JAVALANGSTRING作为例外,方法参数和循环变量的声明不需要DEF。2不需要的PUBLIC你可以把MAIN方法前面的PUBLIC去掉,实际上,GROOVY中默认的修饰符就是PUBLIC,所以PUBLIC修饰符你根本就不需要写,这点跟JAVA不一样。3不需要的语句结束符GROOVY中没有语句结束符,当然为了与JAVA保持一致性,你也可以使用号作为语句结束符。在前面的每一句代码后面加上号结束,程序同样正常运行为了接受JAVA程序员的顽固习惯。4字符串连接符跟JAVA一样,如果你需要把一个字符串写在多行里,可以使用号连接字符串。代码可以这样写DEFVAR“HELLO“WORLD“,GROOVY“5一切皆对象事实上GROOVY对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。如果你赋给它BOOLEAN,那么不管它原来是什么类型,它接受BOOLEAN值之后就会自动把类型转变为BOOLEAN值。看下面的代码DEFVAR“HELLO“WORLD“,GROOVY“PRINTLNVARPRINTLNVARCLASSVAR1001PRINTLNVARCLASS输出结果HELLOWORLD,GROOVYCLASSJAVALANGSTRINGCLASSJAVALANGINTEGERVAR这个变量在程序运行中,类型在改变。一开始给它赋值STRING,它的类型就是STRING,后面给它赋值INTEGER,它又转变为INTEGER。6循环删除整个源文件内容,用以下代码替代DEFVAR“HELLO“WORLD“,GROOVY“DEFREPEATVALFORI0I/KEY,VALUE两个参数用于接受每个元素的键/值PRINTLN“KEYVALUE“MAPEACHPRINTLNIT/IT是一个关键字,代表MAP集合的每个元素MAPEACHPRINTLNITGETKEY“ITGETVALUE除了用于迭代之外,闭包也可以单独定义DEFSAYWORDPRINTLN“HI,WORD“调用SAYGROOVYSAYCALLGROOVYTHISRADIUSRADIUSVOIDPRINTMEPRINTLN“NAMEHASAMASSOFMASS“ANDARADIUSOFRADIUS“PLANETEARTHPRINTME16ELVIS操作符这是三目运算符“”的简单形式,三目运算符通常以这种形式出现STRINGDISPLAYNAMENAMENULLNAME“UNKNOWN“在GROOVY中,也可以简化为(因为NULL在GROOVY中可以转化为布尔值FALSE)STRINGDISPLAYNAMENAMENAME“UNKNOWN“基于“不重复”的原则,可以使用ELVIS操作符再次简化为STRINGDISPLAYNAMENAME“UNKNOWN“17动态性GROOVY所有的对象都有一个元类METACLASS,我们可以通过METACLASS属性访问该元类。通过元类,可以为这个对象增加方法(在JAVA中不可想象)见下面的代码,MSG是一个STRING,通过元类,我们为MSG增加了一个STRING类中所没有的方法UPDEFMSG“HELLO“PRINTLNMSGMETACLASSSTRINGMETACLASSUPDELEGATETOUPPERCASEPRINTLNMSGUP通过元类,我们还可以检索对象所拥有的方法和属性(就象反射)MSGMETACLASSMETHODSEACHPRINTLNITNAMEMSGMETACLASSPROPERTIESEACHPRINTLNITNAME甚至我们可以看到我们刚才添加的UP方法。我们可以通过元类判断有没有一个叫UP的方法,然后再调用它IFMSGMETACLASSRESPONDSTOMSG,UPPRINTLNMSGTOUPPERCASE当然,也可以推断它有没有一个叫BYTES的属性IFMSGMETACLASSHASPROPERTYMSG,BYTESPRINTLNMSGBYTESENCODEBASE64第三章服务和事件MINILANG第一节什么是MINILANGMINILANG的语法简单的说就是已经格式好的XML,开发者在写XML时遵循一定的所定义的视图,XML文件就会被框架所解析,我们因此能把XML看做是一些命令。这些XML文件通常在顶部写XMLNSXSI“HTTP/WWWW3ORG/2001/XMLSCHEMAINSTANCE“XSINONAMESPACESCHEMALOCATION“HTTP/OFBIZAPACHEORG/DTDS/SIMPLEMETHODSXSD“尽管MINILANG主要是用在服务和事件,MINILANG也可以用来准备数据用于SCREEN引擎。大多数的MINILANG的简单的用法是变量被我们所使用,它没有很明确的获取变量,但是会在环境中按照我们想要的方式替换。比如这句话将会设置FIELDONE参数的值给TEMPMAP,如果TEMPMAP被使用,这将会被增加,如果没有被使用,将会创建MAP对象并增加,值将会被增加到KEY为FIELDONE关于编写XML的工具,比如XMLBUDDY,可以参考HTTP/WWWXMLBUDDYCOM。第二节定义简单的SERVICEMINILANG服务的定义和调用和JAVA的SERVICE一样,能够被CONTROLLERXML中所定义的用于控制的SERVLET调用。下面的例子介绍了一个简单的服务来移除关于星球的评论(PLANETREVIEWS),删除一条记录。首先打开COMPONENTLEARNINGWIDGETLEARNINGFORMSXML从FORM引擎中找到PLANETREVIEWS,这个引擎中将会显示数据库中所有的评论。在FORM引擎中,在更新字段元素的下增加HYPERLINK元素会展示一个超链接,尽管点它会出现错误,那是因为没有在REQUESTMAPCONTROLLERXML中来处理该请求。在COMPONENTLEARNINGSERVICEDEFSERVICESXML文件中增加新的服务定义。SERVICETOREMOVEAPLANETREVIEW通常的做法是把服务的定义放到一个单独的XML文件中,比如说返回的账单放在一个单独的文件SERVICES_RETURNSXML中,所以我们增加元素到父组件OFBIZCOMOPNETXML文件中,让系统知道服务的定义将会被重新加载。我们能够结构化服务的定义避免很庞大的定义文件。当服务被调用时,调用者并不会关心是哪种类型的服务,可能是JAVA文件也可能是简单的服务。只是关心正确的参数传入到服务,第二节简单的方法简单方法的XML文件位于组件的SCRIPT文件夹下,在COMPONENTLEARNING下创建SCRIPTORGOFBIZLEARNINGLEARNING,在最终的文件LEARNINGSERVICESXML。在我们增加内容到LEARNINGSERVICESXML之前首先确保SCRIPT文件夹在类路径里,打开COMPONENTLEARNINGOFBIZCOMPONENTXML,增加LOCATION指定服务定义能够被解析。在LEARNINGSERVICESXML增加接下来把REQUESTMAP增加到CONTROLLERXML该命令会执行查询PLANETREVIEW实体,ENTITYONE这个查询的标准必须是主键。该句代码定价于JAVA代码。GENERICVALUELOOKEDUPVALUEDELEGATORFINDBYPRIMARYKEY“PLANETREVIEW“,UTILMISCTOMAP“REVIEWID“,REVIEWID尽管看到MINILANG没有那么复杂,它极大程度上的简化了JAVA代码,在JAVA代码中DELEGATOR从DISPATCHCONTEXT中获取,REVIEWID从CONTEXT中获取方法的调用包在TRY/CATCH中。第二节简单的事件我们调用MINILANG的事件,同样的方式能在CONTROLLERXML中调用JAVA的事件,这个事件会告诉控制的SERVLET如何通过增加元素来处理事件。调用简单事件会执行准备和验证通过XHTML的FORM传进来的参数的集合,当一个事件被调用的时候,HTTPSERVLETREQUEST对象将会被传入,作为一个参数传入,对于简单的事件,增加到上下文在同样的位置就像LEARNINGSERVICESXML文件COMPONENTLEARNINGSCRIPTORGOFBIZLEARNINGLEARNING创建一个新文件LEARNINGEVENTSXML增加一个元素在标签,最后,增加REQUESTMAP到CONTROLLER从事件被调用的地方。简单方法所做的事不仅仅是让一个消息写到LOGS中,而是通过这个能够调试MINILANG。第四章实体和服务接下来会讲解在OFBIZ中数据模型和业务逻辑的定义,如何在OFBIZ中使用BEANSHELL。第一节实体数据模型数据模型的物理实现形式是通过属性,关系,其实现可以是SQL或者是对象,或者是两者的结合。OFBIZ提供的实体引擎允许数据模型在高层次的抽象上实现。数据模型在XML文件中定义,OFBIZ提供了一系列的API来操作实际的数据,查找,创建,更新,删除,实体引擎允许我们做数据的操作是在高层,而不是SQL和JAVA代码。架构的实现是独立于现有的数据库。减少了维护的代码,当应用程序需要改变时。通过一系列简单的API避免了对象关系持久化的开销。数据模型的基本单位是实体,接下来是关于一个人实体的定义。实体类似于SQL中的表或者是JAVA对象,有一些可变的字段,实体引擎将会从这些定义和创建数据库的表开始,检查表是否违反了定义,如果需要的情况下就修改表。这些字段的类型会定义为通用的类型,当和SQL交互时会自动转化为SQL的类型,和JAVA交互就会自动转化为JAVA的类型。关系可以是一对一或者是多对多,也可以涉及一些参照完整性的检查不是必须的,使用这些关系可以运行从一个实体到另一个实体,而不用记住那个键值相关联。这些键值得改变时用在关系上,就避免了直接通过应用程序来改变。注意OFBIZ可以自动生成外键的名字,但是最好还是自己指定,避免键的冲突。第二节BEANSHELLBEANSHELL是使用JAVA的语法的一门动态的脚本语言,在OFBIZ中用作视图层数据的收集,可以用作调试,测试,原型设计,事实上实体服务可以用BEANSHELL来设计。下载和安装,在BEANSHELL的官网下载BSH20B4JAR(最新版),如果是允许桌面版直接双击该文件,如果是想在命令行中来使用BEANSHELL,将文件BSH20B4JAR加入到环境变量,如CLASSPATH设为JAVA_HOMELIBEBSH20B4JAR在命令行中使用命令JAVABSHINTERPRETER显示为BSH当开始OFBIZ时,注意到在控制台出现如下信息HTTPDSTARTEDONPORT9989SESSIONDSTARTEDONPORT999023092MAINBEANSHELLCONTAINERJAVA109INFOSTARTEDBEANSHELLTELNETSERVICEON9989,999023093MAINBEANSHELLCONTAINERJAVA110INFONOTICEBEANSHELLSERVICEPORTSARENOTSECUREPLEASEPROTECTTHEPORTS这告诉我们在9990端口开启了BEANSHELL的容器,你可以通过TELNET到该端口,有所有的权限来访问OFBIZ服务器。允许你测试代码和监听事件。将BSHCONTAINERBSH文件放在OFBIZ文件夹下,能够调用SOURCE“BSHCONTAINERBSH“在使用的过程中会使用DELEGATOR对象来访问实体引擎,DISPATCHER用于运行服务,管理用户注册实体通常需要验证。实体的使用TELNET到BEANSHELL,使用DELEGATOR对象访问PERSON实体,DELEGATOR是一个GENERICDELEGATOR对象有一些了增删查第五章综合实例第一节目录结构首先创建如下所示的目录结构,APPLICATIONS下的HELLO其中OFBIZCOMPONENTXML、BUILDXML、WEBXML、CONTROLLERXML几个文件可以从任意一个模块中拷过来,再作些修改。HELLO|BUILD|DATA|HOBBIESDATAXML/定义相关数据文件|ENTITYDEF|ENTITYGROUPXML/定义数据库中表的结构|ENTITYMODELXML/以及相关的主键,关系,和约束等|SCRIPT|SERVICEDEF|ENTITYMODELXML/定义的服务信息|WEBAPP|HELLO|INCLUDE|FOOTERFTL|HEADERFTL|WEBINF|CONTROLLERXML/用于控制页面跳转等|WEBXML|MAINFTL|NEWSFTL|WIDGET|HELLOSCREENSXML/前端SCREEN文件|BUILDXML|OFBIZCOMPONENTXML/用于加载相关模块第二节相关配置说明OFBIZCOMPONENTXML其中ENTITYRESOURCETYPE“MODEL“用于加载相关的实体资源,TYPE“DATA“用于记载相关的数据,SERVICERESOURCE用于加载相关的服务BULDXML用于和ANT进行集成时使用。增加了一个TARGET模块。WEBXML中的上下文初始化参数ENTITYDELEGATORNAMEDEFAULTTHENAMEOFTHEENTITYDELEGATORTOUSE,DEFINEDINENTITYENGINEXMLLOCALDISPATCHERNAMEHELLOAUNIQUENAMEUSEDTOIDENTIFY/RECOGNIZETHELOCALDISPATCHERFORTHESERVICEENGINESERVICEREADERURLS/WEBINF/SERVICESXMLCONFIGURATIONFILESFORTHESERVICEDISPATCHERCONTROLLERXML将相关的请求用OFBIZ框架来接管。REQUESTMAP和VIEWMAP的搭配使用负责页面的转发。第二节相关数据文件说明第一步是定义数据模型。我们想用户信息和他们的爱好并且查看每个人的所有爱好(或者,所有的人分享一种爱好)。数据模型是定义人员,爱好,和人员爱好的联系。在关系型数据库中,你将定义两个TABLE,其中一个是人员,另一个是爱好。还有定义他们之间联系的第三个表第三个表允许一个人员关联许多爱好,反之亦然你将定义人员和爱好的外键来约束第三个表。OFBIZ工作原理也是类似你可以定义两个实体,我们将定义HELLOPERSON和HELLOHOBBY,和一个连接实体,HELLOPERSONHOBBY,并建立了它们之间的关系他们之间关系主要是外键约束,而且不需要你自己去定义。当外键改变,需要改变你的代码注意我们正在创造一个应用完全独立的数据模型来作说明如果我们是在建立一个真正完整的应用,最好的做法是尽可能利用许多现有的OFBIZ框架实体来做,而不是创造自己HELLOPERSON,我们将利用现有的框架OFBIZPARTY/PERSON/PARTYGROUP这三个已有实体定义数据模型,在HELLO下创建ENTITYDEF文件夹在ENTITYDEF/目录内,创建ENTITYMODELXML和ENTITYGROUPXMLHELLOPERSON和HELLOHOBBY各有一个主键,HELLOPERSONHOBBY有两个主键,它用来链接HELLOPERSON和HELLOHOBBY这是好的做法,让你外键关联,使调试容易,避免发生意外。外键的名称OFBIZ由产生定义这些实体在另一文件里,ENTITYGROUPXML,这也是很重要的但很容易忘记。在ENTITYDEF/目录,这样OFBIZ就会知道哪些数据写入数据库中,以供使用人否则,将实体存在OFBIZ的,但是当你真正尝试使用他们,你会得到这个错误ORGOFBIZENTITYGENERICENTITYEXCEPTIONHELPERNAMENOTFOUNDFORENTITYHELLOPERSON最后,你必须增加这一行到你的OFBIZCOMPONENTXML中的,这样让OFBIZ知道这个实体是应用程序的一个组件ENTITYMODELXML对应数据库中的3张表。用名称是实体“HELLOHOBBY“在我们的情况的标签名称,使用名称的领域要么属性或作为内标签见上次值为“葡萄酒“你的属性可以是属性的数值或内部的标签的值,如果你有很长的数值在CDATA段落里面是最好的另外,主键不须大写或隔着_,但在其他OFBIZ的应用程序这是一个规范现在你准备加载例子数据到WEBTOOLS主界面,你会看到链接的“XMLIMPORT“点击“XMLIMPORT“,并于下一个画面,它会提示你文件夹的名称,在你的OFBIZ中的路径我通常不点击任何复选框和仅仅是“IMPORT“如果你是成功的,同一个介面底部会告诉你,有多少数据添加HOBBIESDATAXMLWINE除了增加你的属性和数据之外,当你的数据被创建并且被更新时,OFBIZ自动地创建了时间戳,这是为了横跨OFBIZ多个事例同步数据。最后,如果你增加这个命令到你的OFBIZCOMPONENTXML文件,在安装过程期间OFBIZ可以自动地安装你的例子数据OFBIZ实际上让你定义数据是否有“例子数据”,这样为你的APP可以展示,例子数据仅仅是展示用的。第二节业务逻辑即然我们已经定义了数据模型,我们可以写一种简单的应用以DELEGATOR直接地访问实体。这是OFBIZ应用程序的标准操作,但是,做为业务逻辑的分层新建,更新和删除。DELEGATOR直接地为查找数据使用,如更加复杂的查寻。创建业务逻辑的过程是有二步。首先,你定义了通用的业务逻辑在XML文件使用CLASS和方法或者脚本,来告诉OFBIZ业务逻辑引擎你的参数和位置,第二,你实现服务可以用JAVA,OFBIZMINILANG,或者另一种脚本语言。业务逻辑通常定义在一个SERVICEDEF/目录里面,并且包括一个或更多SERVICESXML文件。这我们的SERVICESXML文件注意SERVICESXML是参考实体执行。同时直接地与标签执行。这些自动属性标签保存你时间并且使你的应用更加容易维护。你在你的OFBIZCOMP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 板块构造学说
- 患者就诊排队管理制度
- 算法设计与分析 课件 3.4-递归 - 典型应用 - 整数划分
- 2024年山南道路客运从业资格证考试模拟试题
- 2024年商洛客运从业资格证到期换证考试
- 2024年吉林客运模拟考试
- 2024年长沙客运从业资格证考试考什么
- 2024年拉萨客运驾驶员试题答案
- 人教部编版二年级语文上册《语文园地二》精美课件
- 吉首大学《风景园林花卉学》2021-2022学年第一学期期末试卷
- 文化行业文化遗产保护与数字化传承方案
- 黑臭河道整治工程施工组织设计
- 《地名、人名的拼写》教学设计
- 2024年中国长江三峡集团限公司“定向招聘”校园招聘(226人)高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024届新高考数学大题训练:数列(30题)(解析版)
- 贸易居间费合同范本
- 部编版道德与法治七年级上册每课教学反思
- 2024-2030年中国碳纳米管(CNT)材料行业市场发展趋势与前景展望战略分析报告
- 人教版二年级数学上册第六单元《表内乘法(二)》说课稿(含14课时)
- 项目风险记录及跟踪表
- 房地产市场报告 -2024年第二季度广州写字楼办公楼出租租金市场分析报告与发展前景趋势展望
评论
0/150
提交评论