public static PersistenceUnitMetadata resolvePersistenceUnitSupplier( DeploymentUnit deploymentUnit, String persistenceUnitName) { if (traceEnabled) { ROOT_LOGGER.tracef( "pu search for name '%s' inside of %s", persistenceUnitName, deploymentUnit.getName()); } int scopeSeparatorCharacter = (persistenceUnitName == null ? -1 : persistenceUnitName.indexOf('#')); if (scopeSeparatorCharacter != -1) { final String path = persistenceUnitName.substring(0, scopeSeparatorCharacter); final String name = persistenceUnitName.substring(scopeSeparatorCharacter + 1); PersistenceUnitMetadata pu = getPersistenceUnit(deploymentUnit, path, name); if (traceEnabled) { ROOT_LOGGER.tracef("pu search found %s", pu.getScopedPersistenceUnitName()); } return pu; } else { PersistenceUnitMetadata name = findPersistenceUnitSupplier(deploymentUnit, persistenceUnitName); if (traceEnabled) { if (name != null) { ROOT_LOGGER.tracef("pu search found %s", name.getScopedPersistenceUnitName()); } } return name; } }
/** * Create EE container entity manager factory * * @return EntityManagerFactory */ private EntityManagerFactory createContainerEntityManagerFactory() { persistenceProviderAdaptor.beforeCreateContainerEntityManagerFactory(pu); try { JPA_LOGGER.tracef( "calling createContainerEntityManagerFactory for pu=%s with integration properties=%s, application properties=%s", pu.getScopedPersistenceUnitName(), properties.getValue(), pu.getProperties()); return persistenceProvider.createContainerEntityManagerFactory(pu, properties.getValue()); } finally { try { persistenceProviderAdaptor.afterCreateContainerEntityManagerFactory(pu); } finally { pu.setAnnotationIndex( null); // close reference to Annotation Index (only needed during call to // createContainerEntityManagerFactory) // This is needed if the datasource is restarted // pu.setTempClassLoaderFactory(null); // close reference to temp classloader factory // (only needed during call to createEntityManagerFactory) } } }
/** * Returns the Persistence Unit service name used for creation or lookup. The service name * contains the unique fully scoped persistence unit name * * @param pu persistence unit definition * @return */ public static ServiceName getPUServiceName(PersistenceUnitMetadata pu) { return JPAServiceNames.getPUServiceName(pu.getScopedPersistenceUnitName()); }
@Override public String getScopedPersistenceUnitName() { return pu.getScopedPersistenceUnitName(); }