2

EntityManagerFactory は、持続性ユニット xml を使用せずに作成できます。

org.eclipse.persistence.jpa.PersistenceProvider {
 public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info,
                                                                    java.util.Map properties)
    }

しかし、eclipselinkのjavax.persistence.spi.PersistenceUnitInfoの実装クラスは何ですか?

4

3 に答える 3

5

私もこの問題に苦労しています。PersistenceUnitInfoコンテナー (つまり、アプリケーション サーバー) によって提供される必要があると思います。これは、Eclipselink 自体が作成しないことを意味します。Spring ORM を使用している場合は、 を使用し、そのメソッドをDefaultPersistenceUnitManager呼び出してのインスタンスを取得します。unitName は で定義する必要があります。これは、まだ xml ファイルが必要であることを意味します。obtainPersistenceUnitInfo(String unitName)PersistenceUnitInfopersistence.xml

Spring ORM のソース コードを掘り下げることで、Spring が のいくつかの実装を提供していることがわかりましたPersistenceUnitInfo。実際、それらは一般に Java Bean です。SmartPersistenceInfoMutablePersistenceInfoおよびに興味があるかもしれませんSpringPersistenceUnitInfoGithubでそれらを表示します。

編集:

Eclipselink の実装を見つけました: にSEPersistenceUnitInfoありorg.eclipse.persistence.internal.jpa.deploymentます。また、構成 xml ファイル内のすべての持続性ユニットを読み取るメソッドも見つかりました。

    public static Set<SEPersistenceUnitInfo> getPersistenceUnits(ClassLoader loader, Map m, List<URL> jarFileUrls) {
    String descriptorPath = (String) m.get(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML);
    if(descriptorPath == null) {
        descriptorPath = System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
    }
    Set<Archive> archives = findPersistenceArchives(loader, descriptorPath, jarFileUrls);
    Set<SEPersistenceUnitInfo> puInfos = new HashSet();
    try {
        for(Archive archive : archives) {
            List<SEPersistenceUnitInfo> puInfosFromArchive = getPersistenceUnits(archive, loader);
            puInfos.addAll(puInfosFromArchive);
        }
    } finally {
        for(Archive archive : archives) {
            archive.close();
        }
    }
    return puInfos;
}
于 2013-12-04T13:21:03.110 に答える
1

Java EE プラットフォーム仕様 6 によると、コンテナーは、情報を PersistenceUnitInfo に凝縮し、createContainerEntityManagerFactory への呼び出しでそれを提供する persistence.xml を見つける責任があります。

于 2015-08-05T00:56:19.970 に答える