Skip to content

Commit

Permalink
WFLY-10870 - Agroal drivers use capabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
barreiro committed Aug 23, 2018
1 parent 8572d05 commit 5cc6506
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 22 deletions.
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -80,11 +80,11 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod

DataSourceService dataSourceService = new DataSourceService(datasourceName, jndiName, jta, connectable, false, dataSourceConfiguration);

ServiceBuilder<AgroalDataSource> serviceBuilder = context.getCapabilityServiceTarget().addCapability(AbstractDataSourceDefinition.DATA_SOURCE_CAPABILITY.fromBaseCapability(datasourceName), dataSourceService);
CapabilityServiceBuilder<AgroalDataSource> 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();
}
}
Expand Down
Expand Up @@ -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;
Expand All @@ -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<Void> 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)
Expand All @@ -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(
Expand Down
Expand Up @@ -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;
Expand All @@ -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();

Expand Down Expand Up @@ -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();

Expand All @@ -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();
}
}

Expand All @@ -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());
}
}

Expand All @@ -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());
Expand Down
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -81,11 +81,11 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod

DataSourceService dataSourceService = new DataSourceService(datasourceName, jndiName, false, false, true, dataSourceConfiguration);

ServiceBuilder<AgroalDataSource> serviceBuilder = context.getCapabilityServiceTarget().addCapability(AbstractDataSourceDefinition.DATA_SOURCE_CAPABILITY.fromBaseCapability(datasourceName), dataSourceService);
CapabilityServiceBuilder<AgroalDataSource> 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();
}
}
Expand Down

0 comments on commit 5cc6506

Please sign in to comment.