0

EclipseLink の分離キャッシュ (L1 キャッシュ) に格納されているオブジェクトを確認したいと考えています。それを可能にする API はありますか? 私はグーグルを試しましたが、何も見つかりませんでした。

パーシスタンス コンテキストでいくつかのオブジェクトをロードした後、たとえばトランザクションの開始時に 100 ミリ秒かかっていたクエリが、現在は 200 ミリ秒かかっていることがわかりました。他のいくつかの操作がすでに行われた後のトランザクションの途中。クエリの実行前に行うentityManager.clear()と、クエリは再び 100 ミリ秒かかります。これは、EclipseLink のパフォーマンスに影響を与える Persistence Context にロードされた多くのオブジェクトがあるために発生すると考えられます。そのため、永続化コンテキストにあるオブジェクトを確認したいと思います。

4

1 に答える 1

0

EclipseLink のソース コードを調べたところ、永続コンテキスト (分離キャッシュ) に格納されているオブジェクトは、エンティティ クラスごとに identityMaps というマップに配置されていることがわかりました。そのマップには、その型のすべてのオブジェクトが格納されています。

次の方法を使用して、マップの内容を印刷できます。

public interface IdentityMapAccessor {
    /**
     * PUBLIC:
     * Used to print all the Objects in the identity map of the given Class type.
     * The output of this method will be logged to this session's SessionLog at SEVERE level.
     */
    public void printIdentityMap(Class theClass);

    /**
     * PUBLIC:
     * Used to print all the Objects in every identity map in this session.
     * The output of this method will be logged to this session's SessionLog at SEVERE level.
     */
    public void printIdentityMaps();
}

例:

((JpaEntityManager) entityManager.getDelegate())
            .getActiveSession()
            .getIdentityMapAccessor()
            .printIdentityMaps();
((JpaEntityManager) entityManager.getDelegate())
            .getActiveSession()
            .getIdentityMapAccessor()
            .printIdentityMap(MyClass.class);
于 2012-12-29T00:16:00.370 に答える