EclipseLink中的PersistenceUnitInfo实现

时间:2013-06-29 11:18:04

标签: jpa eclipselink

可以使用

创建没有持久性单元xml的EntityManagerFactory
org.eclipse.persistence.jpa.PersistenceProvider {
 public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info,
                                                                    java.util.Map properties)
    }

但是eclipselink中的javax.persistence.spi.PersistenceUnitInfo的实现类是什么

3 个答案:

答案 0 :(得分:4)

我也在努力解决这个问题。我认为容器(即Application Server)必须提供PersistenceUnitInfo。这意味着Eclipselink本身不会创建一个。如果您使用的是Spring ORM,则会使用DefaultPersistenceUnitManager并调用其obtainPersistenceUnitInfo(String unitName)方法来获取PersistenceUnitInfo的实例。必须在persistence.xml中定义unitName。这意味着您仍然需要一个xml文件。

通过深入研究Spring ORM的源代码,我发现Spring提供了PersistenceUnitInfo的几个实现。实际上它们通常是Java Bean。您可能对SmartPersistenceInfoMutablePersistenceInfoSpringPersistenceUnitInfo感兴趣。在Github上查看它们。

编辑:

我找到了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;
}

答案 1 :(得分:1)

Java EE平台规范6说:容器负责查找persistence.xml,将信息压缩到PersistenceUnitInfo中,并通过调用createContainerEntityManagerFactory来提供它。

答案 2 :(得分:0)

PersistenceUnitInfo由Spec定义,请参阅JPA规范代码或JavaDoc以实现它。

http://www.eclipse.org/eclipselink/api/2.5/javax/persistence/spi/PersistenceUnitInfo.html