in transform/src/patch/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java [163:226]
public OpenJPAEntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo pui, Map m) {
PersistenceProductDerivation pd = new PersistenceProductDerivation();
try {
Object poolValue = Configurations.removeProperty(EMF_POOL, m);
ConfigurationProvider cp = pd.load(pui, m);
if (cp == null)
return null;
// add enhancer
Exception transformerException = null;
String ctOpts = (String) Configurations.getProperty(CLASS_TRANSFORMER_OPTIONS, pui.getProperties());
try {
pui.addTransformer(new ClassTransformerImpl(cp, ctOpts,
pui.getNewTempClassLoader(), newConfigurationImpl()));
} catch (Exception e) {
// fail gracefully
transformerException = e;
}
// if the BrokerImpl hasn't been specified, switch to the
// non-finalizing one, since anything claiming to be a container
// should be doing proper resource management.
if (!Configurations.containsProperty(BrokerValue.KEY, cp.getProperties())) {
cp.addProperty("openjpa." + BrokerValue.KEY, getDefaultBrokerAlias());
}
ClassLoader loader = pui.getClassLoader();
if (BundleUtils.runningUnderOSGi()) {
// OPENJPA-1491 : If running under OSGi, use the Bundle's ClassLoader instead of the application one
// OPENJPA-2542 : Also try to load from app loader in the case of a user implemented interface/config
loader = new MultiClassLoader(BundleUtils.getBundleClassLoader(), loader);
}
BrokerFactory factory = getBrokerFactory(cp, poolValue, loader);
OpenJPAConfiguration conf = factory.getConfiguration();
setPersistenceEnvironmentInfo(conf, pui);
_log = conf.getLog(OpenJPAConfiguration.LOG_RUNTIME);
// now we can log any transformer exceptions from above
if (transformerException != null) {
if (_log.isTraceEnabled()) {
_log.warn(_loc.get("transformer-registration-error-ex", pui), transformerException);
} else {
_log.warn(_loc.get("transformer-registration-error", pui));
}
}
if (conf.getConnectionRetainModeConstant() == ConnectionRetainModes.CONN_RETAIN_ALWAYS) {
// warn about container managed EMs holding on to connections.
_log.warn(_loc.get("cm-retain-always",conf.getId()));
}
// Create appropriate LifecycleEventManager
loadValidator(factory);
OpenJPAEntityManagerFactory emf = JPAFacadeHelper.toEntityManagerFactory(factory);
if (_log.isTraceEnabled()) {
_log.trace(this + " creating container " + emf + " for PU " + pui.getPersistenceUnitName() + ".");
}
return emf;
} catch (Exception e) {
throw PersistenceExceptions.toPersistenceException(e);
}
}