OFBiz快速入门
原文URL:https://cwiki.apache.org/OFBIZ/ofbiz-tutorial-a-beginners-development-guide.html
一个大厦能够建多高,是由其基础决定的;一个软件能够’容纳‘多少功能,是由其架构决定的。
一个优秀的架构能够容许很多工程师协同合作,长期不断累积功能;反之,一个脆弱的架构则捆绑住工程师的手脚,每添加一个功能都是困难重重,涉及到很多人的交互,效率非常低下,长期维护也是非常麻烦,代价很高,到一定程度就遇到天花板,无法再加入功能了。
OFBiz(Open For Business)
现在关于OFBiz的所有相关的信息,大部分都是英文的,可能,在当下的IT江湖里,OFBiz还没有引起ITer或IT公司的广泛关注,也只是部分群体在学习与研究。当然,OFBiz的发展也是想当得快的,毕竟每天都有人commit代码,但是,版本的频繁发布,如果不能前后维持一个统一的技术架构和一个一致的编程开发模式,就会导致基于某些版本的OFBiz的系统应用不能很好的升级,留下了维护与移植的痛苦,其次就是现在的OFBiz框架本身就灰常的膨大,如果是一般的小型应用,真的有点杀鸡用牛刀的感觉了,不过由于OFBiz提供了一种可插拔的机制,也可以剔除一些不相关的应用。可能也是当前没有什么人愿意花时间成本去研究的原因!(当然,原因肯定是多方面的!也不用去细究了!一切还是得源自自我爱好!要不然,都是胡扯!)
下面的文字,都是自己用烂掉牙的英语翻译能力翻译的,定会存在不少纰漏与错误!请大伙们多多指点了!有些地方,如果自己找不到很好的中文表述,我会加上英语原文的!
这个教程被分为6个部分,也是一个由浅入深的过程。
第一部分
NOTE1:这里的代码很多都会来自Example组件。你会经常找到有关最新的OFBiz代码在Example组件中。无论在什么时候你为这个应用去看一些简单代码,都应该应用Example组件,这个能帮助你在OFBiz上开发的更好!每当有新特性出现,都会被优先加到Example组件中作为参考范例。所以,想在OFBiz基础框架上进行开发应用时,应该多关注Example组件。了解Example组件,能更好的了解OFBiz的新特性和OFBiz的编程模型是什么。
NOTE2:不要从其他组件拷贝任何文件,这样做,文件的版本号也会被遗弃拷贝的。始终去创建一个新文件,真的要求了,可以从文件中拷贝些内容。也可以对无用的代码有很强的意识。
1.创建第一个名为“practice”的应用程序1.1 在OFBiz的hot-deploy目录中,创建一个子目录,命名为:practice(hot-deploy/practice),所创建的目录名称应该匹配OFBiz中新组件的名称。
【注意】要记住,所有客户化的开发都是尽可以被部署到hot-delopy目录中。
1.2 在(hot-deploy/practice)目录中创建名称为ofbiz-component.xml的文件。并加入以下的内容:
<?xml version="1.0" encoding="UTF-8"?>
<ofbiz-component name="practice"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-component.xsd">
<resource-loader name="main" type="component"/>
<webapp name="practice"
title="Practice"
server="default-server"
base-permission="OFBTOOLS"
location="webapp/practice"
mount-point="/practice"
app-bar-display="false"/>
</ofbiz-component>
很明显,这个文件的作用就是我们创建的(practice)应用集成到OFBiz的入口点。这个文件是用来描述OFBiz框架集中某个应用的描述文件。那么,我们来了解一下这个文件里各个元素的含义吧。
<resource-loader name="main" type="component"/>
name属性可以是任意的字符串,type属性就是要告诉OFBiz,我们将要装载一个组件到OFBiz容器中。
在<webapp>标签中,拥有很多不同的属性,其含义如下:
name:定义我们新建的web应用名称(应该是唯一的不与其他的应用名称有冲突)
title:该应用的标题,会被显示在顶部导航条中。
server:让OFBiz知道使用什么服务器
base-premission:要求用户必须要具有OFBTOOLS的权限才能使用这个应用。‘admin’管理员一直都有这个权限,我们就不必去创建任何新用户了。
location:表示服务器默认的根目录的位置路径。
mount-point:访问这个资源的URL路径。在本机上,就是 localhost:8080/practice
app-bar-display:如果为TRUE,表示我们希望组件显示在主应用的标签。也是共同OFBiz的装饰器的一部分。
目前为止,应用的第一步已经弄好!至少,在上面,你创建的内容已经可以被OFBiz加载了!下面的就是按照Java EE规范来创建WEB应用的目录结构了!
2.创建Web应用程序在OFBiz中,创建一个WEB APP的目录结构是完全符合Java EE的标准规范的!并没有手痒,自己另起灶炉!这一点,可以说,如果在日后不想把应用程序搭建在OFBiz之上,移植也是很方便!
2.1 在practice组件中创建目录(webapp),完整路径是:hot-deploy/practice/webapp
这个目录包含了所有与webapp相关的文件。
2.2 在webapp中创建子目录(practice),这个也是你将要开发的webapp名称。(hot-deploy/practice/webapp/practice)(有点不流利的翻译,杯具)。在OFBiz中,一个组件可以被多个webapp应用连接。e.g. (marketing)组件就有两个webapps,分别是(marking)和(sfa)。webapp都是依据Java EE webapp 标准来创建的。
PS:如果一个组件中有两个可连接的webapps,那么是如何配置的呢?后面分析。
2.3 创建一个(WEB-INF)目录在webapp中,完整路径是:hot-deploy/practice/webapp/practice/WEB-INF
当然,既然是基于OFBiz上开发JavaEE APPs,就会与标准的有点不一样的,但并不是那种结构上的改变,而是类似要在标准的JavaEE应用中加入日志系统等类似,只是需要配置两个文件,就可以标识,你现在的应用是一个OFBiz webapp。两个文件分别是:controller.xml 和 web.xml
controller.xml
告诉OFBiz如何去处理来自visitors的requests。采取什么的actions并呈现(render)什么页面。
web.xml
告诉OFBiz哪些资源(数据库和业务逻辑访问)可用于此webapp以及如何处理web相关问题,如欢迎页面,重定向和错误页面。
2.4 web.xml的内容(符合Java EE的webapp规范)。可以从/framework/example组件中拷贝。我们只需要修改其中一些重要的值,如<display-name>、localDispatcherName、mainDecoratorLocation和webSiteId。修改后的内容如下:
<context-param>
<param-name>webSiteId</param-name>
<param-value>PRACTICE</param-value>
<description>A unique ID used to look up the WebSite entity to get information about catalogs, etc.</description>
</context-param>
<context-param>
<param-name>localDispatcherName</param-name>
<param-value>practice</param-value>
<description>A unique name used to identify/recognize the local dispatcher for the Service Engine</description>
</context-param>
<context-param>
<param-name>mainDecoratorLocation</param-name>
<param-value>component://practice/widget/CommonScreens.xml</param-value>
<description>The location of the main-decorator screen to use for this webapp; referred to as a context variable in screen def XML files.</description>
</context-param>
暂停……