0

リクエストのレイテンシを最小限に抑えるためにウォームアップリクエストに取り組んでいます: https ://developers.google.com/appengine/docs/java/config/appconfig#Warmup_Requests

その初期化中に、私は以下を実行します。

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

..しかし、ログから、クラスのメタデータが保存されているすべての.jdoファイルを解析しているわけではないことがわかります。これらは、この関数を初めて「getObjectById」と呼んだときにのみ解析されます(たとえば)。

最初のgetObjectByIdがPersistenceManagerにヒットしたときに完全に準備するために、datanucleusにすべてのメタデータを完全に読み取るように強制することは可能ですか?

ありがとう、ミケーレ

================================================== ============================更新:この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ファイルを解析する必要があるため、次のリクエストよりも長くなります。どうしたの?

datanucleus1.1.5を使用しています

ありがとうございました

4

1 に答える 1

1

すべてのクラス/マッピングファイルを定義する「persistence.xml」を指定します。これは、起動時に読み取られ/ロードされます。また、古いバージョンのDataNucleusはサポートされていないため、DataNucleusv3.xで新しいバージョンのGAEJPAプラグインを使用してください。

于 2012-06-15T15:53:26.667 に答える