大家来说说ofbiz

我下载了一个ofbiz2.0。试用了一个,只能发现一个购物车的例子。但我最最初知道它的时候,应该是个工作流方面的东东啊。

谁能讲一个ofbiz2.0里包括哪些大的功能啊!最好我简单的使用说明

我看server.xml中定义了下列应用,高手简单介绍一个每个的功能
/webtools
/ecommerce
/catalog
/partymgr
/ordermgr
/workeffort
/accounting
/facility
/marketing

我简单谈一下整体架构,可能有不对地方,请大家指正,我觉得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是最值得借鉴的。


我们公司目前就是在ofbiz+struts的基础上进行二次开发
板桥对ofbiz的理解的确深入。
我也抛块砖头

ofbiz2.0.0中RuleEngine也是很重要的一个组成部分,它主要是采用了Prolog这种人工智能领域的编程语言的精髓部分。通过一个对类Prolog愈发进行解析的Parser,ofbiz完整地实现了抽象的逻辑规则到具象的程序流程控制的映射。

强烈建议大家看看这一部分的代码。

要理解它的rule engineer,就必须阅读译本书"build parser in java",这本书类似那种"Design patterns in java"。

我现在也一下全部理解rule engineer,但是正好手上一个项目要用到rule engineer,所以非常想知道如何定义xx.logic 来使用它。

To banq,
它的rule engine在webtools下有一个demo, 你可以看一下, 先定义一些rule sets, 然后运行一个query, 就可以看到结果了, 好像就是先给出一些条件, 然后写一个方程, rule engine帮你给出方程的解, 没有用它在实际项目中, 不知道那些地方合适使用.

谈谈我对Ofbiz的感受:

我们的工作小组也是用ofbiz来做二次开发, 几乎是全搬了它的所有的engine和util, 除了rule engine没有用到以外, 其他都在实际的项目中用过.

我们使用JSP + 一些自定义的Taglib来做View, taglib的作用主要是类似于struts的formbean, 即方便的读取对象的属性, 可以节约大量的代码工作. 也有在项目中利用它的Velocity ViewHandler用过Velocity做View.

我们使用它的minilanguage来做数据校验, 然后把逻辑处理写在Service里面.

使用它的security模块, 稍微改动了一些, 就实现了Single Sign On.

它的Entity Engine部分还有一个很cool的特性是利用它的Cache Util, 对于系统性能的提高是非常好的一个途径. 并且利用它的Service ECA的方式或者Group Service的方式可以达到不同JVM上的Cache的同步, 这样对于有loading balance要求的multi jvm系统, 也可以达到要求.

在2.0beta3以后, Entity Engine在数据库查找的操作上有了很大的提高. GenericDelegator.findByCondition, 可以让我们几乎不用再写SQL语句了, 一些复杂的查询都可以用它来完成.

OFBiz是很有前途的一个open source的项目, 它的mail list上有经常有很多有意思的想法在讨论, 建议大家可以看看.

原来Quake也在这里!
rule引擎 我总是想不太明白!

> 要理解它的rule engineer,就必须阅读译本书"build parser
> in java",这本书类似那种"Design patterns in java"。
>
请教banq:
"build parser in java"是一本什么书, 哪里有下载?

build parser in jav在amazon有卖,我正在找下载版本。

ofbiz的模板系统:

主要采取Jsp,regions.xml是非常关键的总的页面定制文件:


<define id='MAIN_REGION' template='/templates/main_template.jsp'>
<put section='title'>Application Page</put> <!-- this is a default and is meant to overridden -->
<put section='header' content='/includes/header.jsp'/>
<put section='appbar' content='/includes/appbar.jsp'/>
<put section='error' content='/includes/errormsg.jsp'/>
<put section='content' content='/main.jsp'/> <!-- this is a default and is meant to overridden -->
<put section='footer' content='/includes/footer.jsp'/>
</define>

.....

<define id='logikus' region='MAIN_REGION'>
<put section='title'>Run Logikus Rulesets</put>
<put section='content' content='/rules/logikus.jsp'/>
</define>

.....

它的思想是:
1.页面区域内容定义: 将一个页面分为:header appbar errormsg main(内容) footer等5个区域,除了main外,其它都属于模板,是每个页面都一致的。

在regions.xml定义main区域的内容,比如上面定义内容为/rules/logikus.jsp

那么这个页面最后输出到浏览器时,就是一个关于rule应用的页面。

2.布局定义:即layout,这个功能由/templates/main_template.jsp 来定义的,这其实就是一个普通的模板html文件,

相关taglib的类操作在org.ofbiz.core.region下。

上述思想和Struct + tiles petstore的WAF在思想上是一致的,大同小异。

一不小心总结了一下网页模板原理。呵呵

曾经花了两周时间进行了一些初步的了解,对于workflow,rule engine的没什么理解,个人觉得entity engine, service engine, mini-lang,和region都是不错的东西。

原来作过一个很简单的ppt,

hi_liuyang86sD1B703W.ppt

ofbiz中的rule engine是否可以单独拿出,运行在我们的项目中??
大家给各意见???

rule engine是可以单独拿出,我已经拿出来,它其实就是分析器,我不是很确定它的分析能力怎样?

ofbiz我觉得有个问题,就是它的WEB的MVC模式做得不很好,看看login.jsp就可以发现,Jsp中还是嵌入了java的代码,它的form的Action是


<form method="POST" action="<ofbiz:url>/login<%=UtilFormatOut.ifNotEmpty(previousParams, "?", "")%></ofbiz:url>" name="loginform" style='margin: 0;'>

其中
String previousParams = (String) session.getAttribute(SiteDefs.PREVIOUS_PARAMS);

也就是说,它是将以前的参数存放在session中,我认为这个用户验证机制应该做在servlet中。

总体来说,Liferay和ofbiz及Jive这些开源代码在WEB的Jsp方面还是做得不到位,明显留有以前版本的痕迹。

使用Struts就会彻底更新,但是因为更改量巨大琐碎,相当于重新开发WEB层,也许这也是这些源代码力不从心的地方。

前段时间在忙一个项目,好久没上来了,谢谢大家对ofbiz的深刻解释。对我开始研究ofbiz有很大的帮助