Ofbiz: 解决Helper name not found for entity OpenProduct的错误

今天在ofbiz中新建一张表OpenProduct,在ofbiz后台访问这张新表时,出现了如下异常:

Helper name not found for entity OpenProduct

 

检查entitymodel.xml对entity的配置没有问题。在entitygroup.xml文件,也已经把entity"OpenProduct"添加进去了。Delegator为什么还是没有找到这个entity?

 

原因:

 

仔细查看ofbiz启动的日志,发现:delegator在初时化之前,先读入所有的entitymodel.xml文件,然后再读入所有的entitygroup.xml文件。在读入完entitygroup.xml文件后,检查entitygroup.xml中定义的所有的entity。这时候我的日志文件中出现了如下Warning:

 

[HelperNotFound] No Helper (DataSource) definition found for entity OpenProduct.
2010-04-15 12:26:59,468 (main) [   GenericDelegator.java:158:WARN ] [FieldTypeNotFound] Field type id-ne of entity OpenProduct not found in field type definitions (no helper definition found).

...

 

日志再往下看,发现还有两行INFO级别的日志:

2010-04-15 12:26:59,484 (main) [   GenericDelegator.java:168:INFO ] Delegator "default" initializing helper "null" for entity group "com.openb2c ".
2010-04-15 12:26:59,484 (main) [   GenericDelegator.java:168:INFO ] Delegator "default" initializing helper "localmysql" for entity group "org.ofbiz".

 

问题就在这里了:因为要先做一个ofbiz的项目:openb2c ,所以把entitygroup.xml的<entity-group group="org.ofbiz" entity="OpenProduct" />中的group属性改成了"com.openb2c "即:

<entity-group group="com.openb2c " entity="OpenProduct" />

 

ofbiz在读完所有的entitymodel.xml和entitygroup.xml文件以后,就会对delegator进行初始化。初始化是根据entityengine.xml配置文件来的。由于在我的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="localmysql"/>
</delegator>

并没有定义group:com.myOpen。所以entity group "com.myOpen"并没有被初始化。所以OpenProduct这个entity就没有办法找到其对应的entitygroup了。

 

解决办法:

想使用自己的entity group,需要在entityengine.xml中添加定义:

<delegator name="OpenB2C " entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">
        <group-map group-name="com.openb2c " datasource-name="localmysql"/>
</delegator>

并且在每一个ofbiz模块(component)里的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>

把param-value改成新的delegator的名字:OpenB2C

在entitygroup.xml中添加entity时改成:

<entity-group group="com.openb2c " entity="OpenProduct" />

重启ofbiz,就能使用这个entity了。

 

继续研究ofbiz。

你可能感兴趣的:(xml,Web,cache)