throws DeploymentUnitProcessingException {
if (puList.size() > 0) {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
final EEModuleDescription eeModuleDescription = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
final Collection<ComponentDescription> components = eeModuleDescription.getComponentDescriptions();
if (module == null)
throw new DeploymentUnitProcessingException("Failed to get module attachment for " + phaseContext.getDeploymentUnit());
final ServiceTarget serviceTarget = phaseContext.getServiceTarget();
final ModuleClassLoader classLoader = module.getClassLoader();
PersistenceProviderDeploymentHolder persistenceProviderDeploymentHolder = deploymentUnit.getAttachment(JpaAttachments.DEPLOYED_PERSISTENCE_PROVIDER);
if (persistenceProviderDeploymentHolder == null && deploymentUnit.getParent() != null) {
persistenceProviderDeploymentHolder = deploymentUnit.getParent().getAttachment(JpaAttachments.DEPLOYED_PERSISTENCE_PROVIDER);
}
for (PersistenceUnitMetadataHolder holder : puList) {
for (PersistenceUnitMetadata pu : holder.getPersistenceUnits()) {
pu.setClassLoader(classLoader);
pu.setTempClassloader(new TempClassLoader(classLoader));
try {
final HashMap properties = new HashMap();
if (!ValidationMode.NONE.equals(pu.getValidationMode())) {
ValidatorFactory validatorFactory = SerializableValidatorFactory.getINSTANCE();
properties.put("javax.persistence.validation.factory", validatorFactory);
}
final PersistenceProviderAdaptor adaptor = getPersistenceProviderAdaptor(pu, persistenceProviderDeploymentHolder);
final PersistenceProvider provider;
if (persistenceProviderDeploymentHolder != null &&
persistenceProviderDeploymentHolder.getProvider() != null &&
persistenceProviderDeploymentHolder.getProvider().getClass().getName().equals(pu.getPersistenceProviderClassName())) {
provider = persistenceProviderDeploymentHolder.getProvider();
} else {
provider = lookupProvider(pu);
}
final PersistenceUnitService service = new PersistenceUnitService(pu, adaptor, provider);
// add persistence provider specific properties
adaptor.addProviderProperties(properties, pu);
final ServiceName puServiceName = PersistenceUnitService.getPUServiceName(pu);
// add the PU service as a dependency to all EE components in this scope
this.addPUServiceDependencyToComponents(components, puServiceName);
deploymentUnit.addToAttachmentList(Attachments.WEB_DEPENDENCIES, puServiceName);
ServiceBuilder builder = serviceTarget.addService(puServiceName, service);
boolean useDefaultDataSource = true;
final String jtaDataSource = adjustJndi(pu.getJtaDataSourceName());
final String nonJtaDataSource = adjustJndi(pu.getNonJtaDataSourceName());
if (jtaDataSource != null && jtaDataSource.length() > 0) {
if (jtaDataSource.startsWith("java:")) {
builder.addDependency(ContextNames.bindInfoFor(eeModuleDescription.getApplicationName(), eeModuleDescription.getModuleName(), eeModuleDescription.getModuleName(), jtaDataSource).getBinderServiceName(), ManagedReferenceFactory.class, new ManagedReferenceFactoryInjector(service.getJtaDataSourceInjector()));
useDefaultDataSource = false;
} else {
builder.addDependency(AbstractDataSourceService.SERVICE_NAME_BASE.append(jtaDataSource), new CastingInjector<DataSource>(service.getJtaDataSourceInjector(), DataSource.class));
useDefaultDataSource = false;
}
}
if (nonJtaDataSource != null && nonJtaDataSource.length() > 0) {
if (nonJtaDataSource.startsWith("java:")) {
builder.addDependency(ContextNames.bindInfoFor(eeModuleDescription.getApplicationName(), eeModuleDescription.getModuleName(), eeModuleDescription.getModuleName(), nonJtaDataSource).getBinderServiceName(), ManagedReferenceFactory.class, new ManagedReferenceFactoryInjector(service.getNonJtaDataSourceInjector()));
useDefaultDataSource = false;
} else {
builder.addDependency(AbstractDataSourceService.SERVICE_NAME_BASE.append(nonJtaDataSource), new CastingInjector<DataSource>(service.getNonJtaDataSourceInjector(), DataSource.class));
useDefaultDataSource = false;
}
}
// JPA 2.0 8.2.1.5, container provides default JTA datasource
if (useDefaultDataSource) {
final String defaultJtaDataSource = adjustJndi(JPAService.getDefaultDataSourceName());
if (defaultJtaDataSource != null &&
defaultJtaDataSource.length() > 0) {
builder.addDependency(AbstractDataSourceService.SERVICE_NAME_BASE.append(defaultJtaDataSource), new CastingInjector<DataSource>(service.getJtaDataSourceInjector(), DataSource.class));
log.trace(puServiceName + " is using the default data source '" + defaultJtaDataSource + "'");
}
}
Iterable<ServiceName> providerDependencies = adaptor.getProviderDependencies(pu);
if (providerDependencies != null) {
builder.addDependencies(providerDependencies);
}
if (pu.getProperties().containsKey(JNDI_PROPERTY)) {
String jndiName = pu.getProperties().get(JNDI_PROPERTY).toString();
final ContextNames.BindInfo bindingInfo = ContextNames.bindInfoFor(eeModuleDescription.getApplicationName(), eeModuleDescription.getModuleName(), eeModuleDescription.getModuleName(), jndiName);
final BinderService binderService = new BinderService(bindingInfo.getBindName());
serviceTarget.addService(bindingInfo.getBinderServiceName(), binderService)
.addDependency(bindingInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector())
.addDependency(puServiceName, PersistenceUnitService.class, new Injector<PersistenceUnitService>() {
@Override