![]() 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名称是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关于接口一的文章 |
|