ofbiz学习介绍
ofbiz学习介绍
我简单谈一下整体架构,可能有不对地方,请大家指正,我觉得ofbiz对于建立大中型产品系统非常有借鉴,一般中大型应用抽象归结不外乎三种模型:数据库、处理器服务service 以及流程定义,这三个方面ofbiz正是ofbiz的基础:ofbiz主要是分几块引擎:Entity 和Service 和工作流。Entity非常类似EJB中的实体bean,它负责系统中所有数据库部分,就类似在内存中建立数据库的表,有两个重要类GenericDelegator,专门负责数据源;GenericValue 是具体product的抽象类。
我们再看service,GenericEngine是核心,包括同步服务和异步服务,这两种service在J2EE中就是servlet/session bean的同步处理和JMS的异步服务。
所有的service通过ServiceDispatcher进行分配,需要同步服务的,分配GenericAsyncEngine出来服务,同时检查该用户是否拥有这类服务的权限。每个GenericDelegator都对应一个ServiceDispattcher。
ModelService 这是将request信号分解后,根据requestHanlder取出相应service后的一个承前启后的类,它有IN/OUT/INOUT三个mode。
我们看看下面service配置类:
<service name="userLogin" engine="java" location="org.ofbiz.commonapp.security.login.LoginServices" invoke="userLogin"> <description>Authenticate a username/password; create a UserLogin object</description> <attribute name="login.username" type="String" mode="IN"/> <attribute name="login.password" type="String" mode="IN"/> <attribute name="userLogin" type="org.ofbiz.core.entity.GenericValue" mode="OUT" optional="true"/> </service>
上面的service名称是userLogin,它是采用java engine. 这个服务需要两个输入参数(来自request): login.username and login.password. 如果这两个参数不符合名称和对象类型,这个service将不会调用,有些参数可以不发往给service,这些参数需要定义为optional.
在这个service被调用以后, 输出OUT参数将被检测一下,当然只有标记为required才会被检测,当然这个服务也可以不返回任何参数。
ofbiz也有自己一套类似struts的MVC模型。
ofbiz的Entity引擎虽然不错,可以在上面挂很多具体应用,但是我感觉似乎复杂点,不如使用Jbuilder CMP来开发更方便。
ofbiz的service framework是最值得借鉴的。
步骤大概是这样:
1. 编写xpdl文件
2. 把xpdl文件用webtools下提供的xpdl reader 导入到数据库
3. 在service定义文件里添加上你写的workflow的表示, service type是workflow
4. 写好你在xpdl文件里用到的一些自定义的Implementation Tool, 我都是用PROCEDURE, 即service, 用来实现对应用数据的操作.
5. 如果你有用到ExtendedAttribute的limitAfterStart, 还要写limitService, 通常我用limitService来实现超时处理.
6. 最后是写一些test unit利用service engine来做一些测试, 主要目的是看定义在xpdl里的Transitions是否正确.
我的文档向来写得很差, 以上只是一些要点, 希望对你有用.
我道建议你先看看ofbiz中的XPDL,从这里入手你会决定容易一点。
ofbiz_home/commonapp/src/org/ofbiz/commonapp/order/order/orderProcessXPDL.xml 读懂它可能你还要参看WFMC关于接口一的文章