final ClassLoader appClassLoader) {
// Analyze libraries to detect persistence archive (only once for now
// and for all libraries)
// Get libraries of this EAR
List<LibDeployable> libs = earDeployable.getLibDeployables();
PersistenceUnitManager persistenceUnitManager = null;
for (LibDeployable lib : libs) {
PersistenceUnitManager builtPersistenceUnitManager = null;
try {
JPersistenceUnitInfo[] persistenceUnitInfos =
PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(lib.getArchive());
if (persistenceUnitInfos != null) {
builtPersistenceUnitManager =
PersistenceXmlFileAnalyzer.loadPersistenceProvider(persistenceUnitInfos, appClassLoader);
}
} catch (PersistenceXmlFileAnalyzerException e) {
throw new IllegalStateException("Failure when analyzing the persistence.xml file", e);
}
// Existing manager and new manager found
if (persistenceUnitManager != null) {
if (builtPersistenceUnitManager != null) {
// Add the persistence unit infos to the existing
// persistence unit manager
persistenceUnitManager.addExtraPersistenceUnitInfos(builtPersistenceUnitManager.getPersistenceUnitInfos());
}
} else {
// New persistence manager use the built manager
persistenceUnitManager = builtPersistenceUnitManager;
}