`
eidolon
  • 浏览: 39953 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

独立使用OFBiz实体引擎

阅读更多

实体引擎(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包,主要有:
  1. antisamy-bin.1.2.jar
  2. geronimo-transaction-2.1.1.jar
  3. ofbiz-base.jar
  4. servlet-api-3.0.jar
  5. clhm-release-1.0-lru.jar
  6. icu4j-49_1.jar
  7. ofbiz-entity.jar
  8. xercesImpl-2.9.1.jar
  9. geronimo-j2ee-connector_1.5_spec-1.0.jar
  10. jakarta-oro-2.0.8.jar
  11. ofbiz-geronimo.jar
  12. xstream-1.3.1.jar
  13. geronimo-jta_1.1_spec-1.1.1.jar
  14. jdbm-1.0-SNAPSHOT.jar
  15. 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的实体引擎。
 
分享到:
评论
1 楼 CodingNew 2016-04-01  
博主,您好,下载了你的项目然后我利用gradle构建好了之后,运行提示了:
Exception in thread "main" org.ofbiz.entity.GenericDataSourceException: SQL Exception while executing the following:SELECT PARTY.PARTY_NAME, PARTY.PARTY_ID, USER.USER_ID, USER.LOGIN_NAME FROM PARTY PARTY INNER JOIN USER USER ON PARTY.PARTY_ID = USER.PARTY_ID WHERE (PARTY.PARTY_NAME = ?) (Table 'ofbiz1.party' doesn't exist)
	at org.ofbiz.entity.jdbc.SQLProcessor.executeQuery(SQLProcessor.java:391)
	at org.ofbiz.entity.datasource.GenericDAO.selectListIteratorByCondition(GenericDAO.java:797)
	at org.ofbiz.entity.datasource.GenericHelperDAO.findListIteratorByCondition(GenericHelperDAO.java:145)
	at org.ofbiz.entity.GenericDelegator.find(GenericDelegator.java:1762)
	at org.ofbiz.entity.GenericDelegator.findList(GenericDelegator.java:1794)
	at com.zf.ofbiz.entity.Main.main(Main.java:13)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'ofbiz1.party' doesn't exist
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2310)
	at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
	at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
	at org.ofbiz.entity.jdbc.SQLProcessor.executeQuery(SQLProcessor.java:388)
	... 5 more

很奇怪的是没有自动建表,但是配置文件中也已经是存在:
  check-on-start="true"
  add-missing-on-start="true"
求告知!!谢谢!

相关推荐

    OFbiz实体引擎指南

    OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨...包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

    ofbiz_服务引擎

    ofbiz_服务引擎,ofbiz中最为称道的部分

    ofbiz实体引擎

    NULL 博文链接:https://jiasudu.iteye.com/blog/254581

    ofbiz 入门+增删改查+实体

    ofbiz入门图文讲解,包括入门helloworld 和使用ofbiz 新建实体 操作数据库对实体增删改查

    ofbiz_springservice.zip

    基于spring封装的ofbiz所有服务,使用spring security进行安全验证,可以方便的发布为微服务,同时实现了一套直接使用ofbiz实体引擎操作ofbiz所有数据库表的spring应用框架设计

    Ofbiz16.11.05运行及开发环境搭建等

    gradle ofbiz 16 开发环境搭建 2 Ofbiz中增加百度地图 8 使用entity-auto服务实现增加、修改、删除提示国际化 9 ...ofbiz实体引擎(九) 多租户 31 菜单权限配置 34 ofbiz权限判断语法整理 42 ofbiz 权限设计详解 43

    OFBIZ快速入门OFBIZ快速入门

    OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门

    ofbiz综合使用手册

    ofbiz从配置到使用,对于初学者是非常有用的

    Apache+OFBiz+开发初学者指南.chm

    OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨...包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

    ofbiz资料大全

    Opentaps widget使用说明.rar OFBiz.Development.2008.rar Groovy中文教程.rar freemarker中文手册.rar ofbiz10.04表结构.rar OFBiz开发指南.rar Java开发必备装备包 IBM技术专区 OFBiz官网

    ofbiz入门使用教程

    非常不错的开源框架,电子商务。。。。。 非常不错的开源框架,电子商务。。。。。 非常不错的开源框架,电子商务。。。。。 非常不错的开源框架,电子商务。。。。。 非常不错的开源框架,电子商务。...

    ofbiz用户使用手册

    不用解压ofbiz-manual-zh-cn.zip 直接把.zip修改为.pdf即可 ofbiz-manual-zh-cn.pdf 博文链接:https://jiasudu.iteye.com/blog/157891

    Ofbiz之LOOKUP字段使用方法

    Ofbiz的Lookup字段,讲解ofbiz辅助输入,包括文本,选择框,日期,时间,主从文本框。后面还介绍一下自定义修改的Lookup

    OFBIZ.txt(同表不同字段计算)

    OFBIZ的同一个表的不同字段之间的加减乘除等的计算公式

    ofbiz学习笔记(自学整理)

    自学整理的ofbiz学习笔记,自学整理的ofbiz学习笔记,自学整理的ofbiz学习笔记,自学整理的ofbiz学习笔记,适合初学者,可以下个看看

    原创 Ofbiz 入门教程

    像 Tomcat, Ant, BeanShell, Jboss 等,构建了一个强大的系统平台,Ofbiz 已经完成了大部分商务类软件系统 都需要的部件,像用户认证、工作流、商务规则处理等,Ofbiz 的核心技术在于 Entity Engine,其他的组件基本...

    Ofbiz-minilang标签示例

    Ofbiz-minilang标签示例

    ofbiz 教程_配置ofbiz

    ofbiz的获取与部署,主要用到了gradle 和 eclipse,注意:cmd部署时,需要一个较好的网络环境以下载gradle

    OFBIZ集成Activiti流程

    OFBiz集成Spring和Activiti,详细设计说明书。ofbiz版本12.04

Global site tag (gtag.js) - Google Analytics