您的位置:首页 > 数据库

在OFBIZ中使用多个数据库的方法

2013-01-24 14:56 232 查看
要在OFBIZ中使用多个数据库,我们就需要知道OFBIZ实体与数据库的关联关系。然后要知道实体分组。 我们每定义一个实体就应该明确的将该实体分到对应的实体分组中,一个实体分组可以包含多个实体。每个分组又可以单独的定义它所使用的数据库。因此,我们就要可以通过将实现进行分组,然后使用不同的数据库。实体分组的定义在%OFBIZ_HOME%/framework/entity/conf/entityengine.xml文件中定义。默认情况下,实体被分组到了
org.ofbiz分组中。

<entity-group group="org.ofbiz.olap" entity="SalesInvoiceItemFact"/>

<entity-group group="org.ofbiz.olap" entity="SalesInvoiceItemStarSchema"/>

Entity-group(一般定义在各个模块的\entitydef\entitygroupXXX.xml中) 对实体进行分组,使不同的实体分属不同的entity-group。

也许你会发现并不是每个entity都进行了entity-group 分组。事实上如果你没有对实体进行分组归类的话,系统启动的时候他会将实体默认归类到"org.ofbiz"中。

查看数据库定义文件%ofbiz_home%/framework/entity/config/entityengine.xml

可以发现:

<delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">

<group-map group-name="org.ofbiz" datasource-name="localderby"/>

<group-map group-name="org.ofbiz.olap" datasource-name="localderbyolap"/>

<group-map group-name="org.ofbiz.tenant" datasource-name="localderbytenant"/>

</delegator>

可以发现delegator 将多个group-name组织到一起并将group-name与datasource-name对应起来,datasource-name又是什么?通过查看 entityengine.xml 我们可以发现:

<datasource name="localderby"

helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"

schema-name="OFBIZ"

field-type-name="derby"

check-on-start="true"

add-missing-on-start="true"

use-pk-constraint-names="false"

use-indices-unique="false"

alias-view-columns="false"

use-order-by-nulls="true">

<read-data reader-name="seed"/>

<read-data reader-name="seed-initial"/>

<read-data reader-name="demo"/>

<read-data reader-name="ext"/>

<inline-jdbc

jdbc-driver="org.apache.derby.jdbc.EmbeddedDriver"

jdbc-uri="jdbc:derby:ofbiz;create=true"

jdbc-username="ofbiz"

jdbc-password="ofbiz"

isolation-level="ReadCommitted"

pool-minsize="2"

pool-maxsize="250"

time-between-eviction-runs-millis="600000"/>

</datasource>

Datasource定义了数据库驱动,数据库用户名、密码等,所以datasource就是我们说的数据库。

总结一下:我们通过entity-group将各个实体和数据库之间关联起来,然后再将一个或多个数据库归属到一个delegator 中,这样我们就可以通过相同的delegator从不同的数据库中取值了。

那我们又是怎么使用数据库进行数据库操作的呢??查看每个模块应用底下的web.xml 我们可以发现:

<context-param>

<param-name>entityDelegatorName</param-name>

<param-value>default</param-value>

<description>The Name of the Entity Delegator to use, defined in entityengine.xml</description>

</context-param>

针对不同的应用,我们可以使用不同的delegator .如果不定义则使用default.

在启动各个应用模块的时候,系统会根据web.xml 中的 entityDelegatorName

生成delegator 对象,然后将delegator 对象存放到servletContext 中备用。

我们就是使用这个delegator对象执行数据库操作,以后会介绍如何使用。

delegator = DelegatorFactory.getDelegator(delegatorName);

servletContext.setAttribute("delegator", delegator);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