ofbiz框架以及核心原理介绍
1. 什么是Ofbiz
Ofbiz(Open for business)是一个开源的,基于J2EE和XML规范的,用于构建大型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架(Framework)。
Ofbiz几乎实现了所有的J2EE核心设计模式,各个模块之间的耦合比较松散,用户能够比较容易的根据自己的需要进行拆卸。
Ofbiz内置了许多其它开源项目,如JBoss,PostgreSQL,MySQL,Apache,Jetty,JOTM,Jpublish,BeanShell,Ant,BSF,Log4J,等,提供了相对成本比较低的解决方案。同时,用户也可以比容易的更换成其他组件,如将Jboss&&Tomcat换成Bea Weblogic或者IBM Websphere。
2. Ofbiz的好处
l 缩短开发周期,降低成本
据称,很多基于J2EE的失败实践,都可以归结于拙劣的设计。J2EE规范并不复杂,但是如何遵照J2EE规范,根据自己的业务需求,做一个合适的、高效的、可扩展的设计,是需要实际经验和智慧的。国外的大中型系统基于J2EE的早就很多了,国内近几年也多了起来,但是优秀的设计人员不是很多。
Ofbiz的价值在于它的架构非常好,不仅用到了几乎所有的J2EE核心设计模式(Sun公司推荐的),而且还实现了工作流、业务规则引擎,以处理灵活的与变更。这样,就避免了缺少优秀设计人员所造成的拙劣设计。
基于Ofbiz开发,无疑会缩短开发周期,好的设计以及工作流和业务规则引擎的引入,也最大程度的降低了系统的维护成本。
l 用很少的 Code 完成复杂的处理
这是Ofbiz 宣称的优点之一。如果把Ofbiz消化了,则基于Ofbiz开发一个CRM和ERP系统会大大缩短开发周期,由于Ofbiz优良的设计,维护的成本应该比较小。
Ofbiz 已经完成了大部分业务类软件系统都需要的部件,像用户认证、工作流、业务规则处理等,很多业务需求都可以通过写XML配置文件,以及很少的Java代码来完成。代码量不大,但知道怎么写会比较费时。弄懂Ofbiz以后,写实现代码通常会比较简单,只需要按照它的开发机制度就是了。
l 扩展性和移植性好
OFBIZ所提供的系统框架,是一个纯Java的应用程序。框架提供的接口十分的完备,例如核心部件实体引擎,早期版本就有,已经十分的成熟。通过实体引擎,用户不用直接操纵数据库,建立库表、查询、视图、触发器等都可以通过写XML配置文件来完成。也有人提出,实体引擎不能够处理复杂的SQL查询,实际上,一方面这种复杂的SQL查询很少遇到,另一方面实体引擎也同样允许你用SQL代码来操纵这种复杂的查询。
OFBIZ开发者同时维护和Weblogic,Tomcat,Jboss,Resin,Orion等16个厂商的Web和App应用服务器的兼容版本.
OFBIZ开发者同时维护和Oracle,MySql,Sybase,PostgreSQL,Hsql等数据库产品的兼容支持,包括编译、打包、部署到这些数据库产品或应用服务器产品的运行环境下。
OFBIZ开发者同时在Unix和Windows两大操作系统上进行开发和测试,而且具备Java应用系统的所有跨平台的特点。
有了这些,对于大型企业级应用系统的具体、特定实现来说,你有信心实现所谓的“一次开发,到处运行”。
l 没有版权问题
免费的,可以用于商业目的,可以分发。
3. Ofbiz的MVC 模式实现
Ofbiz最大的价值,也许就是它不仅仅是一个技术框架,更是一个实现企业应用得很好的业务框架。它的MVC模式不仅仅是Web层,而是贯穿于业务层和数据层,每一层都有出色的控制器。
数据层的控制器 (Entity Engine)
实体引擎是Ofbiz最有价值、最核心的、也是最稳定的一个数据层控制器,通过它基本不用编码或很少编码就可以访问数据层。Ofbiz提供了用XML些配置文件的方法来操纵数据。
实体引擎的功能类似于CICS、实体EJB、以及其他O-R Mapper。但是,Ofbiz的实体引擎不仅强大、而且灵活,程序员不需要JDBC知识,不用写SQL代码。基本上,实体引擎的封装能够解决绝大部分的数据库操作,同时,也提供了给你写SQL代码,实现复杂SQL查询的空间。
实体引擎采用了不少核心J2EE设计模式,如值对象、代表、助手等模式,用户的API接口比较友好。
逻辑层的控制器 (Service Engine)
服务引擎是Ofbiz的另一个核心组件。Ofbiz只有这两个核心组件。实体引擎代表业务数据,而服务引擎代表了业务逻辑。
引入服务引擎的另一个价值是,它使得Ofbiz业务框架不限于Web应用。非Web的客户端包括java 应用、EJB、甚至SOAP都可以直接调用,这样,框架的可扩展性非常好。
服务引擎的服务可以分为同步、异步(关心还是忽略结果),支持JMS。具体实现方式可以是一个java 静态方法、工作流、Bean Shell脚本等。如下图:

