【问题标题】:Force JDO full initialization (with datanucleus lib)强制 JDO 完全初始化(使用 datanucleus 库)
【发布时间】:2012-06-15 15:18:52
【问题描述】:

我正在处理预热请求,以尽量减少我的请求延迟: https://developers.google.com/appengine/docs/java/config/appconfig#Warmup_Requests

在初始化期间我执行:

PersistenceManager pm = PMF.get().getPersistenceManager();

.. 但从日志中我看到它没有解析所有存储类元数据的 .jdo 文件。 它们仅在我第一次调用此函数“getObjectById”时才被解析(例如)..

是否可以强制 datanucleus 完全读取所有元数据,以便在第一个 getObjectById 命中 PersistenceManager 时完全准备好?

谢谢你, 米歇尔

================================================ ================================ 更新: 我尝试使用这个 persistence.xml 文件:

<persistence-unit name="my-transaction">
        <mapping-file><path-to-first-jdo-file></mapping-file>
        <mapping-file><path-to-second-jdo-file></mapping-file>
        <mapping-file><path-to-third-jdo-file></mapping-file>
        <properties>
            <property name="datanucleus.NontransactionalRead" value="true"/>
            <property name="datanucleus.NontransactionalWrite" value="true"/>
            <property name="datanucleus.ConnectionURL" value="appengine"/>
        </properties>
    </persistence-unit>

与jdoconfig.xml相关的:

<persistence-manager-factory name="my-transaction">
    <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory" />
    <property name="javax.jdo.option.ConnectionURL" value="appengine" />
    <property name="javax.jdo.option.NontransactionalRead" value="true" />
    <property name="javax.jdo.option.NontransactionalWrite" value="true" />
    <property name="javax.jdo.option.RetainValues" value="true" />
    <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true" />
    <property name="datanucleus.appengine.allowMultipleRelationsOfSameType" value="true" />
    <property name="datanucleus.appengine.datastoreReadConsistency" value="STRONG" />
    <property name="datanucleus.appengine.ignorableMetaDataBehavior" value="ERROR" />
    <property name="javax.jdo.option.Multithreaded" value="true"/>
    <property name="javax.jdo.option.Optimistic" value="false" />

</persistence-manager-factory>

.. 但我继续在日志中看到以前的行为。在加载请求期间:

org.datanucleus.store.types.TypeManager addJavaType: Adding support for Java type <class>

.. 在第一个真正需要类映射的请求期间(例如 getObjectById):

org.datanucleus.metadata.xml.MetaDataParser parseMetaDataStream: Parsing MetaData file <class>.jdo

所以第一个检索对象的请求比后面的请求要长,因为它需要解析 XML 文件。 怎么了?

我正在使用 datanucleus 1.1.5

谢谢

【问题讨论】:

    标签: java google-app-engine jdo datanucleus


    【解决方案1】:

    指定一个定义所有类/映射文件的“persistence.xml”。然后在启动时读取/加载。 也不支持旧版本的 DataNucleus,因此请使用较新版本的 GAE JPA 插件和 DataNucleus v3.x

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多