版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、xxx 大 学毕 业 设 计(论 文)论文题目: 基于ofbiz的电子商务平台开发办学单位: xxx指导老师: xxx 职 称: 工程师 学生姓名: xx 学 号: xxx专 业:计算机科学与技术2013年 0 5月 15日 摘 要ofbiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新j2ee/xml规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类web应用系统的框架。 ofbiz最主要的特点是ofbiz提供了一整套的开发基于java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎
2、等。ofbiz 已经正式成为 apache 的顶级项目: apache ofbiz。关键词 java j2ee erpofbizabstractofbiz is a very well-known e-commerce platform, is a very well-known open source project, created based latest j2ee/xml specification and technical standards, building large and medium-sized enterprise-class, cross-platform, cro
3、ss-database, cross-application server multilayerthe class web application system for distributed e-commerce framework. ofbiz main feature is the the ofbiz provide a set of development components and tools based on the java web application. entities engine, service engine, news engine, workflow engin
4、e, rules engine.ofbiz has officially become a top-level project of the apache: apache ofbiz.keywords java j2ee erpofbiz目 录第一章 ofbiz概述2第一节 ofbiz结构2第二节 项目的安装:4第三节 简单的例子4第四节 做一些复杂的ui7第二章ofbiz中使用groovy9第一节groovy是什么9第二节groovy基础10第三章 服务和事件(minilang)18第一节 什么是 minilang18第二节 定义简单的service18第二节 简单的方法19第二节 简单的事
5、件20第四章 实体和服务22第一节 实体数据模型22第二节 beanshell25第五章 综合实例25第一节 目录结构26第二节 相关配置说明26第二节 相关数据文件说明29第二节 业务逻辑31第二节 屏幕的创建33结束语35谢辞36参考文献37第一章 ofbiz概述第一节 ofbiz结构ofbiz 的宗旨,还是使用一系列自创的开源技术,开发大规模的企业级应用程序。它的目标,不是工作流,也不是appfuse 这样一个整合其他开源技术的演示性的网站,而是一个综合的、企业级的电子商务网站。(1) ofbiz结构该结构去掉了些linux的文件,比如debian文件夹和后缀为.sh的脚本。该项目可以直
6、接导入到eclipse中,集成了ant工具,可以使用相关的命令进行操作。2012/11/07 22:44 18,235 .classpath2012/03/18 10:37 2,229 .gitignore2009/03/05 07:06 636 .hgignore2010/03/17 18:28 499 .project2010/09/15 19:57 1,373 ant2010/09/15 19:57 1,153 ant.bat2009/04/14 23:01 5,984 apache2_header2013/01/14 10:53 applications2012/03/18 10:37
7、 53,115 build.xml2010/09/15 19:57 6,969 common.xml2013/01/14 10:55 framework2013/01/14 10:55 hot-deploy2010/08/31 10:03 1,318 ij.ofbiz2011/03/01 17:51 2,155 ivy.xml2010/04/07 09:11 3,998 keys2013/01/14 10:55 lib2012/11/07 22:44 163,481 license2011/03/13 16:25 8,271 macros.xml2011/05/02 23:15 2,283 m
8、ergefromtrunk.bat2011/04/22 20:51 17,759 notice2011/01/13 16:00 5,147 ofbiz.aptana.js.format.xml2010/10/18 12:56 8,959 optional_libraries2010/09/09 23:32 4,172 rc.ofbiz2012/05/20 20:00 3,492 readme2011/12/29 13:41 1,127 revert.bat2013/01/14 10:56 8 revision-of-11.04.02.txt2013/01/14 10:52 runtime201
9、3/01/14 10:55 specialpurpose2010/09/09 23:32 2,709 startofbiz.bat2010/09/09 23:32 2,713 startofbizboth.bat2010/09/09 23:32 2,712 startofbizpos.bat2013/01/14 10:52 themes2013/01/14 10:55 toolsapplications 目录,包含了ofbiz 核心的应用程序组件,如订单管理,电子商务存储等。component-load.xml 文件配置需要载入哪几个应用程序组件。这里的每一个组件,都是一个基于ofbiz构建的
10、web 应用程序。framework 框架目录,包含ofbiz 框架的组件,例如实体引擎和服务引擎。这是ofbiz 框架的核心。其他应用程序都是基于它来构建的,component-load.xml 文件配置需要载入哪几个框架组件。(2) ofbiz框架简介整体采用3层架构用户接口,逻辑和数据,在设计一些用户用例时推荐从底部到顶部的实现,这样能够在心中明白应用程序整体的架构,允许你使用ofbiz的工具在高层模块使用低层模块的架构。1. 定义实体(entities):ofbiz-component.xml ,每一个主件(component)中实体和服务的定义,类路径和web的根路径都和该配置文件相
11、关联2. 数据层data layer数据层的最佳实践就是使用ofbiz entity engine(ofbiz 实体引擎),绝大多数情况下实体引擎会处理99%的数据库的交互问题,如果不能处理就可以使用jdbc来进行处理。3. 表现层模板最佳的实践就是html或者是使用freemaker,推荐使用freemaker,它能够更好的和ofbiz核心框架工具进行结合,一般来说推荐不直接使用freemaker而是使用ofbiz screen widget,目的是为了让action能和screens相关联。表现层模板应该尽可能简化,一些公共的内容比如header,footer,导航条,这些应该在允许时使用
12、适配者模式进行加载,修饰每一页的模板文件应该在screen的定义xml中指定。第二节 项目的安装:该项目集成了ant,可以通过ant进行安装,将项目解压出来后会看到build.xml,定位到这个xml文件的目录下也就是项目的根路径,输入命令ant,会安装一个数据集demo,该demo中包含了很多完整的例子,包括供应商,仓库,以及商店等完整供应链的流程 命令:ant run-install,会安装一些数据库和提取准备好的后端给用户,但是没有默认的商店和账号被创建。 命令:ant run-install-extseed,会创建一个管理员的账号。 命令: ant create-admin-user-
13、login,执行ofbiz,完成ofbiz的构建和配置。 命令: ant run,执行完成后就可以在浏览器里输入。https:/localhost: 8443/myportal/control/main/登陆时的默认账号是admin密码是ofbiz,该端口号的配置位于/ofbiz/framework/base/config/both-containers.xml第三节 简单的例子简单在页面上输出1行文本,这个例子将会演示如何创建和加载你自己的组件,增加一个screen(view)来显示文本this is practice application。(一) 创建一个组件在项目根路径的hot-dep
14、loy文件夹下创建1个practice文件夹hot-deploy/practice,该文件夹的名字和新创建的组件名是对应的,ofbiz-component.xml 文件如下 对ofbiz-component.xml的说明:该文件的作用就告诉ofbiz哪些资源会被加入到类路径里,name的值会是任意字符串,type告诉ofbiz我们将会加载1个组件。在 里 name :- 定义web应用程序的名字。 title :- 显示在浏览器选项卡上的名字。 server :- 使用什么服务。 base-permission :- 需要用户拥有ofbtools的权限才能使用该程序,admin用户有这个权限,
15、所以就没有单独创建新的用户。 location :- 指定服务器默认的根路径。 mount-point :- 用于访问资源的url. 在这个例子中应该是localhost:8080/practice。 app-bar-display :- 让ofbiz知道是否我想要自己的主件在在主应用程序的选项卡中显示,成为公共ofbiz修饰的一部分。 (二) 创建 webapp创建文件夹webapp,目录结构(hot-deploy/practice/webapp),该文件夹包含了所有webapp想关联的文件以及所创建的component。其中hot-deploy时热部署目录,系统在加载完applicatio
16、n和framework后就会自动加载热部署目录里的文件。在创建文件夹practice 在webapp下,目录结构(hot-deploy/practice/webapp/practice),一个component可以有多个app,比如 webapp的创建是遵循的j2ee的标准,在创建文件夹web-inf (hot-deploy/practice/webapp/practice/web-inf)一个ofbiz的web应用程序需要两个配置文件controller.xml 和 a web.xml。 controller.xml文件告诉ofibz不同的访问者不同的请求,使用哪一个action,转到哪一个
17、页面。 web.xml告诉ofbiz哪些资源是可用的比如数据库和业务逻辑的访问,如何处理web相关的问题,比如欢迎页welcome pages,重定向和错误页。这些xml可以从其他存在的component中拷贝,重要的值得改变,the localdispatchername, the maindecoratorlocation and the websiteid.比如 websiteid practice a unique id used to look up the website entity to get information about catalogs, etc. localdis
18、patchername practice a unique name used to identify/recognize the local dispatcher for the service engine maindecoratorlocation component:/practice/widget/commonscreens.xml the location of the main-decorator screen to use for this webapp; referred to as a context variable in screen def xml files. 把w
19、ebsiteid参数的值改为practice,把maindecoratorlocation 参数的值改为component:/practice/widget/commonscreens.xml这个位置是主要的修饰文件的。 $parameters.maindecoratorlocation这样做增加了代码的独立性,改变相关路径,就可以和之前使用过的screens一起工作,增加了代码的重用性,把存在的screens用于其他的component。创建一个新文件夹error(hot-deploy/practice/webapp/practice/error)创建error.jsp该文件可以从其他项目中
20、拷贝。在controller.xml文件中指定错误页。在你的组件目录practice 中创建一个widget(hot-deploy/practice/widget). 这个目录就包含forms,menus, and screens,用来处理用户界面的。通过命令行输入下面: java -xmx256m -jar ofbiz.jar (the -xmx256m 命令仅保证程序有足够的内存)。然后在浏览器上点击这个地址https:/localhost:8443/practice/control/main第四节 做一些复杂的ui(一) 创建decorator在这个应用中为screens 创建decor
21、ator。在widget目录中创建一个commonscreens.xml。这个文件包括公用screens,用来贯穿整个应用。一个公用screen 可以有一个header 和footer 被包含以便任意其它screens 能用它作修饰器也同样有这些项。这些你可以参考example组件中的commonscreens.xml 文件。commonscreens.xml 文件中代码将是: (二) 创建一个菜单为此在你的组件的widget目录中创建一个practicemenus.xml 文件。这个可以参考example组件的examplemenus.xml 文件。 (三) 创建子目录actions在 we
22、b-inf 目录中创建子目录actions。在这个目录中我们将创建脚本文件。脚本文件是准备数据的。这些文件将是groovy 文件。以前我们是用bsh(beanshell) 文件。这是用来在运行中从数据库中取数据给用户界面的脚本。工作在groovy 中总是要注意导入类和包。仅导入在你文件中使用的。要从debug类使用方法来放置日志消息,仅从它自己开始做起。因此在actions 目录中创建一个person.groovy,用来从实体person取出所有记录。这时实际上做这些只要很少代码 (一行a single line) ,如下context.persons = delegator.findlist
23、(person, null, null, null, null, false);上面的语句将从person 实体获取所有记录并通过名字persons 放在context。这个列表通过名称person 在ftl 文件中迭代显示记录。现在在practice的web 应用中创建一个名称为person.ftl的ftl 文件,用来显示从groovy 文件中取来的数据。这时你仅需迭代存在context 中的persons 列表。仅需要如下代码person.ftl: some of the people who visited our site are: $person.firstname?if_exist
24、s $person.lastname?if_exists 现在在practicescreens.xml 文件中创建一个person的screen,也在practicemenus.xml 文件中创建一个新的菜单项。practicescreens.xml 的新screen 输入将是: 第二章ofbiz中使用groovy第一节groovy是什么groovy是一种基于jvm的敏捷开发语言,它结合了python、ruby和smalltalk的许多强大的特性,groovy 代码能够与 java 代码很好地结合,也能用于扩展现有代码。由于其运行在 jvm 上的特性,groovy 可以使用其他 java 语言
25、编写的库。groovy 是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。groovy是jvm的一个替代语言(替代是指可以用 groovy 在java平台上进行 java 编程),使用方式基本与使用 java代码的方式相同,该语言特别适合与spring的动态语言支持一起使用,设计时充分考虑了java集成,这使 groovy 与 java 代码的互操作很容易。(注意:不是指groovy替代java,而是指groovy和java很好的结合编程。第二节groovy基础(一) 创建groovy项目new
26、 - project java project 创建一个java项目。为了方便管理,建议在source中建两个source文件夹java和groovy,分别用于存储java源文件和groovy源文件:1) 添加 groovy 特性在项目上右击,groovy add groovy nature,这样会在项目中添加 groovy libraries。2) 添加 groovy 类在项目groovy源文件下右键,new other groovy groovy class自动生成的源代码如下:publicclass helloworld/* param args*/publicstaticvoid ma
27、in(def args)/todoauto-generatedmethodstub我们在main方法中加一句打印语句:println hello world3) 编译运行groovy类在源文件上右键,compile groovy file,然后右键,run as groovy ,在控制台中查看运行结果。实际上 groovy 语法的简练还体现在,就算整个文件中只有println hello world这一句代码(把除这一句以外的语句删除掉吧),程序也照样能够运行。当然,为了说明groovy 其实就是java,你也可以完全按照java 语法来编写helloworld类。(二) groovy语法简介
28、1) 没有类型的java作为动态语言,groovy中所有的变量都是对象(所有对象继承自java.lang.object),在声明一个变量时,groovy不要求强制类型声明,仅仅要求变量名前使用关键字def(从groovy jsr 1开始,在以前的版本中,甚至连def都不需要)。修改main 方法中的代码:def var=hello worldprintln varprintln var.class你可以看到程序最后输出了var的实际类型为:java.lang.string作为例外,方法参数和循环变量的声明不需要def。2) 不需要的public你可以把main方法前面的public去掉,实际上
29、,groovy中默认的修饰符就是public,所以public修饰符你根本就不需要写,这点跟java不一样。3) 不需要的语句结束符groovy中没有语句结束符,当然为了与java保持一致性,你也可以使用;号作为语句结束符。在前面的每一句代码后面加上;号结束,程序同样正常运行(为了接受java程序员的顽固习惯)。4) 字符串连接符跟java一样,如果你需要把一个字符串写在多行里,可以使用+号连接字符串。代码可以这样写:def var=hello +world+,groovy!5) 一切皆对象事实上groovy对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。如果
30、你赋给它boolean ,那么不管它原来是什么类型,它接受boolean值之后就会自动把类型转变为boolean值。看下面的代码:def var=hello +world+,groovy!println var;println var.class;var=1001println var.class输出结果:hello world,groovy!class java.lang.stringclass java.lang.integervar这个变量在程序运行中,类型在改变。一开始给它赋值string,它的类型就是string,后面给它赋值integer,它又转变为integer。6) 循环删除整
31、个源文件内容,用以下代码替代:def var=hello +world+,groovy!def repeat(val)for(i = 0; i 5; i+)println val repeat(var)输出:hello world,groovy!hello world,groovy!hello world,groovy!hello world,groovy!hello world,groovy!注意循环变量i前面没有def。当然也没有java中常见的int,但如果你非要加上int也不会有错,因为从groovy1.1beta2之后开始(不包括1.1beta2),groovy开始支持java经典的
32、for循环写法。此外,上面的for语句还可以写成:for(i in0.5)这样的结果是一样的。7) string 和 gstring除了标准的java.lang.string以外(用号括住),groovy还支持gstring字符串类型(用“号括住)。把上面的for循环中的语句改成:printlnthis is $i:$val运行一下,你就会明白什么是gstring。8) 范围范围是一系列的值。例如“0.4”表明包含整数 0、1、2、3、4。groovy 还支持排除范围,“0.4”表示 0、1、2、3。还可以创建字符范围:“a.e”相当于 a、b、c、d、e。“a.e”包括小于 e 的所有值。范
33、围主要在for循环中使用。9) 默认参数值可以为方法指定默认参数值。我们修改repeat方法的定义:def repeat(val,repeat=3)for(i in0.repeat)printlnthis is $i:$val可以看到,repeat方法增加了一个参数repeat(并且给了一个默认值3),用于指定循环次数。当我们不指定第2个参数调用repeat方法时,repeat参数取默认值3。10) 集合groovy支持最常见的两个java集合:java.util.collection和java.util.map。前面所说的范围实际也是集合的一种(java.util.list)。 collec
34、tiongroovy 中这样来定义一个collection:def collect=a,b,c除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:collect.add(1);collect/key,value两个参数用于接受每个元素的键/值println$key:$value)map.eachprintln it/it是一个关键字,代表map集合的每个元素map.each(println it.getkey()+-+it.getvalue()除了用于迭代之外,闭包也可以单独定义:def say=word-printlnhi,$word!调用:say(groovy)say.call
35、(groovy&grails)输出:hi,groovy!hi,groovy&grails!看起来,闭包类似于方法,需要定义参数和要执行的语句,它也可以通过名称被调用。然而闭包对象(不要奇怪,闭包也是对象)可以作为参数传递(比如前面的闭包作为参数传递给了map的each方法)。而在java中,要做到这一点并不容易(也许c+中的函数指针可以,但不要忘记java中没有指针)。其次,闭包也可以不命名(当然作为代价,只能在定义闭包时执行一次),而方法不可以。12) 类groovy类和java类一样,你完全可以用标准java bean的语法定义一个groovy 类。但作为另一种语言,我们可以使用更groo
36、vy的方式定义和使用类,这样的好处是,你可以少写一半以上的javabean代码: 不需要public修饰符如前面所言,groovy的默认访问修饰符就是public,如果你的groovy类成员需要public修饰,则你根本不用写它。 不需要类型说明同样前面也说过,groovy也不关心变量和方法参数的具体类型。 不需要getter/setter方法不要奇怪,在很多ide(如eclipse)早就可以为序员自动产生getter/setter方法了。在groovy中,则彻底不需要getter/setter方法所有类成员(如果是默认的public)根本不用通过getter/setter方法引用它们(当然,
37、如果你一定要通过get/set方法访问成员属性,groovy也提供了它们)。 不需要构造函数不在需要程序员声明任何构造函数,因为groovy自动提供了足够你使用的构造函数。不用担心构造函数不够多,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的构造函数由于是map类型,通过这个参数你可以在构造对象时任意初始化它的成员变量)。 不需要returngroovy中,方法不需要return来返回值吗?这个似乎很难理解。看后面的代码吧。因此,groovy风格的类是这样的: 不需要()号groovy中方法调用可以省略()号(构造函数除外),也就是说下面两句是等同的:per
38、son1.setname kkperson1.setname(kk)下面看一个完整类定义的例子:class person def namedef age string tostring()/注意方法的类型string,因为我们要覆盖的方法为string类型$name,$age 如果你使用javabean风格来做同样的事,起码代码量要增加1倍以上。我们可以使用默认构造方法实例化person类:def person1=new person()=kkperson1.age=20println person1也可以用groovy的风格做同样的事:def person2=new
39、person(name:gg,age:22) /号可以省略println person2这样需要注意我们覆盖了object的tostring方法,因为我们想通过println person1这样的方法简单地打印对象的属性值。然而tostring 方法中并没有return 一个string,但不用担心,groovy 默认返回方法的最后一行的值。13) ?运算符在java中,有时候为了避免出现空指针异常,我们通常需要这样的技巧:if(rs!=null)rs.next() 在groovy中,可以使用?操作符达到同样的目的:rs?.next()?在这里是一个条件运算符,如果?前面的对象非null,执行
40、后面的方法,否则什么也不做。14) 可变参数等同于java 5中的变长参数。首先我们定义一个变长参数的方法sum:int sum(int. var) def total = 0for (i in var)total += ireturn total我们可以在调用sum时使用任意个数的参数(1个,2个,3个):println sum(1)println sum(1,2)println sum(1,2,3)15) 枚举定义一个enum:enum day sunday, monday, tuesday, wednesday,thursday, friday, saturday然后我们在switch语
41、句中使用他:def today = day.saturdayswitch (today) /saturdayorsundaycase day.saturday, day.sunday:printlnweekends are coolbreak/adaybetweenmondayandfridaycase day.monday.day.friday:printlnboring work daybreakdefault:printlnare you sure this is a valid day?注意,switch和case中可以使用任何对象,尤其是可以在case中使用list和范围,从而使分支满足多个条件(这点跟delphi有点象)。同java5一样,groovy支持带构造器、属性和方法的enum:enum planet mercury(3.303e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化学品安全与公共卫生管理研究考核试卷
- 服装行业中的供应商关系管理考核试卷
- 印刷电商平台的发展与应用考核试卷
- 焙烤食品制造市场趋势预测分析考核试卷
- 新媒体时代对服饰品牌传播的影响考核试卷
- 疾病预防与控制管理信息系统
- 玻璃纤维增强塑料模具制造技术研究考核试卷
- 广播电视接收设备的环保要求考核试卷
- 焙烤食品市场营销策略分析考核试卷
- 建筑装饰与室内设计的造型设计考核试卷
- MOOC 数据挖掘与python实践-中央财经大学 中国大学慕课答案
- (2024)辅警招聘公安基础知识考试题库及答案
- 夸美纽斯完整版本
- 社会主义发展史智慧树知到期末考试答案2024年
- 医院管理案例分享:住院患者人工气道同质化管理持续改进
- 项目设计招标实施工作方案
- 2024年护坡施工合同范本
- 糖尿病酮症酸中毒的诊断和治疗
- GB/T 19812.7-2024塑料节水灌溉器材第7部分:微灌用塑料阀门
- 乡镇社会稳定风险评估报告
- 2023年高考物理(江苏卷)真题详细解读及评析
评论
0/150
提交评论