【发布时间】: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