final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
final ServicesAttachment servicesAttachment = deploymentUnit.getAttachment(Attachments.SERVICES);
if (module != null && servicesAttachment != null) {
final ModuleClassLoader deploymentModuleClassLoader = module.getClassLoader();
PersistenceProvider provider = null;
// collect list of persistence providers packaged with the application
final List<String> providerNames = servicesAttachment.getServiceImplementations(PersistenceProvider.class.getName());
if (providerNames.size() > 1) { // TODO: support more than one provider to be packaged, which requires
// knowing which adapter belongs with it.
throw new DeploymentUnitProcessingException(
"only one persistence provider can be packaged with an application " + providerNames);
}
for (String providerName : providerNames) {
try {
final Class<? extends PersistenceProvider> providerClass = deploymentModuleClassLoader.loadClass(providerName).asSubclass(PersistenceProvider.class);
final Constructor<? extends PersistenceProvider> constructor = providerClass.getConstructor();
provider = constructor.newInstance();
log.infof("Deployment has its own Persistence Provider %s ", providerClass);
} catch (Exception e) {
throw new DeploymentUnitProcessingException("Could not deploy application packaged persistence provider '" + providerName + "'", e);
}
}
if (provider != null) {
final String adapterClass = deploymentUnit.getAttachment(JpaAttachments.ADAPTOR_CLASS_NAME);
PersistenceProviderAdaptor adaptor = null;
if (adapterClass != null) {
try {
adaptor = (PersistenceProviderAdaptor) deploymentModuleClassLoader.loadClass(adapterClass).newInstance();
adaptor.injectJtaManager(JtaManagerImpl.getInstance());
} catch (InstantiationException e) {
throw new DeploymentUnitProcessingException("could not create instance of adapter class '" +
adapterClass + "'", e);
} catch (IllegalAccessException e) {