From 5cc650660e9439ddb5d0cdc07d50b4d7e2537ae0 Mon Sep 17 00:00:00 2001 From: barreiro Date: Thu, 23 Aug 2018 16:26:28 +0100 Subject: [PATCH] WFLY-10870 - Agroal drivers use capabilities --- .../agroal/DataSourceOperations.java | 6 +++--- .../datasources/agroal/DriverDefinition.java | 6 ++++++ .../datasources/agroal/DriverOperations.java | 20 ++++--------------- .../agroal/XADataSourceOperations.java | 6 +++--- 4 files changed, 16 insertions(+), 22 deletions(-) diff --git a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DataSourceOperations.java b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DataSourceOperations.java index de3dd1751a44..f7e0e24c6ec0 100644 --- a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DataSourceOperations.java +++ b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DataSourceOperations.java @@ -27,11 +27,11 @@ import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier; import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AbstractRemoveStepHandler; +import org.jboss.as.controller.CapabilityServiceBuilder; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.OperationStepHandler; import org.jboss.dmr.ModelNode; -import org.jboss.msc.service.ServiceBuilder; import org.jboss.msc.service.ServiceName; /** @@ -80,11 +80,11 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod DataSourceService dataSourceService = new DataSourceService(datasourceName, jndiName, jta, connectable, false, dataSourceConfiguration); - ServiceBuilder serviceBuilder = context.getCapabilityServiceTarget().addCapability(AbstractDataSourceDefinition.DATA_SOURCE_CAPABILITY.fromBaseCapability(datasourceName), dataSourceService); + CapabilityServiceBuilder serviceBuilder = context.getCapabilityServiceTarget().addCapability(AbstractDataSourceDefinition.DATA_SOURCE_CAPABILITY.fromBaseCapability(datasourceName), dataSourceService); + serviceBuilder.addCapabilityRequirement(DriverDefinition.AGROAL_DRIVER_CAPABILITY.getDynamicName(driverName), Class.class, dataSourceService.getDriverInjector()); AbstractDataSourceOperations.setupElytronSecurity(context, factoryModel, dataSourceService, serviceBuilder); - serviceBuilder.addDependency(DriverOperations.DRIVER_SERVICE_PREFIX.append(driverName), Class.class, dataSourceService.getDriverInjector()); serviceBuilder.install(); } } diff --git a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverDefinition.java b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverDefinition.java index e074ca3588bb..6b3beecdc652 100644 --- a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverDefinition.java +++ b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverDefinition.java @@ -35,6 +35,7 @@ import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.as.controller.access.constraint.ApplicationTypeConfig; import org.jboss.as.controller.access.management.ApplicationTypeAccessConstraintDefinition; +import org.jboss.as.controller.capability.RuntimeCapability; import org.jboss.as.controller.operations.validation.StringLengthValidator; import org.jboss.as.controller.registry.ManagementResourceRegistration; import org.jboss.dmr.ModelType; @@ -46,6 +47,10 @@ */ class DriverDefinition extends PersistentResourceDefinition { + private static final String AGROAL_DRIVER_CAPABILITY_NAME = "org.wildfly.data-source.agroal-driver"; + + static final RuntimeCapability AGROAL_DRIVER_CAPABILITY = RuntimeCapability.Builder.of(AGROAL_DRIVER_CAPABILITY_NAME, true, Class.class).build(); + static final String DRIVERS_ELEMENT_NAME = "drivers"; static final SimpleAttributeDefinition MODULE_ATTRIBUTE = create("module", ModelType.STRING) @@ -72,6 +77,7 @@ class DriverDefinition extends PersistentResourceDefinition { private DriverDefinition() { // TODO The cast to PersistentResourceDefinition.Parameters is a workaround to WFCORE-4040 super((Parameters) new Parameters(pathElement("driver"), getResolver("driver")) + .setCapabilities(AGROAL_DRIVER_CAPABILITY) .setAddHandler(DriverOperations.ADD_OPERATION) .setRemoveHandler(DriverOperations.REMOVE_OPERATION) .setAccessConstraints(new ApplicationTypeAccessConstraintDefinition( diff --git a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverOperations.java b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverOperations.java index 0aed662b2e57..1d6c122e4ea7 100644 --- a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverOperations.java +++ b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/DriverOperations.java @@ -30,7 +30,6 @@ import org.jboss.modules.Module; import org.jboss.modules.ModuleLoadException; import org.jboss.msc.service.Service; -import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ValueService; import org.jboss.msc.value.Value; import org.wildfly.extension.datasources.agroal.logging.AgroalLogger; @@ -46,9 +45,6 @@ */ class DriverOperations { - static final ServiceName DRIVER_SERVICE_PREFIX = AgroalExtension.BASE_SERVICE_NAME.append("driver"); - - // --- // static final OperationStepHandler ADD_OPERATION = new DriverAdd(); @@ -99,7 +95,6 @@ private static Class loadDriver(String driverName, String moduleName) throws @Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { String driverName = context.getCurrentAddressValue(); - ServiceName driverServiceName = ServiceName.of(DRIVER_SERVICE_PREFIX, driverName); String moduleName = DriverDefinition.MODULE_ATTRIBUTE.resolveModelAttribute(context, model).asString(); @@ -117,7 +112,7 @@ public Class getValue() throws IllegalStateException, IllegalArgumentExceptio } }); - context.getServiceTarget().addService(driverServiceName).setInstance(driverService).install(); + context.getCapabilityServiceTarget().addCapability(DriverDefinition.AGROAL_DRIVER_CAPABILITY.fromBaseCapability(driverName), driverService).install(); } } @@ -126,12 +121,8 @@ public Class getValue() throws IllegalStateException, IllegalArgumentExceptio private static class DriverRemove extends AbstractRemoveStepHandler { @Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { - String driverName = context.getCurrentAddressValue(); - - ServiceName driverServiceName = ServiceName.of(DRIVER_SERVICE_PREFIX, driverName); - context.removeService(driverServiceName); - - AgroalLogger.DRIVER_LOGGER.debugf("unloaded driver: %s", driverName); + context.removeService(DriverDefinition.AGROAL_DRIVER_CAPABILITY.getCapabilityServiceName(context.getCurrentAddress())); + AgroalLogger.DRIVER_LOGGER.debugf("unloaded driver: %s", context.getCurrentAddressValue()); } } @@ -140,12 +131,9 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod private static class DriverInfo implements OperationStepHandler { @Override - @SuppressWarnings("unchecked") public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { if (context.isNormalServer()) { - - String driverName = context.getCurrentAddressValue(); - Class providerClass = (Class) context.getServiceRegistry(false).getService(DRIVER_SERVICE_PREFIX.append(driverName)).getValue(); + Class providerClass = (Class) context.getServiceRegistry(false).getService(DriverDefinition.AGROAL_DRIVER_CAPABILITY.getCapabilityServiceName(context.getCurrentAddress())).getValue(); if (providerClass == null) { context.getResult().set(new ModelNode()); diff --git a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/XADataSourceOperations.java b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/XADataSourceOperations.java index a3d8f52b3794..a2270928671b 100644 --- a/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/XADataSourceOperations.java +++ b/datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/XADataSourceOperations.java @@ -29,12 +29,12 @@ import io.agroal.api.configuration.supplier.AgroalDataSourceConfigurationSupplier; import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AbstractRemoveStepHandler; +import org.jboss.as.controller.CapabilityServiceBuilder; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathAddress; import org.jboss.dmr.ModelNode; -import org.jboss.msc.service.ServiceBuilder; import org.jboss.msc.service.ServiceName; /** @@ -81,11 +81,11 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod DataSourceService dataSourceService = new DataSourceService(datasourceName, jndiName, false, false, true, dataSourceConfiguration); - ServiceBuilder serviceBuilder = context.getCapabilityServiceTarget().addCapability(AbstractDataSourceDefinition.DATA_SOURCE_CAPABILITY.fromBaseCapability(datasourceName), dataSourceService); + CapabilityServiceBuilder serviceBuilder = context.getCapabilityServiceTarget().addCapability(AbstractDataSourceDefinition.DATA_SOURCE_CAPABILITY.fromBaseCapability(datasourceName), dataSourceService); + serviceBuilder.addCapabilityRequirement(DriverDefinition.AGROAL_DRIVER_CAPABILITY.getDynamicName(driverName), Class.class, dataSourceService.getDriverInjector()); AbstractDataSourceOperations.setupElytronSecurity(context, factoryModel, dataSourceService, serviceBuilder); - serviceBuilder.addDependency(DriverOperations.DRIVER_SERVICE_PREFIX.append(driverName), Class.class, dataSourceService.getDriverInjector()); serviceBuilder.install(); } }