diff --git a/jpa/subsystem/src/main/java/org/jboss/as/jpa/persistenceprovider/PersistenceProviderLoader.java b/jpa/subsystem/src/main/java/org/jboss/as/jpa/persistenceprovider/PersistenceProviderLoader.java index 12aec5e8233d..2b2ebd22944b 100644 --- a/jpa/subsystem/src/main/java/org/jboss/as/jpa/persistenceprovider/PersistenceProviderLoader.java +++ b/jpa/subsystem/src/main/java/org/jboss/as/jpa/persistenceprovider/PersistenceProviderLoader.java @@ -11,9 +11,9 @@ import jakarta.persistence.spi.PersistenceProvider; +import org.jboss.as.controller.ModuleIdentifierUtil; import org.jboss.as.jpa.config.Configuration; import org.jboss.modules.Module; -import org.jboss.modules.ModuleIdentifier; import org.jboss.modules.ModuleLoadException; import org.jboss.modules.ModuleLoader; @@ -44,8 +44,9 @@ public static void loadDefaultProvider() throws ModuleLoadException { * Note: side effect of saving loaded persistence providers to static api in jakarta.persistence.spi.PersistenceProvider. */ public static List loadProviderModuleByName(String moduleName) throws ModuleLoadException { + moduleName = ModuleIdentifierUtil.canonicalModuleIdentifier(moduleName); final ModuleLoader moduleLoader = Module.getBootModuleLoader(); - Module module = moduleLoader.loadModule(ModuleIdentifier.fromString(moduleName)); + Module module = moduleLoader.loadModule(moduleName); final ServiceLoader serviceLoader = module.loadService(PersistenceProvider.class); List result = new ArrayList<>(); diff --git a/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/HibernateSearchProcessor.java b/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/HibernateSearchProcessor.java index 4b042dfd68fd..5d4a37998acc 100644 --- a/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/HibernateSearchProcessor.java +++ b/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/HibernateSearchProcessor.java @@ -22,7 +22,6 @@ import org.jboss.jandex.AnnotationInstance; import org.jboss.jandex.DotName; import org.jboss.modules.Module; -import org.jboss.modules.ModuleIdentifier; import org.jboss.modules.ModuleLoader; import org.jipijapa.plugin.spi.PersistenceUnitMetadata; @@ -38,17 +37,6 @@ public class HibernateSearchProcessor implements DeploymentUnitProcessor { private static final DotName ANNOTATION_INDEXED_NAME = DotName.createSimple("org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed"); - private static final ModuleIdentifier MODULE_MAPPER_ORM_DEFAULT = - ModuleIdentifier.fromString(Configuration.HIBERNATE_SEARCH_MODULE_MAPPER_ORM); - - private static final ModuleIdentifier MODULE_MAPPER_ORM_OUTBOXPOLLING = - ModuleIdentifier.fromString(Configuration.HIBERNATE_SEARCH_MODULE_MAPPER_ORM_OUTBOXPOLLING); - private static final ModuleIdentifier MODULE_BACKEND_LUCENE = - ModuleIdentifier.fromString(Configuration.HIBERNATE_SEARCH_MODULE_BACKEND_LUCENE); - private static final ModuleIdentifier MODULE_BACKEND_ELASTICSEARCH = - ModuleIdentifier.fromString(Configuration.HIBERNATE_SEARCH_MODULE_BACKEND_ELASTICSEARCH); - - private static final String NONE = "none"; private static final String IGNORE = "auto"; // if set to `auto`, will behave like not having set the property @@ -93,18 +81,20 @@ else if (!providerModule.equals(searchMapperModuleName)) { // use Search module name specified in persistence unit definition if (searchMapperModuleName != null && !IGNORE.equals(searchMapperModuleName)) { - ModuleIdentifier moduleIdentifier = ModuleIdentifier.fromString(searchMapperModuleName); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, moduleIdentifier, false, true, true, false)); - ROOT_LOGGER.debugf("added %s dependency to %s", moduleIdentifier, deploymentUnit.getName()); + moduleSpecification.addSystemDependency(ModuleDependency.Builder.of(moduleLoader, searchMapperModuleName). + setOptional(false).setExport(true).setImportServices(true).setUserSpecified(false).build()); + + ROOT_LOGGER.debugf("added %s dependency to %s", searchMapperModuleName, deploymentUnit.getName()); } else { // add Hibernate Search module dependency if application is using the Hibernate Search Indexed annotation final CompositeIndex index = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.COMPOSITE_ANNOTATION_INDEX); List annotations = index.getAnnotations(ANNOTATION_INDEXED_NAME); if (annotations != null && !annotations.isEmpty()) { - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, MODULE_MAPPER_ORM_DEFAULT, - false, true, true, false)); + moduleSpecification.addSystemDependency( + ModuleDependency.Builder.of(moduleLoader, Configuration.HIBERNATE_SEARCH_MODULE_MAPPER_ORM). + setOptional(false).setExport(true).setImportServices(true).setUserSpecified(false).build()); ROOT_LOGGER.debugf("deployment %s contains %s annotation, added %s dependency", deploymentUnit.getName(), - ANNOTATION_INDEXED_NAME, MODULE_MAPPER_ORM_DEFAULT); + ANNOTATION_INDEXED_NAME, Configuration.HIBERNATE_SEARCH_MODULE_MAPPER_ORM); } } @@ -116,20 +106,23 @@ else if (!providerModule.equals(searchMapperModuleName)) { List backendTypes = HibernateSearchDeploymentMarker.getBackendTypes(deploymentUnit); if (backendTypes != null) { if (backendTypes.contains(Configuration.HIBERNATE_SEARCH_BACKEND_TYPE_VALUE_LUCENE)) { - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, MODULE_BACKEND_LUCENE, - false, true, true, false)); + moduleSpecification.addSystemDependency( + ModuleDependency.Builder.of(moduleLoader, Configuration.HIBERNATE_SEARCH_MODULE_BACKEND_LUCENE). + setOptional(false).setExport(true).setImportServices(true).setUserSpecified(false).build()); } if (backendTypes.contains(Configuration.HIBERNATE_SEARCH_BACKEND_TYPE_VALUE_ELASTICSEARCH)) { - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, MODULE_BACKEND_ELASTICSEARCH, - false, true, true, false)); + moduleSpecification.addSystemDependency( + ModuleDependency.Builder.of(moduleLoader, Configuration.HIBERNATE_SEARCH_MODULE_BACKEND_ELASTICSEARCH). + setOptional(false).setExport(true).setImportServices(true).setUserSpecified(false).build()); } } List coordinationStrategies = HibernateSearchDeploymentMarker.getCoordinationStrategies(deploymentUnit); if (coordinationStrategies != null) { if (coordinationStrategies.contains(Configuration.HIBERNATE_SEARCH_COORDINATION_STRATEGY_VALUE_OUTBOX_POLLING)) { - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, MODULE_MAPPER_ORM_OUTBOXPOLLING, - false, true, true, false)); + moduleSpecification.addSystemDependency( + ModuleDependency.Builder.of(moduleLoader, Configuration.HIBERNATE_SEARCH_MODULE_MAPPER_ORM_OUTBOXPOLLING). + setOptional(false).setExport(true).setExport(true).setImportServices(true).setUserSpecified(false).build()); } } } diff --git a/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/JPADependencyProcessor.java b/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/JPADependencyProcessor.java index 328f1743c8b7..606ef3692e6c 100644 --- a/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/JPADependencyProcessor.java +++ b/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/JPADependencyProcessor.java @@ -22,7 +22,6 @@ import org.jboss.as.server.deployment.Attachments; import org.jboss.as.server.deployment.DeploymentPhaseContext; import org.jboss.as.server.deployment.DeploymentUnit; -import org.jboss.as.server.deployment.DeploymentUnitProcessingException; import org.jboss.as.server.deployment.DeploymentUnitProcessor; import org.jboss.as.server.deployment.DeploymentUtils; import org.jboss.as.server.deployment.JPADeploymentMarker; @@ -33,7 +32,6 @@ import org.jboss.metadata.ear.spec.EarMetaData; import org.jboss.metadata.ear.spec.ModuleMetaData; import org.jboss.modules.Module; -import org.jboss.modules.ModuleIdentifier; import org.jboss.modules.ModuleLoader; import org.jboss.msc.service.ServiceName; import org.jipijapa.plugin.spi.PersistenceUnitMetadata; @@ -45,48 +43,33 @@ */ public class JPADependencyProcessor implements DeploymentUnitProcessor { - private static final ModuleIdentifier JAVAX_PERSISTENCE_API_ID = ModuleIdentifier.create("jakarta.persistence.api"); - private static final ModuleIdentifier JBOSS_AS_JPA_ID = ModuleIdentifier.create("org.jboss.as.jpa"); - private static final ModuleIdentifier JBOSS_AS_JPA_SPI_ID = ModuleIdentifier.create("org.jboss.as.jpa.spi"); - private static final String JAR_FILE_EXTENSION = ".jar"; - private static final String LIB_FOLDER = "lib"; + private static final String JAVAX_PERSISTENCE_API_ID = "jakarta.persistence.api"; + private static final String JBOSS_AS_JPA_ID = "org.jboss.as.jpa"; + private static final String JBOSS_AS_JPA_SPI_ID = "org.jboss.as.jpa.spi"; /** * Add dependencies for modules required for Jakarta Persistence deployments */ - public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { + public void deploy(DeploymentPhaseContext phaseContext) { final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); final ModuleSpecification moduleSpecification = deploymentUnit.getAttachment(Attachments.MODULE_SPECIFICATION); final ModuleLoader moduleLoader = Module.getBootModuleLoader(); - // all applications get the jakarta.persistence module added to their deplyoment by default - addDependency(moduleSpecification, moduleLoader, deploymentUnit, JAVAX_PERSISTENCE_API_ID); + // all applications get the jakarta.persistence SPEC API module added to their deployment by default + moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, JAVAX_PERSISTENCE_API_ID, false, false, true, false)); + ROOT_LOGGER.debugf("added %s dependency to %s", JAVAX_PERSISTENCE_API_ID, deploymentUnit.getName()); if (!JPADeploymentMarker.isJPADeployment(deploymentUnit)) { return; // Skip if there are no persistence use in the deployment } - addDependency(moduleSpecification, moduleLoader, deploymentUnit, JBOSS_AS_JPA_ID, JBOSS_AS_JPA_SPI_ID); - addPersistenceProviderModuleDependencies(phaseContext, moduleSpecification, moduleLoader); - } - - private void addDependency(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader, - DeploymentUnit deploymentUnit, ModuleIdentifier... moduleIdentifiers) { - for ( ModuleIdentifier moduleIdentifier : moduleIdentifiers) { + for ( String moduleIdentifier : new String[]{JBOSS_AS_JPA_ID, JBOSS_AS_JPA_SPI_ID}) { moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, moduleIdentifier, false, false, true, false)); ROOT_LOGGER.debugf("added %s dependency to %s", moduleIdentifier, deploymentUnit.getName()); } + addPersistenceProviderModuleDependencies(phaseContext, moduleSpecification, moduleLoader); } - private void addOptionalDependency(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader, - DeploymentUnit deploymentUnit, ModuleIdentifier... moduleIdentifiers) { - for ( ModuleIdentifier moduleIdentifier : moduleIdentifiers) { - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, moduleIdentifier, true, false, false, false)); - ROOT_LOGGER.debugf("added %s dependency to %s", moduleIdentifier, deploymentUnit.getName()); - } - } - - private void addPersistenceProviderModuleDependencies(DeploymentPhaseContext phaseContext, ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) throws - DeploymentUnitProcessingException { + private void addPersistenceProviderModuleDependencies(DeploymentPhaseContext phaseContext, ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) { final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); @@ -111,7 +94,8 @@ private void addPersistenceProviderModuleDependencies(DeploymentPhaseContext pha // add persistence provider dependency for (String dependency : moduleDependencies) { - addDependency(moduleSpecification, moduleLoader, deploymentUnit, ModuleIdentifier.fromString(dependency)); + moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, dependency, false, false, true, false)); + ROOT_LOGGER.debugf("added %s dependency to %s", dependency, deploymentUnit.getName()); } // add the PU service as a dependency to all EE components in this scope @@ -194,12 +178,10 @@ private static void addPUServiceDependencyToComponents(final Collection moduleDependencies, final PersistenceUnitMetadataHolder holder) throws - DeploymentUnitProcessingException { + private int loadPersistenceUnits(final ModuleSpecification moduleSpecification, final ModuleLoader moduleLoader, final DeploymentUnit deploymentUnit, final Set moduleDependencies, final PersistenceUnitMetadataHolder holder) { int defaultProviderCount = 0; if (holder != null) { for (PersistenceUnitMetadata pu : holder.getPersistenceUnits()) { - String providerModule = pu.getProperties().getProperty(Configuration.PROVIDER_MODULE); String adapterModule = pu.getProperties().getProperty(Configuration.ADAPTER_MODULE); String adapterClass = pu.getProperties().getProperty(Configuration.ADAPTER_CLASS); @@ -227,11 +209,13 @@ private int loadPersistenceUnits(final ModuleSpecification moduleSpecification, // since we don't know (until after PersistenceProviderProcessor runs in a later phase) if the provider // is packaged with the app or will be accessed as a module, make the module dependency optional (in case it // doesn't exist). - String providerModuleName = Configuration.getProviderModuleNameFromProviderClassName(pu.getPersistenceProviderClassName()); - if (providerModuleName != null) { - addOptionalDependency(moduleSpecification, moduleLoader, deploymentUnit, ModuleIdentifier.fromString(providerModuleName)); - ROOT_LOGGER.debugf("%s is configured to use persistence provider '%s', adding an optional dependency on module '%s'", - pu.getPersistenceUnitName(), pu.getPersistenceProviderClassName(), providerModuleName); + String persistenceProviderModule = Configuration.getProviderModuleNameFromProviderClassName(pu.getPersistenceProviderClassName()); + if (persistenceProviderModule != null) { + moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, persistenceProviderModule, true, false, false, false)); + ROOT_LOGGER.debugf("Adding %s dependency to %s. " + + "Persistence Unit %s is configured to use Persistence Provider '%s', adding an optional dependency on Persistence Provider Module '%s'", + persistenceProviderModule, deploymentUnit.getName(), + pu.getPersistenceUnitName(), pu.getPersistenceProviderClassName(), persistenceProviderModule); } } } diff --git a/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/PersistenceProviderAdaptorLoader.java b/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/PersistenceProviderAdaptorLoader.java index 05b885cf26d1..0626541d858c 100644 --- a/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/PersistenceProviderAdaptorLoader.java +++ b/jpa/subsystem/src/main/java/org/jboss/as/jpa/processor/PersistenceProviderAdaptorLoader.java @@ -16,11 +16,11 @@ import jakarta.enterprise.inject.spi.BeanManager; import jakarta.persistence.spi.PersistenceProvider; +import org.jboss.as.controller.ModuleIdentifierUtil; import org.jboss.as.jpa.messages.JpaLogger; import org.jboss.as.jpa.transaction.JtaManagerImpl; import org.jboss.jandex.Index; import org.jboss.modules.Module; -import org.jboss.modules.ModuleIdentifier; import org.jboss.modules.ModuleLoadException; import org.jboss.modules.ModuleLoader; import org.jipijapa.plugin.spi.JtaManager; @@ -96,7 +96,7 @@ public void markPersistenceUnitAvailable(Object wrapperBeanManagerLifeCycle) { * @return the persistence provider adaptor for the provider class * @throws ModuleLoadException */ - public static PersistenceProviderAdaptor loadPersistenceAdapterModule(final String adapterModule, final Platform platform, JtaManagerImpl manager) throws + public static PersistenceProviderAdaptor loadPersistenceAdapterModule(String adapterModule, final Platform platform, JtaManagerImpl manager) throws ModuleLoadException { final ModuleLoader moduleLoader = Module.getBootModuleLoader(); @@ -105,8 +105,8 @@ public static PersistenceProviderAdaptor loadPersistenceAdapterModule(final Stri } PersistenceProviderAdaptor persistenceProviderAdaptor=null; - - Module module = moduleLoader.loadModule(ModuleIdentifier.fromString(adapterModule)); + adapterModule = ModuleIdentifierUtil.canonicalModuleIdentifier(adapterModule); + Module module = moduleLoader.loadModule(adapterModule); final ServiceLoader serviceLoader = module.loadService(PersistenceProviderAdaptor.class); if (serviceLoader != null) { @@ -172,7 +172,7 @@ public static List loadPersistenceProvider final ModuleLoader moduleLoader = Module.getBootModuleLoader(); List persistenceProviderAdaptors = new ArrayList<>(); - + adapterModule = ModuleIdentifierUtil.canonicalModuleIdentifier(adapterModule); Module module = moduleLoader.loadModule(adapterModule); final ServiceLoader serviceLoader = module.loadService(PersistenceProviderIntegratorAdaptor.class);