Web层控制器 (Control Servlet, JPublish, etc)
Web层控制器的核心是Control Servlet。和Struts一样,Web层的流控制器的配置文件也是一个XML文件。

原文地址:https://blog.csdn.net/levelo/article/details/54693900
ofbiz框架以及核心原理介绍的更多相关文章
- 高性能消息队列 CKafka 核心原理介绍(上)
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...
- 开源框架TLog核心原理架构解析
前言 最近在做TLog 1.2.5版本的迭代,许多小伙伴之前也表示说很想参与开源项目的贡献.为了让项目更好更快速的迭代新特性以及本着发扬开源精神互相学习交流,很有幸招募到了很多小伙伴与我一起前行. 为 ...
- 【转】diamond专题(二)– 核心原理介绍
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 通过模拟Mybatis动态代理生成Mapper代理类,讲解Mybatis核心原理
本文将通过模拟Mybatis动态代理生成Mapper代理类,讲解Mybatis原理 1.平常我们是如何使用Mapper的 先写一个简单的UserMapper,它包含一个全表查询的方法,代码如下 pub ...
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...
- Rookey.Frame v1.0 视频教程之三发布-框架核心思想介绍
本期发布视频: (三)Rookey.Frame v1.0框架核心思想 介绍了Rookey.Frame v1.0框架搭建的核心思想,将框架核心思想理解清楚,对框架运行就会得心应手 官方视频教程: htt ...
- 新书介绍 -- 《Redis核心原理与实践》
大家好,今天给大家介绍一下我的新书 -- <Redis核心原理与实践>. 后端开发的同学应该对Redis都不陌生,Redis由于性能极高.功能强大,已成为业界非常流行的内存数据库. < ...
- 03 Yarn 原理介绍
Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过Se ...
- Spring框架和MVC原理
Spring框架和MVC原理 目录 Spring框架 SpringMVC工作原理 参考资料 回到顶部 Spring框架 Spring当前框架有20个jar包,大致可以分为6大模块: Core Cont ...
随机推荐
- 快速幂(Fast Pow)
定义 快速求a^b%c的算法 原理 指数可以被二进制分解 那么a^b可以分解为a^2^k1*a^2^k2*…… 又显然a^2^(k+1)=a^(2^k*2)=(a^2^k)^2 所以可以将指数在二进制 ...
- 尝试用了一哈wepy框架的感想
恶心死我, 1 在项目里出现了中文乱码(utf-8在wpy文件里有中文和注释--编译后就转化成乱码, 把代码拷在另外的项目里,(该项目没有中文乱码现象,)编译出来就出现中文乱码, 然后我再在所拷的代码 ...
- @PathVariable注解使用
@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值 语法: @PathVariable("xxx")通过 @PathVariable 可以将URL ...
- IDEA maven 配置,运行比较慢,加截本地仓库资源数据
在 Runner 配置了参数: -DarchetypeCatalog=internal
- nginx 缓存设置
浏览器缓存原理 浏览器缓存 HTTP协议定义的缓存机制(如:Expires:Cache-control等) 2.浏览器无缓存 3.客户端有缓存 校验过期机制 校验是否过期 ...
- 手动写Makefile编译Android NDK的so
之所以摒弃NDK,是因为NDK编译出来的so太大,而且导出表总有一些没用的符号.而且手动编译的话,可以得到编译过程中间的.i和.s文件,可以删除一些没用的汇编代码.现在代码列出来:我的NDK C的代码 ...
- #1123-JSP隐含对象
JSP 隐含对象 JSP隐含对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐含对象也被称为预定义变量. JSP所支持的九大隐含对象: 对象,描述 reque ...
- iOS-Swizzle
最后更新:2017-06-21 一.先说结论 void swizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector) { M ...
- 【转】Java MySQL数据类型对照
Java MySQL数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.S ...
- POJ 1383 Labyrinth (bfs 树的直径)
Labyrinth 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/E Description The northern part ...