实体引擎(Entity Engine)在OFBiz中是不可或缺的核心组件。本文并不是一篇实体引擎的使用帮助,只是想说明如何独立地去使用实体引擎,可以方便自己阅读源码。笔者将建立一个gradle项目,用来管理依赖。
首先,需要下载OFBiz,可以下载发布包,也可以下载SVN源码。发布包下载地址:http://ofbiz.apache.org/download.html,SVN源码下载:
svn co http://svn.apache.org/repos/asf/ofbiz/trunk ofbiz
然后,我们来建gradle项目,创建一个settings.gradle和build.gradle文件:
rootProject.name = 'ofbiz-test-entityengine'
apply plugin: 'java'
apply plugin: 'maven'
project.group = 'com.zf'
project.version = '1.0.0'
project.archivesBaseName = 'ofbiz-test-entityengine'
sourceCompatibility = '1.6'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
if (!hasProperty('mainClass')) {
ext.mainClass = 'com.zf.ofbiz.entity.Main'
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile (
'commons-codec:commons-codec:1.6'
,'commons-dbcp:commons-dbcp:1.4'
,'commons-lang:commons-lang:2.6'
,'commons-logging:commons-logging:1.1.2'
,'commons-pool:commons-pool:1.3'
,'mysql:mysql-connector-java:5.1.20'
,'log4j:log4j:1.2.17'
,'javolution:javolution:5.4.3'
)
testCompile (
'junit:junit:4.10'
)
}
task sourcesJar(type: Jar, dependsOn: classes, description: 'Creates a jar from the source files.') {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives jar
archives sourcesJar
}
可以看到依赖的包有由compile指定的几个,这是在maven仓库里有的;还有一部分是compile fileTree指定的项目libs目录下的所有jar包,主要有:
- antisamy-bin.1.2.jar
- geronimo-transaction-2.1.1.jar
- ofbiz-base.jar
- servlet-api-3.0.jar
- clhm-release-1.0-lru.jar
- icu4j-49_1.jar
- ofbiz-entity.jar
- xercesImpl-2.9.1.jar
- geronimo-j2ee-connector_1.5_spec-1.0.jar
- jakarta-oro-2.0.8.jar
- ofbiz-geronimo.jar
- xstream-1.3.1.jar
- geronimo-jta_1.1_spec-1.1.1.jar
- jdbm-1.0-SNAPSHOT.jar
- owasp-esapi-full-java-1.4.jar
这此依赖包都是必须的。在OFBIZ_HOME/framework/下的各目录里去搜索都能找到。ofbiz-*.jar是编译OFBiz生成出来的,所以需要先执行一下OFBIZ_HOME/ant build。
最后,我们来测试一下OFBiz的实体引擎吧。案例将会设计三个实体(对应两张表):User、Party、PartyAndUser。这三个实体的定义在entitymodel.xml文件中。
<entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/entitymodel.xsd">
<title>Entity of an Open For Business Project Component</title>
<description>None</description>
<version>1.0</version>
<entity package-name="org.zf.entity" entity-name="Party" title="Party Entity" no-auto-stamp="true">
<field name="partyId" type="id-int"></field>
<field name="partyName" type="name"></field>
<prim-key field="partyId"/>
</entity>
<entity package-name="org.zf.entity" entity-name="User" title="User Entity" no-auto-stamp="true">
<field name="userId" type="id-int"></field>
<field name="partyId" type="id-int"></field>
<field name="loginName" type="name"></field>
<prim-key field="userId"/>
</entity>
<view-entity package-name="org.zf.entity.view" entity-name="PartyAndUser" title="Party and User Entity">
<member-entity entity-alias="PARTY" entity-name="Party"/>
<member-entity entity-alias="USER" entity-name="User"/>
<alias-all entity-alias="PARTY"/>
<alias-all entity-alias="USER"/>
<view-link entity-alias="PARTY" rel-entity-alias="USER">
<key-map field-name="partyId" rel-field-name="partyId"/>
</view-link>
</view-entity>
</entitymodel>
除了我们定义的实体外,我们还要配置一下实体引擎,主要配置的是数据库连接、实体配置目录以及数据字段类型。通过文件entityengine.xml定义。
<?xml version="1.0" encoding="UTF-8" ?>
<entity-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/entity-config.xsd">
<resource-loader name="fieldTypeLoader" class="org.ofbiz.base.config.ClasspathLoader" prefix="fieldtype/"/>
<resource-loader name="entityLoader" class="org.ofbiz.base.config.ClasspathLoader" prefix="entity/"/>
<transaction-factory class="org.ofbiz.geronimo.GeronimoTransactionFactory"/>
<connection-factory class="org.ofbiz.entity.connection.DBCPConnectionFactory"/>
<debug-xa-resources value="false" />
<delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main">
<group-map group-name="org.ofbiz" datasource-name="localmysql"/>
<group-map group-name="org.ofbiz.olap" datasource-name="localmysqlolap"/>
<group-map group-name="org.ofbiz.tenant" datasource-name="localmysqltenant"/>
</delegator>
<!-- 实体配置 -->
<entity-model-reader name="main">
<resource loader="entityLoader" location="entitymodel.xml" />
</entity-model-reader>
<entity-group-reader name="main"/>
<entity-eca-reader name="main"/>
<entity-data-reader name="tenant"/>
<entity-data-reader name="seed"/>
<entity-data-reader name="seed-initial"/>
<entity-data-reader name="demo"/>
<entity-data-reader name="ext"/>
<entity-data-reader name="ext-test"/>
<entity-data-reader name="ext-demo"/>
<!-- 数据类型配置,可以拷贝OFBIZ_HOME/framework/entity/fieldtype/fieldtypemysql.xml文件到项目 -->
<field-type name="mysql" loader="fieldTypeLoader" location="fieldtypemysql.xml"/>
<!-- 数据源配置 -->
<datasource name="localmysql"
helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
field-type-name="mysql"
check-on-start="true"
add-missing-on-start="true"
check-pks-on-start="false"
use-foreign-keys="true"
join-style="ansi-no-parenthesis"
alias-view-columns="false"
drop-fk-use-foreign-key-keyword="true"
table-type="InnoDB"
character-set="utf8"
collate="utf8_general_cs">
<read-data reader-name="tenant"/>
<read-data reader-name="seed"/>
<read-data reader-name="seed-initial"/>
<read-data reader-name="demo"/>
<read-data reader-name="ext"/>
<read-data reader-name="ext-test"/>
<read-data reader-name="ext-demo"/>
<inline-jdbc
jdbc-driver="com.mysql.jdbc.Driver"
jdbc-uri="jdbc:mysql://localhost/ofbiz?characterEncoding=UTF8"
jdbc-username="ofbiz"
jdbc-password="ofbiz"
isolation-level="ReadCommitted"
pool-minsize="2"
pool-maxsize="250"
time-between-eviction-runs-millis="600000"/>
</datasource>
<datasource name="localmysqlolap"
helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
field-type-name="mysql"
check-on-start="true"
add-missing-on-start="true"
check-pks-on-start="false"
use-foreign-keys="true"
join-style="ansi-no-parenthesis"
alias-view-columns="false"
drop-fk-use-foreign-key-keyword="true"
table-type="InnoDB"
character-set="utf8"
collate="utf8_general_cs">
<read-data reader-name="tenant"/>
<read-data reader-name="seed"/>
<read-data reader-name="seed-initial"/>
<read-data reader-name="demo"/>
<read-data reader-name="ext"/>
<read-data reader-name="ext-test"/>
<read-data reader-name="ext-demo"/>
<inline-jdbc
jdbc-driver="com.mysql.jdbc.Driver"
jdbc-uri="jdbc:mysql://127.0.0.1/ofbizolap?autoReconnect=true"
jdbc-username="ofbiz"
jdbc-password="ofbiz"
isolation-level="ReadCommitted"
pool-minsize="2"
pool-maxsize="250"
time-between-eviction-runs-millis="600000"/>
</datasource>
<datasource name="localmysqltenant"
helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
field-type-name="mysql"
check-on-start="true"
add-missing-on-start="true"
check-pks-on-start="false"
use-foreign-keys="true"
join-style="ansi-no-parenthesis"
alias-view-columns="false"
drop-fk-use-foreign-key-keyword="true"
table-type="InnoDB"
character-set="utf8"
collate="utf8_general_cs">
<read-data reader-name="tenant"/>
<read-data reader-name="seed"/>
<read-data reader-name="seed-initial"/>
<read-data reader-name="demo"/>
<read-data reader-name="ext"/>
<read-data reader-name="ext-test"/>
<read-data reader-name="ext-demo"/>
<inline-jdbc
jdbc-driver="com.mysql.jdbc.Driver"
jdbc-uri="jdbc:mysql://127.0.0.1/ofbiztenant?autoReconnect=true"
jdbc-username="ofbiz"
jdbc-password="ofbiz"
isolation-level="ReadCommitted"
pool-minsize="2"
pool-maxsize="250"
time-between-eviction-runs-millis="600000"/>
</datasource>
</entity-config>
这样主要的配置文件都已经有了。对了,还要把OFBIZ_HOME/framework/base/config/cache.properties文件拷贝到项目,也可以再OFBIZ_HOME/framework/base/config/log4j.xml文件到项目目录。下面就是我们的测试代码了:
package com.zf.ofbiz.entity;
import java.util.List;
import org.ofbiz.entity.Delegator;
import org.ofbiz.entity.DelegatorFactory;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.condition.EntityCondition;
public class Main {
public static void main(String[] args) throws Exception {
Delegator delegator = DelegatorFactory.getDelegator("default");
List<GenericValue> valueList = delegator.findList("PartyAndUser", EntityCondition.makeCondition("partyName", "TEST"), null, null, null, true);
System.out.println(valueList.size());
}
}
这样我们就可以独立使用实体引擎了,可以更方便地去测试、学习OFBiz的实体引擎。
分享到:
相关推荐
**Ofbiz实体引擎详解** Apache Ofbiz(Open for Business Project)是一个开源的企业级应用框架,主要专注于电子商务、供应链管理、CRM、财务等业务流程。在Ofbiz中,实体引擎是核心组件之一,它负责处理数据模型,...
OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨...包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。
基于spring封装的ofbiz所有服务,使用spring security进行安全验证,可以方便的发布为微服务,同时实现了一套直接使用ofbiz实体引擎操作ofbiz所有数据库表的spring应用框架设计
通过灵活的实体模型、高效的实体引擎、丰富的服务层、流程化的业务处理、智能的缓存策略、适应性的数据分区以及严谨的安全机制,OFBiz提供了强大且灵活的数据管理能力,为企业信息化建设提供了有力支撑。在实际项目...
- **Ofbiz实体引擎(九) 多租户**:实体引擎支持多租户架构,允许在一个OFBiz实例上管理多个独立的业务环境,每个环境有自己的数据和配置。 - **Ofbiz权限判断语法**和**权限设计详解**:OFBiz具有精细的权限管理...
实体引擎是OFBIZ中的数据管理部分,负责数据库操作。它提供了实体定义语言(Entity Definition Language, EDDL)用于描述业务对象,并支持实体-关系(ER)模型,使得数据操作更加灵活和高效。 事务处理引擎则处理...
实体则代表业务对象,如产品、订单和客户,它们的定义存储在数据库模型中,并通过实体引擎进行操作。 在Ofbiz中,工作流系统允许定义和自动化业务流程,而事件处理系统则用于响应各种内部或外部事件,如定时任务或...
实体在OFBiz中相当于数据库表,所以新建一个实体模型文件`entitymodel.xml`,定义部门表(Department)。在`ofbiz-component.xml`中添加对新实体的引用,确保在构建和加载数据时能识别这个实体。 构建OFBiz有两种...
在查询方面,手册将深入讲解如何利用Ofbiz的实体引擎(Entity Engine)进行高效的数据库查询。这可能包括使用EntityFinders、实体表达式语言(EntityExprs)以及SQL查询的自定义实现。此外,手册还会涉及事务管理和...
【ofbiz综合使用手册】是针对初学者的指导材料,主要介绍了如何配置和使用ofbiz这一企业级开源应用框架。ofbiz遵循了Model-View-Controller(MVC)设计模式,这种模式对于大型商业逻辑项目的开发尤其有益,因为它...
2. **读取(Retrieve)**: 要读取已存在的数据,开发者可以使用查询语言如EQL(Entity Query Language)或者通过服务调用实体引擎的`find`方法。例如,获取所有`CmsRegister`条目,可以根据特定条件如发布日期或作者...
* entity:Ofbiz 的实体关系模型代码 * hot-deploy:Ofbiz 的热部署文件 * ofbizComponents:Ofbiz 的组件配置文件 * webtools:Ofbiz 的 Web 工具代码 使用 Eclipse 打开 Ofbiz 的 Ant 命令 我们可以使用 Eclipse...
- **实体**:OFBiz的实体模型是其数据存储的基础,API文档会详细列出所有可用的实体及其属性。 - **方法**:详述了每个接口提供的方法,包括参数、返回值和可能抛出的异常。 3. **OFBiz 其他资源** OFBiz其它...