diff --git a/controller/src/main/java/org/jboss/as/controller/AbstractAddStepHandler.java b/controller/src/main/java/org/jboss/as/controller/AbstractAddStepHandler.java index 1daafe7969b..dfa89dd9ce0 100644 --- a/controller/src/main/java/org/jboss/as/controller/AbstractAddStepHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/AbstractAddStepHandler.java @@ -6,18 +6,19 @@ package org.jboss.as.controller; import org.jboss.as.controller.capability.RuntimeCapability; +import org.jboss.as.controller.descriptions.ModelDescriptionConstants; +import org.jboss.as.controller.registry.AttributeAccess; import org.jboss.as.controller.registry.ImmutableManagementResourceRegistration; import org.jboss.as.controller.registry.Resource; import org.jboss.dmr.ModelNode; import java.util.AbstractSet; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD_INDEX; @@ -26,23 +27,32 @@ * Base class for {@link OperationStepHandler} implementations that add managed resource. * * @author John Bailey + * @author Paul Ferraro */ -public class AbstractAddStepHandler implements OperationStepHandler, OperationDescriptor { +public abstract class AbstractAddStepHandler implements OperationStepHandler, OperationDescriptor { + private static final String AUTO_POPULATE_MODEL = "auto-populate-model"; + + /** + * This is only retained to support {@link #getAttributes()} and for those subclasses that reference this protected attribute directly. + */ + @Deprecated(forRemoval = true) // This is referenceable by subclasses protected final Collection attributes; /** * Constructs an add handler. */ - public AbstractAddStepHandler() { //default constructor to preserve backward compatibility + public AbstractAddStepHandler() { this.attributes = List.of(); } /** * Constructs an add handler * @param attributes attributes to use in {@link #populateModel(OperationContext, org.jboss.dmr.ModelNode, org.jboss.as.controller.registry.Resource)} + * @deprecated Use default constructor instead. Resource model auto-population logic relies on the {@link OperationDefinition#getParameters()} method of the operation definition with which this handler was registered. */ @SuppressWarnings("unchecked") + @Deprecated(forRemoval = true) public AbstractAddStepHandler(Collection attributes) { // Create defensive copy, if collection was not already immutable this.attributes = (attributes instanceof Set) ? Set.copyOf((Set) attributes) : List.copyOf(attributes); @@ -52,16 +62,30 @@ public AbstractAddStepHandler(Collection attribut * Constructs an add handler * * @param attributes attributes to use in {@link #populateModel(OperationContext, org.jboss.dmr.ModelNode, org.jboss.as.controller.registry.Resource)} + * @deprecated Use default constructor instead. Resource model auto-population logic relies on the {@link OperationDefinition#getParameters()} method of the operation definition with which this handler was registered. */ + @Deprecated(forRemoval = true) public AbstractAddStepHandler(AttributeDefinition... attributes) { this(List.of(attributes)); } + /** + * Constructs an add handler + * + * @param attributes attributes to use in {@link #populateModel(OperationContext, org.jboss.dmr.ModelNode, org.jboss.as.controller.registry.Resource)} + * @deprecated Use default constructor instead. Resource model auto-population logic relies on the {@link OperationDefinition#getParameters()} method of the operation definition with which this handler was registered. + */ + @Deprecated(forRemoval = true) public AbstractAddStepHandler(Parameters parameters) { this.attributes = parameters.attributes; } + /** + * Returns the attributes with which this handler was constructed. + * @deprecated Use the {@link OperationDefinition#getParameters()} method of the operation definition with which this handler was registered instead. + */ @Override + @Deprecated(forRemoval = true) public Collection getAttributes() { return this.attributes; } @@ -140,6 +164,26 @@ protected Resource createResource(final OperationContext context) { */ protected void populateModel(final OperationContext context, final ModelNode operation, final Resource resource) throws OperationFailedException { populateModel(operation, resource); + + // Detect operation header written by populateModel(ModelNode, ModelNode) + // If header exists, then subclass expects us to populate the model + if (operation.hasDefined(ModelDescriptionConstants.OPERATION_HEADERS, AUTO_POPULATE_MODEL)) { + ModelNode model = resource.getModel(); + ImmutableManagementResourceRegistration registration = context.getResourceRegistration(); + Map attributes = registration.getAttributes(PathAddress.EMPTY_ADDRESS); + for (AttributeDefinition parameter : registration.getOperationEntry(PathAddress.EMPTY_ADDRESS, ModelDescriptionConstants.ADD).getOperationDefinition().getParameters()) { + AttributeAccess attribute = attributes.get(parameter.getName()); + if ((attribute != null) && !AttributeAccess.Flag.ALIAS.test(attribute)) { + // Auto-populate add resource operation parameters that correspond to resource attributes, omitting aliases + parameter.validateAndSet(operation, model); + } else { + // Otherwise, just validate parameter + parameter.validateOperation(operation); + } + } + // Remove header added via populateModel(ModelNode, ModelNode) + operation.get(ModelDescriptionConstants.OPERATION_HEADERS).remove(AUTO_POPULATE_MODEL); + } } /** @@ -152,7 +196,9 @@ protected void populateModel(final OperationContext context, final ModelNode ope * @param resource the resource that corresponds to the address of {@code operation} * * @throws OperationFailedException if {@code operation} is invalid or populating the model otherwise fails + * @deprecated Override {@link #populateModel(OperationContext, ModelNode, Resource)} if necessary */ + @Deprecated(forRemoval = true) protected void populateModel(final ModelNode operation, final Resource resource) throws OperationFailedException { populateModel(operation, resource.getModel()); } @@ -168,11 +214,14 @@ protected void populateModel(final ModelNode operation, final Resource resource) * @param model persistent configuration model node that corresponds to the address of {@code operation} * * @throws OperationFailedException if {@code operation} is invalid or populating the model otherwise fails + * @deprecated Override {@link #populateModel(OperationContext, ModelNode, Resource)} if necessary */ + @Deprecated(forRemoval = true) protected void populateModel(final ModelNode operation, final ModelNode model) throws OperationFailedException { - for (AttributeDefinition attr : attributes) { - attr.validateAndSet(operation, model); - } + // Previously model auto-population happened here based on attributes provided via constructor + // If this method was invoked, we know that the subclass expects us to populate the model + // If so, indicate this via an operation header to be detected by our parent method + operation.get(ModelDescriptionConstants.OPERATION_HEADERS, AUTO_POPULATE_MODEL).set(true); } /** @@ -196,7 +245,8 @@ protected void populateModel(final ModelNode operation, final ModelNode model) t */ protected void recordCapabilitiesAndRequirements(final OperationContext context, final ModelNode operation, Resource resource) throws OperationFailedException { - for (RuntimeCapability capability : context.getResourceRegistration().getCapabilities()) { + ImmutableManagementResourceRegistration registration = context.getResourceRegistration(); + for (RuntimeCapability capability : registration.getCapabilities()) { if (capability.isDynamicallyNamed()) { context.registerCapability(capability.fromBaseCapability(context.getCurrentAddress())); } else { @@ -205,14 +255,18 @@ protected void recordCapabilitiesAndRequirements(final OperationContext context, } ModelNode model = resource.getModel(); - for (AttributeDefinition ad : attributes) { - if (model.hasDefined(ad.getName()) || ad.hasCapabilityRequirements()) { - ad.addCapabilityRequirements(context, resource, model.get(ad.getName())); + for (AttributeAccess attribute : registration.getAttributes(PathAddress.EMPTY_ADDRESS).values()) { + // Skip runtime attributes and aliases + if (AttributeAccess.Storage.RUNTIME.test(attribute) || AttributeAccess.Flag.ALIAS.test(attribute)) continue; + + AttributeDefinition definition = attribute.getAttributeDefinition(); + String attributeName = definition.getName(); + if (model.hasDefined(attributeName) || definition.hasCapabilityRequirements()) { + definition.addCapabilityRequirements(context, resource, model.get(attributeName)); } } - ImmutableManagementResourceRegistration mrr = context.getResourceRegistration(); - assert mrr.getRequirements() != null; - for (CapabilityReferenceRecorder recorder : mrr.getRequirements()) { + assert registration.getRequirements() != null; + for (CapabilityReferenceRecorder recorder : registration.getRequirements()) { recorder.addCapabilityRequirements(context, resource, null); } } @@ -326,24 +380,6 @@ public OrderedResourceCreator(boolean indexedAdd, Set orderedChildTypes) this.orderedChildTypes = orderedChildTypes == null ? Collections.emptySet() : orderedChildTypes; } - /** - * Constructor - * - * @param indexedAdd if ({@code true} this is the child of a parent with ordered children, - * and this child will be added at the {@code add-index} of the {@code add} operation in the - * parent's list of children of this type. If {@code false} this is a normal child, i.e. the - * insert will always happen at the end of the list as normal. - * @param orderedChildTypes if not {@code null} or empty, this indicates that this is a parent - * resource with ordered children, and the entries here are the type names of children which - * are ordered. - */ - public OrderedResourceCreator(boolean indexedAdd, String... orderedChildTypes) { - this.indexedAdd = indexedAdd; - Set set = new HashSet<>(orderedChildTypes.length); - set.addAll(Arrays.asList(orderedChildTypes)); - this.orderedChildTypes = set; - } - @Override public Resource createResource(OperationContext context, ModelNode operation) { // Creates a parent with ordered children (if set is not empty) @@ -363,6 +399,10 @@ public Resource createResource(OperationContext context, ModelNode operation) { } } + /** + * @deprecated Use default constructor instead. Operation parameters are determined via the {@link OperationDefinition#getParameters()} of the {@code ModelDescriptionConstants#ADD} operation associated resource. + */ + @Deprecated(forRemoval = true) public static class Parameters { // Set is not the ideal data structure, but since this is a protected field, we are stuck with it protected Set attributes = Set.of(); diff --git a/controller/src/main/java/org/jboss/as/controller/AbstractBoottimeAddStepHandler.java b/controller/src/main/java/org/jboss/as/controller/AbstractBoottimeAddStepHandler.java index 7d0e85ed74b..cf293d2064f 100644 --- a/controller/src/main/java/org/jboss/as/controller/AbstractBoottimeAddStepHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/AbstractBoottimeAddStepHandler.java @@ -29,26 +29,20 @@ */ public abstract class AbstractBoottimeAddStepHandler extends AbstractAddStepHandler { - /** - * {@inheritDoc} - */ protected AbstractBoottimeAddStepHandler() { } - /** - * {@inheritDoc} - */ + @Deprecated(forRemoval = true) protected AbstractBoottimeAddStepHandler(Collection attributes) { super(attributes); } - /** - * {@inheritDoc} - */ + @Deprecated(forRemoval = true) protected AbstractBoottimeAddStepHandler(AttributeDefinition... attributes) { super(attributes); } + @Deprecated(forRemoval = true) public AbstractBoottimeAddStepHandler(Parameters parameters) { super(parameters); } diff --git a/controller/src/main/java/org/jboss/as/controller/AbstractRemoveStepHandler.java b/controller/src/main/java/org/jboss/as/controller/AbstractRemoveStepHandler.java index 53eba1386f0..9649b426b96 100644 --- a/controller/src/main/java/org/jboss/as/controller/AbstractRemoveStepHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/AbstractRemoveStepHandler.java @@ -33,6 +33,7 @@ public abstract class AbstractRemoveStepHandler implements OperationStepHandler protected AbstractRemoveStepHandler() { } + @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { Resource resource = context.readResource(PathAddress.EMPTY_ADDRESS); @@ -49,6 +50,7 @@ public void execute(OperationContext context, ModelNode operation) throws Operat if (requiresRuntime(context)) { context.addStep(new OperationStepHandler() { + @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { performRuntime(context, operation, model); @@ -153,9 +155,8 @@ protected void performRemove(OperationContext context, final ModelNode operation * is invoked before that method is. Will not be {@code null} */ protected void recordCapabilitiesAndRequirements(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { - Set capabilitySet = context.getResourceRegistration().getCapabilities(); - - for (RuntimeCapability capability : capabilitySet) { + ImmutableManagementResourceRegistration registration = context.getResourceRegistration(); + for (RuntimeCapability capability : registration.getCapabilities()) { if (capability.isDynamicallyNamed()) { context.deregisterCapability(capability.getDynamicName(context.getCurrentAddress())); } else { @@ -163,18 +164,18 @@ protected void recordCapabilitiesAndRequirements(OperationContext context, Model } } ModelNode model = resource.getModel(); - ImmutableManagementResourceRegistration mrr = context.getResourceRegistration(); - for (String attr : mrr.getAttributeNames(PathAddress.EMPTY_ADDRESS)) { - AttributeAccess aa = mrr.getAttributeAccess(PathAddress.EMPTY_ADDRESS, attr); - if (aa != null) { - AttributeDefinition ad = aa.getAttributeDefinition(); - if (ad != null && (model.hasDefined(ad.getName()) || ad.hasCapabilityRequirements())) { - ad.removeCapabilityRequirements(context, resource, model.get(ad.getName())); - } + for (AttributeAccess attribute : registration.getAttributes(PathAddress.EMPTY_ADDRESS).values()) { + // Skip runtime attributes and aliases + if (AttributeAccess.Storage.RUNTIME.test(attribute) || AttributeAccess.Flag.ALIAS.test(attribute)) continue; + + AttributeDefinition definition = attribute.getAttributeDefinition(); + String attributeName = definition.getName(); + if (model.hasDefined(attributeName) || definition.hasCapabilityRequirements()) { + definition.removeCapabilityRequirements(context, resource, model.get(attributeName)); } } - assert mrr.getRequirements() != null; - for (CapabilityReferenceRecorder recorder : mrr.getRequirements()) { + assert registration.getRequirements() != null; + for (CapabilityReferenceRecorder recorder : registration.getRequirements()) { recorder.removeCapabilityRequirements(context, resource, null); } } @@ -210,7 +211,7 @@ protected boolean requiresRuntime(OperationContext context) { return context.isDefaultRequiresRuntime(); } - private static boolean hasResource (OperationContext context) { + private static boolean hasResource(OperationContext context) { try { context.readResource(PathAddress.EMPTY_ADDRESS, false); return true; diff --git a/controller/src/main/java/org/jboss/as/controller/AbstractWriteAttributeHandler.java b/controller/src/main/java/org/jboss/as/controller/AbstractWriteAttributeHandler.java index e857b5565d1..7a31cd9b7a0 100644 --- a/controller/src/main/java/org/jboss/as/controller/AbstractWriteAttributeHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/AbstractWriteAttributeHandler.java @@ -35,14 +35,20 @@ */ public abstract class AbstractWriteAttributeHandler implements OperationStepHandler { - private final ParametersValidator nameValidator = new ParametersValidator(); + private static final ParametersValidator NAME_VALIDATOR = new ParametersValidator(); private final Map attributeDefinitions; + protected AbstractWriteAttributeHandler() { + this.attributeDefinitions = Map.of(); + } + + @Deprecated(forRemoval = true) protected AbstractWriteAttributeHandler(final AttributeDefinition... definitions) { this(Arrays.asList(definitions)); } + @Deprecated(forRemoval = true) protected AbstractWriteAttributeHandler(final Collection definitions) { if (definitions.isEmpty()) { this.attributeDefinitions = Collections.emptyMap(); @@ -50,45 +56,53 @@ protected AbstractWriteAttributeHandler(final Collection de AttributeDefinition definition = definitions.iterator().next(); this.attributeDefinitions = Collections.singletonMap(definition.getName(), definition); } else { - this.attributeDefinitions = new HashMap<>(definitions.size()); + Map attributes = new HashMap<>(definitions.size()); for (AttributeDefinition definition : definitions) { - this.attributeDefinitions.put(definition.getName(), definition); + attributes.put(definition.getName(), definition); } + this.attributeDefinitions = Collections.unmodifiableMap(attributes); } } @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { - nameValidator.validate(operation); + NAME_VALIDATOR.validate(operation); final String attributeName = operation.require(NAME).asString(); // Don't require VALUE. Let the validator decide if it's bothered by an undefined value - ModelNode newValue = operation.hasDefined(VALUE) ? operation.get(VALUE) : new ModelNode(); + ModelNode attributeValue = operation.hasDefined(VALUE) ? operation.get(VALUE) : new ModelNode(); final Resource resource = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS); final ModelNode submodel = resource.getModel(); final ModelNode currentValue = submodel.get(attributeName).clone(); - final AttributeDefinition attributeDefinition = getAttributeDefinition(attributeName); + + AttributeAccess attributeAccess = context.getResourceRegistration().getAttributeAccess(PathAddress.EMPTY_ADDRESS, attributeName); + if (attributeAccess == null) { + throw new OperationFailedException(ControllerLogger.MGMT_OP_LOGGER.unknownAttribute(attributeName)); + } + if (!attributeAccess.getAccessType().isWritable()) { + throw new OperationFailedException(ControllerLogger.MGMT_OP_LOGGER.attributeNotWritable(attributeName)); + } + AttributeDefinition attributeDefinition = attributeAccess.getAttributeDefinition(); final ModelNode defaultValue = attributeDefinition.getDefaultValue(); final ModelNode syntheticOp = new ModelNode(); - syntheticOp.get(attributeName).set(newValue); + syntheticOp.get(attributeName).set(attributeValue); attributeDefinition.validateAndSet(syntheticOp, submodel); - newValue = submodel.get(attributeName); + ModelNode newValue = submodel.get(attributeName); recordCapabilitiesAndRequirements(context, attributeDefinition, newValue, currentValue); finishModelStage(context, operation, attributeName, newValue, currentValue, resource); if (requiresRuntime(context)) { - final ModelNode updatedValue = newValue; context.addStep(operation, new OperationStepHandler() { @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { - final ModelNode resolvedValue = attributeDefinition != null ? attributeDefinition.resolveModelAttribute(context, submodel) : context.resolveExpressions(updatedValue); - final HandbackHolder handback = new HandbackHolder(); + final ModelNode resolvedValue = attributeDefinition.resolveModelAttribute(context, submodel); + final HandbackHolder handback = new HandbackHolder<>(); final boolean reloadRequired = applyUpdateToRuntime(context, operation, attributeName, resolvedValue, currentValue, handback); if (reloadRequired) { - if (attributeDefinition != null && attributeDefinition.getFlags().contains(AttributeAccess.Flag.RESTART_JVM)){ + if (attributeDefinition.getFlags().contains(AttributeAccess.Flag.RESTART_JVM)){ context.restartRequired(); }else{ context.reloadRequired(); @@ -110,7 +124,7 @@ public void handleRollback(OperationContext context, ModelNode operation) { context.getCurrentAddress()); } if (reloadRequired) { - if (attributeDefinition != null && attributeDefinition.getFlags().contains(AttributeAccess.Flag.RESTART_JVM)) { + if (attributeDefinition.getFlags().contains(AttributeAccess.Flag.RESTART_JVM)) { context.revertRestartRequired(); } else { context.revertReloadRequired(); @@ -234,9 +248,10 @@ protected boolean requiresRuntime(OperationContext context) { * * @param attributeName the attribute name * @return the attribute definition of {@code attributeName} - * @throws IllegalArgumentException if no attribute definition with name {@code attributeName} exists. + * @deprecated No longer used. */ - protected AttributeDefinition getAttributeDefinition(final String attributeName) throws IllegalArgumentException { + @Deprecated(forRemoval = true) + protected AttributeDefinition getAttributeDefinition(final String attributeName) { AttributeDefinition response = attributeDefinitions.get(attributeName); if (response == null) { throw ControllerLogger.MGMT_OP_LOGGER.invalidAttributeDefinition(attributeName); diff --git a/controller/src/main/java/org/jboss/as/controller/ModelOnlyAddStepHandler.java b/controller/src/main/java/org/jboss/as/controller/ModelOnlyAddStepHandler.java index 1e902eca014..82ddc1b7c73 100644 --- a/controller/src/main/java/org/jboss/as/controller/ModelOnlyAddStepHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/ModelOnlyAddStepHandler.java @@ -18,15 +18,23 @@ */ public class ModelOnlyAddStepHandler extends AbstractAddStepHandler { + public static final OperationStepHandler INSTANCE = new ModelOnlyAddStepHandler(); + + protected ModelOnlyAddStepHandler() { + } + /** - * Creates a new {@code ModelOnlyStepHandler} that stores the given attributes to the model. - * - * @param attributes the attributes + * @deprecated Use {@link #INSTANCE} instead. */ + @Deprecated(forRemoval = true) public ModelOnlyAddStepHandler(AttributeDefinition... attributes) { super(attributes); } + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ModelOnlyAddStepHandler(Parameters parameters) { super(parameters); } @@ -41,23 +49,13 @@ protected final boolean requiresRuntime(OperationContext context) { return false; } - /** - * Throws {@link UnsupportedOperationException}. - * - * {@inheritDoc} - */ @Override protected final void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { - throw new UnsupportedOperationException(); + throw new IllegalStateException(); } - /** - * Throws {@link UnsupportedOperationException}. - * - * {@inheritDoc} - */ @Override protected final void rollbackRuntime(OperationContext context, ModelNode operation, Resource resource) { - throw new UnsupportedOperationException(); + throw new IllegalStateException(); } } diff --git a/controller/src/main/java/org/jboss/as/controller/ModelOnlyRemoveStepHandler.java b/controller/src/main/java/org/jboss/as/controller/ModelOnlyRemoveStepHandler.java index b792fdfa6a4..99292e09c33 100644 --- a/controller/src/main/java/org/jboss/as/controller/ModelOnlyRemoveStepHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/ModelOnlyRemoveStepHandler.java @@ -19,24 +19,14 @@ public class ModelOnlyRemoveStepHandler extends AbstractRemoveStepHandler { public static final ModelOnlyRemoveStepHandler INSTANCE = new ModelOnlyRemoveStepHandler(); - /** - * Throws {@link UnsupportedOperationException}. - * - * {@inheritDoc} - */ @Override protected void performRuntime(final OperationContext context, final ModelNode operation, final ModelNode model) throws OperationFailedException { - throw new UnsupportedOperationException(); + throw new IllegalStateException(); } - /** - * Throws {@link UnsupportedOperationException}. - * - * {@inheritDoc} - */ @Override protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { - throw new UnsupportedOperationException(); + throw new IllegalStateException(); } /** diff --git a/controller/src/main/java/org/jboss/as/controller/ModelOnlyWriteAttributeHandler.java b/controller/src/main/java/org/jboss/as/controller/ModelOnlyWriteAttributeHandler.java index 4c14db28a40..23e897985d9 100644 --- a/controller/src/main/java/org/jboss/as/controller/ModelOnlyWriteAttributeHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/ModelOnlyWriteAttributeHandler.java @@ -16,10 +16,23 @@ */ public class ModelOnlyWriteAttributeHandler extends AbstractWriteAttributeHandler { + public static final OperationStepHandler INSTANCE = new ModelOnlyWriteAttributeHandler(); + + protected ModelOnlyWriteAttributeHandler() { + } + + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ModelOnlyWriteAttributeHandler(AttributeDefinition... attributeDefinitions) { super(attributeDefinitions); } + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ModelOnlyWriteAttributeHandler(Collection attributeDefinitions) { super(attributeDefinitions); } @@ -32,12 +45,12 @@ protected final boolean requiresRuntime(OperationContext context) { @Override protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode resolvedValue, ModelNode currentValue, HandbackHolder handbackHolder) throws OperationFailedException { // should not be called as requiresRuntime returns false - throw new UnsupportedOperationException(); + throw new IllegalStateException(); } @Override protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode valueToRestore, ModelNode valueToRevert, Void handback) throws OperationFailedException { // should not be called as requiresRuntime returns false - throw new UnsupportedOperationException(); + throw new IllegalStateException(); } } diff --git a/controller/src/main/java/org/jboss/as/controller/OperationDescriptor.java b/controller/src/main/java/org/jboss/as/controller/OperationDescriptor.java index f9dba0fa6bd..df1e1de16ca 100644 --- a/controller/src/main/java/org/jboss/as/controller/OperationDescriptor.java +++ b/controller/src/main/java/org/jboss/as/controller/OperationDescriptor.java @@ -10,7 +10,9 @@ /** * Describes the parameters of operation.. * @author Paul Ferraro + * @deprecated To be removed without replacement. */ +@Deprecated(forRemoval = true) public interface OperationDescriptor { Collection getAttributes(); } diff --git a/controller/src/main/java/org/jboss/as/controller/ReloadRequiredAddStepHandler.java b/controller/src/main/java/org/jboss/as/controller/ReloadRequiredAddStepHandler.java index 684c0bb78bc..a2038c3f074 100644 --- a/controller/src/main/java/org/jboss/as/controller/ReloadRequiredAddStepHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/ReloadRequiredAddStepHandler.java @@ -28,14 +28,31 @@ */ public class ReloadRequiredAddStepHandler extends AbstractAddStepHandler { + public static final OperationStepHandler INSTANCE = new ReloadRequiredAddStepHandler(); + + protected ReloadRequiredAddStepHandler() { + } + + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ReloadRequiredAddStepHandler(AttributeDefinition... attributes) { super(attributes); } + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ReloadRequiredAddStepHandler(Collection attributes) { super(attributes); } + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ReloadRequiredAddStepHandler(Parameters parameters) { super(parameters); } diff --git a/controller/src/main/java/org/jboss/as/controller/ReloadRequiredWriteAttributeHandler.java b/controller/src/main/java/org/jboss/as/controller/ReloadRequiredWriteAttributeHandler.java index 9a60b6c4f54..08b5f912d14 100644 --- a/controller/src/main/java/org/jboss/as/controller/ReloadRequiredWriteAttributeHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/ReloadRequiredWriteAttributeHandler.java @@ -18,10 +18,23 @@ */ public class ReloadRequiredWriteAttributeHandler extends AbstractWriteAttributeHandler { + public static final OperationStepHandler INSTANCE = new ReloadRequiredWriteAttributeHandler(); + + protected ReloadRequiredWriteAttributeHandler() { + } + + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ReloadRequiredWriteAttributeHandler(final AttributeDefinition... definitions) { super(definitions); } + /** + * @deprecated Use {@link #INSTANCE} instead. + */ + @Deprecated(forRemoval = true) public ReloadRequiredWriteAttributeHandler(final Collection definitions) { super(definitions); } @@ -34,12 +47,12 @@ protected boolean applyUpdateToRuntime(OperationContext context, ModelNode opera // In fact we just can't resolve the currentValue without any doubt. When in doubt reload, so we will return true in this case. // For example if the currentValue is ${foo} and that for some reason foo has changed in between, then we should reload even if now ${foo} resolves // as resolvedValue. - ModelNode resolvedTypedValue = convertToType(attributeName, resolvedValue); + ModelNode resolvedTypedValue = convertToType(context, attributeName, resolvedValue); return !resolvedTypedValue.equals(currentValue); } - private ModelNode convertToType(String attributeName, ModelNode resolvedValue) { - AttributeDefinition attributeDefinition = getAttributeDefinition(attributeName); + private static ModelNode convertToType(OperationContext context, String attributeName, ModelNode resolvedValue) { + AttributeDefinition attributeDefinition = context.getResourceRegistration().getAttributeAccess(PathAddress.EMPTY_ADDRESS, attributeName).getAttributeDefinition(); ModelType type = attributeDefinition.getType(); ModelNode converted = resolvedValue.clone(); try { diff --git a/controller/src/main/java/org/jboss/as/controller/RestartParentWriteAttributeHandler.java b/controller/src/main/java/org/jboss/as/controller/RestartParentWriteAttributeHandler.java index 5226f0a80e3..20c0f194cd5 100644 --- a/controller/src/main/java/org/jboss/as/controller/RestartParentWriteAttributeHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/RestartParentWriteAttributeHandler.java @@ -6,6 +6,7 @@ package org.jboss.as.controller; import java.util.Collection; +import java.util.List; import org.jboss.as.controller.OperationContext.Stage; import org.jboss.as.controller.operations.common.Util; @@ -23,11 +24,22 @@ public abstract class RestartParentWriteAttributeHandler extends AbstractWriteAttributeHandler { private final String parentKeyName; - public RestartParentWriteAttributeHandler(String parentKeyName, AttributeDefinition... definitions) { - super(definitions); + public RestartParentWriteAttributeHandler(String parentKeyName) { this.parentKeyName = parentKeyName; } + /** + * @deprecated Use {@link #RestartParentWriteAttributeHandler(String)} instead. + */ + @Deprecated(forRemoval = true) + public RestartParentWriteAttributeHandler(String parentKeyName, AttributeDefinition... definitions) { + this(parentKeyName, List.of(definitions)); + } + + /** + * @deprecated Use {@link #RestartParentWriteAttributeHandler(String)} instead. + */ + @Deprecated(forRemoval = true) public RestartParentWriteAttributeHandler(final String parentKeyName, final Collection definitions) { super(definitions); this.parentKeyName = parentKeyName; diff --git a/controller/src/main/java/org/jboss/as/controller/SimpleResourceDefinition.java b/controller/src/main/java/org/jboss/as/controller/SimpleResourceDefinition.java index 0d3db0497aa..224bfae6a94 100644 --- a/controller/src/main/java/org/jboss/as/controller/SimpleResourceDefinition.java +++ b/controller/src/main/java/org/jboss/as/controller/SimpleResourceDefinition.java @@ -6,22 +6,25 @@ package org.jboss.as.controller; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; import org.jboss.as.controller.access.management.AccessConstraintDefinition; import org.jboss.as.controller.capability.RuntimeCapability; import org.jboss.as.controller.descriptions.DefaultResourceAddDescriptionProvider; import org.jboss.as.controller.descriptions.DefaultResourceDescriptionProvider; +import org.jboss.as.controller.descriptions.DefaultResourceRemoveDescriptionProvider; import org.jboss.as.controller.descriptions.DescriptionProvider; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.as.controller.descriptions.ResourceDescriptionResolver; import org.jboss.as.controller.logging.ControllerLogger; +import org.jboss.as.controller.registry.AttributeAccess; import org.jboss.as.controller.registry.ImmutableManagementResourceRegistration; import org.jboss.as.controller.registry.ManagementResourceRegistration; import org.jboss.as.controller.registry.OperationEntry; @@ -153,7 +156,6 @@ public DescriptionProvider getDescriptionProvider(ImmutableManagementResourceReg * Registers an add operation handler or a remove operation handler if one was provided to the constructor. */ @Override - @SuppressWarnings("deprecation") public void registerOperations(ManagementResourceRegistration resourceRegistration) { if (addHandler != null) { registerAddOperation(resourceRegistration, addHandler, addRestartLevel); @@ -217,77 +219,81 @@ public ResourceDescriptionResolver getResourceDescriptionResolver() { } /** - * Registers add operation + * Returns the parameters of the {@value ModelDescriptionConstants#ADD} resource operation. + * The default implementation returns all registered attributes, excluding runtime-only and resource-only. + * @param registration the registration of this resource definition + * @return an array of attribute definitions + */ + protected AttributeDefinition[] getAddOperationParameters(ManagementResourceRegistration registration) { + Stream attributes = registration.getAttributes(PathAddress.EMPTY_ADDRESS).values().stream() + .filter(AttributeAccess.Storage.CONFIGURATION) // Ignore runtime attributes + .map(AttributeAccess::getAttributeDefinition) + .filter(Predicate.not(AttributeDefinition::isResourceOnly)) // Ignore resource-only attributes + ; + if (registration.isOrderedChildResource()) { + attributes = Stream.concat(Stream.of(DefaultResourceAddDescriptionProvider.INDEX), attributes); + } + return attributes.toArray(AttributeDefinition[]::new); + } + + /** + * Registers the {@value ModelDescriptionConstants#ADD} resource operation. * * @param registration resource on which to register * @param handler operation handler to register * @param flags with flags - * @deprecated use {@link #registerAddOperation(org.jboss.as.controller.registry.ManagementResourceRegistration, AbstractAddStepHandler, org.jboss.as.controller.registry.OperationEntry.Flag...)} */ - @Deprecated - @SuppressWarnings("deprecation") protected void registerAddOperation(final ManagementResourceRegistration registration, final OperationStepHandler handler, OperationEntry.Flag... flags) { - Collection parameters = (handler instanceof OperationDescriptor) ? ((OperationDescriptor) handler).getAttributes() : Collections.emptyList(); - if (handler instanceof DescriptionProvider) { - registration.registerOperationHandler(getOperationDefinition(ModelDescriptionConstants.ADD, - (DescriptionProvider) handler, parameters, OperationEntry.EntryType.PUBLIC,flags) - , handler); - - } else { - registration.registerOperationHandler(getOperationDefinition(ModelDescriptionConstants.ADD, - new DefaultResourceAddDescriptionProvider(registration, descriptionResolver, orderedChild), - parameters, - OperationEntry.EntryType.PUBLIC, - flags) - , handler); - } + DescriptionProvider descriptionProvider = (handler instanceof DescriptionProvider) ? (DescriptionProvider) handler : new DefaultResourceAddDescriptionProvider(registration, this.descriptionResolver, this.orderedChild); + OperationDefinition definition = new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.ADD, this.descriptionResolver) + .setParameters(this.getAddOperationParameters(registration)) + .setDescriptionProvider(descriptionProvider) + .setEntryType(OperationEntry.EntryType.PUBLIC) + .withFlags(flags) + .build(); + registration.registerOperationHandler(definition, handler); } - private OperationDefinition getOperationDefinition(String operationName, DescriptionProvider descriptionProvider, Collection parameters, OperationEntry.EntryType entryType, OperationEntry.Flag... flags){ - return new SimpleOperationDefinitionBuilder(operationName, descriptionResolver) - .setParameters(parameters.toArray(new AttributeDefinition[parameters.size()])) - .withFlags(flags) - .setEntryType(entryType) + /** + * Registers the {@value ModelDescriptionConstants#REMOVE} resource operation. + * + * @param registration resource on which to register + * @param handler operation handler to register + * @param flags with flags + */ + protected void registerRemoveOperation(final ManagementResourceRegistration registration, final OperationStepHandler handler, OperationEntry.Flag... flags) { + DescriptionProvider descriptionProvider = (handler instanceof DescriptionProvider) ? (DescriptionProvider) handler : new DefaultResourceRemoveDescriptionProvider(this.descriptionResolver); + OperationDefinition definition = new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.REMOVE, this.descriptionResolver) .setDescriptionProvider(descriptionProvider) + .setEntryType(OperationEntry.EntryType.PUBLIC) + .withFlags(flags) .build(); - + registration.registerOperationHandler(definition, handler); } /** - * Registers add operation - *

* Registers add operation * * @param registration resource on which to register * @param handler operation handler to register * @param flags with flags + * @deprecated Redundant with {@link #registerAddOperation(ManagementResourceRegistration, OperationStepHandler, org.jboss.as.controller.registry.OperationEntry.Flag...) */ - protected void registerAddOperation(final ManagementResourceRegistration registration, final AbstractAddStepHandler handler, - OperationEntry.Flag... flags) { - registration.registerOperationHandler(getOperationDefinition(ModelDescriptionConstants.ADD, - new DefaultResourceAddDescriptionProvider(registration, descriptionResolver, orderedChild), handler.getAttributes(), OperationEntry.EntryType.PUBLIC, flags) - , handler); - } - @Deprecated - @SuppressWarnings("deprecation") - protected void registerRemoveOperation(final ManagementResourceRegistration registration, final OperationStepHandler handler, - OperationEntry.Flag... flags) { - if (handler instanceof DescriptionProvider) { - registration.registerOperationHandler(getOperationDefinition(ModelDescriptionConstants.REMOVE, - (DescriptionProvider) handler, Collections.emptyList(), OperationEntry.EntryType.PUBLIC,flags) - , handler); - } else { - OperationDefinition opDef = new SimpleOperationDefinitionBuilder(ModelDescriptionConstants.REMOVE, descriptionResolver) - .withFlags(flags) - .build(); - registration.registerOperationHandler(opDef, handler); - } + protected void registerAddOperation(final ManagementResourceRegistration registration, final AbstractAddStepHandler handler, OperationEntry.Flag... flags) { + this.registerAddOperation(registration, (OperationStepHandler) handler, flags); } - @SuppressWarnings("deprecation") - protected void registerRemoveOperation(final ManagementResourceRegistration registration, final AbstractRemoveStepHandler handler, - OperationEntry.Flag... flags) { + /** + * Registers remove operation + * + * @param registration resource on which to register + * @param handler operation handler to register + * @param flags with flags + * @deprecated Redundant with {@link #registerRemoveOperation(ManagementResourceRegistration, OperationStepHandler, org.jboss.as.controller.registry.OperationEntry.Flag...) + */ + @Deprecated + protected void registerRemoveOperation(final ManagementResourceRegistration registration, final AbstractRemoveStepHandler handler, OperationEntry.Flag... flags) { registerRemoveOperation(registration, (OperationStepHandler) handler, flags); } diff --git a/controller/src/main/java/org/jboss/as/controller/descriptions/DefaultResourceAddDescriptionProvider.java b/controller/src/main/java/org/jboss/as/controller/descriptions/DefaultResourceAddDescriptionProvider.java index fca7f3a0754..5d04555cd44 100644 --- a/controller/src/main/java/org/jboss/as/controller/descriptions/DefaultResourceAddDescriptionProvider.java +++ b/controller/src/main/java/org/jboss/as/controller/descriptions/DefaultResourceAddDescriptionProvider.java @@ -32,8 +32,7 @@ */ public class DefaultResourceAddDescriptionProvider implements DescriptionProvider { - - private static AttributeDefinition INDEX = SimpleAttributeDefinitionBuilder.create(ModelDescriptionConstants.ADD_INDEX, ModelType.INT, true).build(); + public static final AttributeDefinition INDEX = SimpleAttributeDefinitionBuilder.create(ModelDescriptionConstants.ADD_INDEX, ModelType.INT, true).build(); private final ImmutableManagementResourceRegistration registration; final ResourceDescriptionResolver descriptionResolver; diff --git a/controller/src/main/java/org/jboss/as/controller/registry/AttributeAccess.java b/controller/src/main/java/org/jboss/as/controller/registry/AttributeAccess.java index 6c07ecdd2a3..cf1daf31471 100644 --- a/controller/src/main/java/org/jboss/as/controller/registry/AttributeAccess.java +++ b/controller/src/main/java/org/jboss/as/controller/registry/AttributeAccess.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.OperationStepHandler; @@ -20,7 +21,7 @@ * * @author Brian Stansberry */ -public final class AttributeAccess { +public class AttributeAccess { /** * Indicates how an attributed is accessed. @@ -73,7 +74,7 @@ public boolean isWritable() { /** * Indicates whether an attribute is derived from the persistent configuration or is a purely runtime attribute. */ - public enum Storage { + public enum Storage implements Predicate { /** * An attribute whose value is stored in the persistent configuration. * The value may also be stored in runtime services. @@ -96,10 +97,14 @@ public String toString() { return label; } + @Override + public boolean test(AttributeAccess attribute) { + return attribute.getStorageType() == this; + } } /** Flags to indicate special characteristics of an attribute */ - public enum Flag { + public enum Flag implements Predicate { /** A modification to the attribute can be applied to the runtime without requiring a restart */ RESTART_NONE, /** A modification to the attribute can only be applied to the runtime via a full jvm restart */ @@ -172,6 +177,11 @@ public static Set immutableSetOf(AttributeAccess.Flag... f return result; } + + @Override + public boolean test(AttributeAccess attribute) { + return attribute.getFlags().contains(this); + } } private final AccessType access; diff --git a/controller/src/main/java/org/jboss/as/controller/registry/OperationEntry.java b/controller/src/main/java/org/jboss/as/controller/registry/OperationEntry.java index 275530ee514..1d26da3f3f2 100644 --- a/controller/src/main/java/org/jboss/as/controller/registry/OperationEntry.java +++ b/controller/src/main/java/org/jboss/as/controller/registry/OperationEntry.java @@ -22,7 +22,7 @@ * * @author Emanuel Muckenhuber */ -public final class OperationEntry { +public class OperationEntry { public enum EntryType { PUBLIC, PRIVATE } diff --git a/controller/src/test/java/org/jboss/as/controller/CapabilityRegistryTestCase.java b/controller/src/test/java/org/jboss/as/controller/CapabilityRegistryTestCase.java index 40e03509a9c..8a5a9464a72 100644 --- a/controller/src/test/java/org/jboss/as/controller/CapabilityRegistryTestCase.java +++ b/controller/src/test/java/org/jboss/as/controller/CapabilityRegistryTestCase.java @@ -136,10 +136,10 @@ public void handleRollback(OperationContext context, ModelNode operation) { private static final ResourceDefinition TEST_RESOURCE1 = ResourceBuilder.Factory.create(TEST_ADDRESS1.getElement(0), NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddOperation(new AbstractAddStepHandler(ad, other)) - .setRemoveOperation(new AbstractRemoveStepHandler() {}) - .addReadWriteAttribute(ad, null, new ReloadRequiredWriteAttributeHandler(ad)) - .addReadWriteAttribute(other, null, new ReloadRequiredWriteAttributeHandler(other)) + .setAddOperation(new ModelOnlyAddStepHandler()) + .setRemoveOperation(new ModelOnlyRemoveStepHandler()) + .addReadWriteAttribute(ad, null, ReloadRequiredWriteAttributeHandler.INSTANCE) + .addReadWriteAttribute(other, null, ReloadRequiredWriteAttributeHandler.INSTANCE) .addOperation(SimpleOperationDefinitionBuilder.of("add-cap", NonResolvingResourceDescriptionResolver.INSTANCE).build(), (context, operation) -> { @@ -153,19 +153,19 @@ public void handleRollback(OperationContext context, ModelNode operation) { private static final ResourceDefinition SUB_RESOURCE = ResourceBuilder.Factory.create(TEST_ADDRESS3.getElement(0), NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddOperation(new AbstractAddStepHandler()) + .setAddOperation(new ModelOnlyAddStepHandler()) .setRemoveOperation(ReloadRequiredRemoveStepHandler.INSTANCE) - .addReadWriteAttribute(ad, null, new ReloadRequiredWriteAttributeHandler(ad)) + .addReadWriteAttribute(ad, null, ReloadRequiredWriteAttributeHandler.INSTANCE) .addCapability(TEST_CAPABILITY3) .build(); private static final ResourceDefinition TEST_RESOURCE2 = ResourceBuilder.Factory.create(TEST_ADDRESS2.getElement(0), NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddOperation(new AbstractAddStepHandler(ad, other)) + .setAddOperation(new ModelOnlyAddStepHandler()) .setRemoveOperation(ReloadRequiredRemoveStepHandler.INSTANCE) - .addReadWriteAttribute(ad, null, new ReloadRequiredWriteAttributeHandler(ad)) - .addReadWriteAttribute(other, null, new ReloadRequiredWriteAttributeHandler(other)) + .addReadWriteAttribute(ad, null, ReloadRequiredWriteAttributeHandler.INSTANCE) + .addReadWriteAttribute(other, null, ReloadRequiredWriteAttributeHandler.INSTANCE) .addCapability(TEST_CAPABILITY2) .addOperation(SimpleOperationDefinitionBuilder.of("add-sub-resource", NonResolvingResourceDescriptionResolver.INSTANCE).build(), @@ -184,22 +184,22 @@ public void handleRollback(OperationContext context, ModelNode operation) { private static final ResourceDefinition TEST_RESOURCE4 = ResourceBuilder.Factory.create(TEST_ADDRESS4.getElement(0), NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddOperation(new AbstractAddStepHandler(ad, other) { - @Override - protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { - if(operation.hasDefined("fail")) { - throw new OperationFailedException("Let's rollback"); - } - } + .setAddOperation(new AbstractAddStepHandler() { + @Override + protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { + if (operation.hasDefined("fail")) { + throw new OperationFailedException("Let's rollback"); + } + } - @Override - protected boolean requiresRuntime(OperationContext context) { - return true; - } + @Override + protected boolean requiresRuntime(OperationContext context) { + return true; + } }) .setRemoveOperation(ReloadRequiredRemoveStepHandler.INSTANCE) - .addReadWriteAttribute(ad, null, new ReloadRequiredWriteAttributeHandler(ad)) - .addReadWriteAttribute(other, null, new ReloadRequiredWriteAttributeHandler(other)) + .addReadWriteAttribute(ad, null, ReloadRequiredWriteAttributeHandler.INSTANCE) + .addReadWriteAttribute(other, null, ReloadRequiredWriteAttributeHandler.INSTANCE) .addCapability(IO_POOL_RUNTIME_CAPABILITY) .addCapability(IO_WORKER_RUNTIME_CAPABILITY) .build(); diff --git a/controller/src/test/java/org/jboss/as/controller/EnvVarAttributeOverrideModel.java b/controller/src/test/java/org/jboss/as/controller/EnvVarAttributeOverrideModel.java index 56572a7b6b9..3aa14d8b974 100644 --- a/controller/src/test/java/org/jboss/as/controller/EnvVarAttributeOverrideModel.java +++ b/controller/src/test/java/org/jboss/as/controller/EnvVarAttributeOverrideModel.java @@ -18,8 +18,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import java.util.Arrays; - import org.jboss.as.controller.descriptions.NonResolvingResourceDescriptionResolver; import org.jboss.as.controller.operations.global.GlobalNotifications; import org.jboss.as.controller.operations.global.GlobalOperationHandlers; @@ -61,10 +59,10 @@ protected void initModel(ManagementModel managementModel) { private static ResourceDefinition createDummyProfileResourceDefinition() { return ResourceBuilder.Factory.create(CUSTOM_RESOURCE_ADDR.getElement(0), NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddOperation(new AbstractAddStepHandler(Arrays.asList(MY_ATTR, MY_LIST_ATTR))) + .setAddOperation(new ModelOnlyAddStepHandler()) .setRemoveOperation(ReloadRequiredRemoveStepHandler.INSTANCE) - .addReadWriteAttribute(MY_ATTR, null, new ReloadRequiredWriteAttributeHandler(MY_ATTR)) - .addReadWriteAttribute(MY_LIST_ATTR, null, new ReloadRequiredWriteAttributeHandler(MY_LIST_ATTR)) + .addReadWriteAttribute(MY_ATTR, null, ReloadRequiredWriteAttributeHandler.INSTANCE) + .addReadWriteAttribute(MY_LIST_ATTR, null, ReloadRequiredWriteAttributeHandler.INSTANCE) .build(); } diff --git a/controller/src/test/java/org/jboss/as/controller/RemoveNonExistingResourceTestCase.java b/controller/src/test/java/org/jboss/as/controller/RemoveNonExistingResourceTestCase.java index 872ff8b7e18..679f4d71d3a 100644 --- a/controller/src/test/java/org/jboss/as/controller/RemoveNonExistingResourceTestCase.java +++ b/controller/src/test/java/org/jboss/as/controller/RemoveNonExistingResourceTestCase.java @@ -157,7 +157,7 @@ public void execute(OperationContext context, ModelNode operation) throws Operat SimpleResourceDefinition subsystemResource = new SimpleResourceDefinition( PathElement.pathElement(SUBSYSTEM, module), NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(), + ModelOnlyAddStepHandler.INSTANCE, ReloadRequiredRemoveStepHandler.INSTANCE ){ @@ -176,7 +176,7 @@ private static class FakeSubmodelChild extends SimpleResourceDefinition { public FakeSubmodelChild() { super(PathElement.pathElement(SUBMODEL_NAME), NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(), + ModelOnlyAddStepHandler.INSTANCE, new RestartParentResourceRemoveHandler("attr") { @Override diff --git a/controller/src/test/java/org/jboss/as/controller/access/rbac/AddResourceTestCase.java b/controller/src/test/java/org/jboss/as/controller/access/rbac/AddResourceTestCase.java index a30fcb5f155..490c77776b6 100644 --- a/controller/src/test/java/org/jboss/as/controller/access/rbac/AddResourceTestCase.java +++ b/controller/src/test/java/org/jboss/as/controller/access/rbac/AddResourceTestCase.java @@ -11,10 +11,11 @@ import java.util.Collections; import java.util.List; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AbstractRemoveStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.ManagementModel; +import org.jboss.as.controller.ModelOnlyAddStepHandler; +import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.ModelOnlyWriteAttributeHandler; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; @@ -371,8 +372,8 @@ protected void initModel(ManagementModel managementModel) { private static class RootResourceDefinition extends SimpleResourceDefinition { RootResourceDefinition() { super(new Parameters(PathElement.pathElement("root"), NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler()) - .setRemoveHandler(new AbstractRemoveStepHandler() {})); + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) + .setRemoveHandler(ModelOnlyRemoveStepHandler.INSTANCE)); } @Override @@ -420,7 +421,7 @@ public void registerAttributes(ManagementResourceRegistration resourceRegistrati @Override public void registerOperations(ManagementResourceRegistration registration) { super.registerOperations(registration); - super.registerAddOperation(registration, new AbstractAddStepHandler(attributes), OperationEntry.Flag.RESTART_RESOURCE_SERVICES); + super.registerAddOperation(registration, ModelOnlyAddStepHandler.INSTANCE, OperationEntry.Flag.RESTART_RESOURCE_SERVICES); } } diff --git a/controller/src/test/java/org/jboss/as/controller/test/OrderedChildResourceTestCase.java b/controller/src/test/java/org/jboss/as/controller/test/OrderedChildResourceTestCase.java index a1dbabad6ee..c455c2b0df3 100644 --- a/controller/src/test/java/org/jboss/as/controller/test/OrderedChildResourceTestCase.java +++ b/controller/src/test/java/org/jboss/as/controller/test/OrderedChildResourceTestCase.java @@ -17,9 +17,9 @@ import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.RECURSIVE; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REQUEST_PROPERTIES; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.ManagementModel; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.ModelOnlyWriteAttributeHandler; import org.jboss.as.controller.PathAddress; @@ -141,8 +141,8 @@ private static class ParentResourceDefinition extends SimpleResourceDefinition { public ParentResourceDefinition() { super(PARENT_MAIN, NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(REQUEST_ATTRIBUTES), - new ModelOnlyRemoveStepHandler()); + ModelOnlyAddStepHandler.INSTANCE, + ModelOnlyRemoveStepHandler.INSTANCE); } @Override @@ -160,8 +160,8 @@ private static class OrderedChildResourceDefinition extends SimpleResourceDefini public OrderedChildResourceDefinition() { super(new Parameters(CHILD, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler(REQUEST_ATTRIBUTES)) - .setRemoveHandler(new ModelOnlyRemoveStepHandler()) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) + .setRemoveHandler(ModelOnlyRemoveStepHandler.INSTANCE) .setOrderedChild()); } diff --git a/core-management/core-management-subsystem/src/main/java/org/wildfly/extension/core/management/CoreManagementRootResourceDefinition.java b/core-management/core-management-subsystem/src/main/java/org/wildfly/extension/core/management/CoreManagementRootResourceDefinition.java index 7a5e6e48336..2a101f83c23 100644 --- a/core-management/core-management-subsystem/src/main/java/org/wildfly/extension/core/management/CoreManagementRootResourceDefinition.java +++ b/core-management/core-management-subsystem/src/main/java/org/wildfly/extension/core/management/CoreManagementRootResourceDefinition.java @@ -11,8 +11,8 @@ import java.util.Collections; import java.util.List; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.PersistentResourceDefinition; import org.jboss.as.controller.ReloadRequiredRemoveStepHandler; @@ -26,7 +26,7 @@ class CoreManagementRootResourceDefinition extends PersistentResourceDefinition CoreManagementRootResourceDefinition() { super(CoreManagementExtension.SUBSYSTEM_PATH, CoreManagementExtension.getResourceDescriptionResolver(), - new AbstractAddStepHandler(), + ModelOnlyAddStepHandler.INSTANCE, ReloadRequiredRemoveStepHandler.INSTANCE); } diff --git a/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderAddHandler.java b/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderAddHandler.java index b1018279062..0f17fc75c5e 100644 --- a/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderAddHandler.java +++ b/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderAddHandler.java @@ -26,10 +26,6 @@ */ class AggregateDiscoveryProviderAddHandler extends AbstractAddStepHandler { - AggregateDiscoveryProviderAddHandler() { - super(new Parameters().addAttribute(AggregateDiscoveryProviderDefinition.PROVIDER_NAMES)); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { CapabilityServiceBuilder builder = context.getCapabilityServiceTarget().addService(); diff --git a/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderDefinition.java b/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderDefinition.java index ec0fd05d3ef..08359ce0a62 100644 --- a/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderDefinition.java +++ b/discovery/src/main/java/org/wildfly/extension/discovery/AggregateDiscoveryProviderDefinition.java @@ -41,6 +41,6 @@ final class AggregateDiscoveryProviderDefinition extends SimpleResourceDefinitio @Override public void registerAttributes(final ManagementResourceRegistration resourceRegistration) { - resourceRegistration.registerReadWriteAttribute(PROVIDER_NAMES, null, new ReloadRequiredWriteAttributeHandler(PROVIDER_NAMES)); + resourceRegistration.registerReadWriteAttribute(PROVIDER_NAMES, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } diff --git a/discovery/src/main/java/org/wildfly/extension/discovery/DiscoverySubsystemDefinition.java b/discovery/src/main/java/org/wildfly/extension/discovery/DiscoverySubsystemDefinition.java index d79cc4d7fdc..39f5ab13ad3 100644 --- a/discovery/src/main/java/org/wildfly/extension/discovery/DiscoverySubsystemDefinition.java +++ b/discovery/src/main/java/org/wildfly/extension/discovery/DiscoverySubsystemDefinition.java @@ -33,7 +33,7 @@ static TransformationDescription buildTransformers(ModelVersion version) { DiscoverySubsystemDefinition() { super(new Parameters(PATH, DiscoveryExtension.SUBSYSTEM_RESOLVER) - .setAddHandler(new ModelOnlyAddStepHandler()) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) .setRemoveHandler(ReloadRequiredRemoveStepHandler.INSTANCE) ); } diff --git a/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderAddHandler.java b/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderAddHandler.java index 94fddf9cb89..87465e82fcf 100644 --- a/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderAddHandler.java +++ b/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderAddHandler.java @@ -29,10 +29,6 @@ */ class StaticDiscoveryProviderAddHandler extends AbstractAddStepHandler { - StaticDiscoveryProviderAddHandler() { - super(new Parameters().addAttribute(StaticDiscoveryProviderDefinition.SERVICES)); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { List services = StaticDiscoveryProviderDefinition.SERVICES.resolveModelAttribute(context, resource.getModel()).asListOrEmpty(); diff --git a/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderDefinition.java b/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderDefinition.java index 6310b347a47..2b09cd29a85 100644 --- a/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderDefinition.java +++ b/discovery/src/main/java/org/wildfly/extension/discovery/StaticDiscoveryProviderDefinition.java @@ -73,6 +73,6 @@ final class StaticDiscoveryProviderDefinition extends SimpleResourceDefinition { @Override public void registerAttributes(final ManagementResourceRegistration resourceRegistration) { - resourceRegistration.registerReadWriteAttribute(SERVICES, null, new ReloadRequiredWriteAttributeHandler(SERVICES)); + resourceRegistration.registerReadWriteAttribute(SERVICES, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRoleAdd.java b/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRoleAdd.java index 0cd58381e45..2a129c574e0 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRoleAdd.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRoleAdd.java @@ -31,7 +31,7 @@ class HostScopedRoleAdd extends ScopedRoleAddHandler { private final WritableAuthorizerConfiguration authorizerConfiguration; HostScopedRoleAdd(Map constraintMap, WritableAuthorizerConfiguration authorizerConfiguration) { - super(authorizerConfiguration, HostScopedRolesResourceDefinition.BASE_ROLE, HostScopedRolesResourceDefinition.HOSTS); + super(authorizerConfiguration); this.constraintMap = constraintMap; this.authorizerConfiguration = authorizerConfiguration; } diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRolesResourceDefinition.java b/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRolesResourceDefinition.java index 884359198dd..673609af228 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRolesResourceDefinition.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/access/HostScopedRolesResourceDefinition.java @@ -18,13 +18,11 @@ import org.jboss.as.controller.AttributeMarshaller; import org.jboss.as.controller.ListAttributeDefinition; import org.jboss.as.controller.OperationDefinition; +import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; -import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; -import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; import org.jboss.as.controller.SimpleListAttributeDefinition; import org.jboss.as.controller.SimpleOperationDefinitionBuilder; -import org.jboss.as.controller.SimpleResourceDefinition; import org.jboss.as.controller.access.constraint.HostEffectConstraint; import org.jboss.as.controller.access.management.WritableAuthorizerConfiguration; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; @@ -41,16 +39,10 @@ * * @author Brian Stansberry (c) 2013 Red Hat Inc. */ -public class HostScopedRolesResourceDefinition extends SimpleResourceDefinition { +public class HostScopedRolesResourceDefinition extends ScopedRoleResourceDefinition { public static final PathElement PATH_ELEMENT = PathElement.pathElement(HOST_SCOPED_ROLE); - public static final SimpleAttributeDefinition BASE_ROLE = - new SimpleAttributeDefinitionBuilder(ModelDescriptionConstants.BASE_ROLE, ModelType.STRING) - .setRestartAllServices() - .build(); - - public static final ListAttributeDefinition HOSTS = SimpleListAttributeDefinition.Builder.of(ModelDescriptionConstants.HOSTS, new SimpleAttributeDefinitionBuilder(HOST, ModelType.STRING) .setAttributeMarshaller(new AttributeMarshaller() { @@ -64,12 +56,12 @@ public void marshallAsElement(AttributeDefinition attribute, ModelNode resourceM .setWrapXmlList(false) .build(); - private final HostScopedRoleAdd addHandler; - private final HostScopedRoleRemove removeHandler; - private final HostScopedRoleWriteAttributeHandler writeAttributeHandler; + private final OperationStepHandler addHandler; + private final OperationStepHandler removeHandler; + private final OperationStepHandler writeAttributeHandler; public HostScopedRolesResourceDefinition(WritableAuthorizerConfiguration authorizerConfiguration) { - super(PATH_ELEMENT, DomainManagementResolver.getResolver("core.access-control.host-scoped-role")); + super(PATH_ELEMENT, DomainManagementResolver.getResolver("core.access-control.host-scoped-role"), authorizerConfiguration); Map constraintMap = new HashMap(); this.addHandler = new HostScopedRoleAdd(constraintMap, authorizerConfiguration); @@ -89,7 +81,6 @@ public void registerOperations(ManagementResourceRegistration resourceRegistrati public void registerAttributes(ManagementResourceRegistration resourceRegistration) { super.registerAttributes(resourceRegistration); - resourceRegistration.registerReadWriteAttribute(BASE_ROLE, null, new ReloadRequiredWriteAttributeHandler(BASE_ROLE)); resourceRegistration.registerReadWriteAttribute(HOSTS, null, writeAttributeHandler); } } diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleAddHandler.java b/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleAddHandler.java index 0e38786ca7e..2b7ca45a8f6 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleAddHandler.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleAddHandler.java @@ -4,27 +4,18 @@ */ package org.jboss.as.domain.management.access; -import org.jboss.as.controller.ParameterCorrector; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.HOST_SCOPED_ROLE; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SERVER_GROUP_SCOPED_ROLE; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; import java.util.Set; import org.jboss.as.controller.AbstractAddStepHandler; -import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.PathElement; -import org.jboss.as.controller.SimpleAttributeDefinition; -import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; import org.jboss.as.controller.access.management.WritableAuthorizerConfiguration; -import org.jboss.as.controller.descriptions.ModelDescriptionConstants; -import org.jboss.as.controller.operations.validation.ParameterValidator; import org.jboss.as.controller.registry.Resource; import org.jboss.as.domain.management.CoreManagementResourceDefinition; import org.jboss.as.domain.management.logging.DomainManagementLogger; @@ -44,54 +35,10 @@ abstract class ScopedRoleAddHandler extends AbstractAddStepHandler { AccessAuthorizationResourceDefinition.PATH_ELEMENT); private final WritableAuthorizerConfiguration authorizerConfiguration; - ScopedRoleAddHandler(final WritableAuthorizerConfiguration authorizerConfiguration, AttributeDefinition... attributes) { - super(enhanceAttributes(authorizerConfiguration, attributes)); + ScopedRoleAddHandler(final WritableAuthorizerConfiguration authorizerConfiguration) { this.authorizerConfiguration = authorizerConfiguration; } - private static Collection enhanceAttributes( - final WritableAuthorizerConfiguration authorizerConfiguration, AttributeDefinition... attributes) { - List enhanced = new ArrayList(attributes.length); - for (AttributeDefinition current : attributes) { - if (current.getName().equals(ModelDescriptionConstants.BASE_ROLE)) { - assert current instanceof SimpleAttributeDefinition; - enhanced.add(new SimpleAttributeDefinitionBuilder((SimpleAttributeDefinition)current) - .setValidator(new ParameterValidator() { - @Override - public void validateParameter(String parameterName, ModelNode value) throws OperationFailedException { - Set standardRoles = authorizerConfiguration.getStandardRoles(); - String specifiedRole = value.asString(); - for (String current : standardRoles) { - if (specifiedRole.equalsIgnoreCase(current)) { - return; - } - } - - throw DomainManagementLogger.ROOT_LOGGER.badBaseRole(specifiedRole); - } - }).setCorrector(new ParameterCorrector() { - @Override - public ModelNode correct(ModelNode newValue, ModelNode currentValue) { - Set standardRoles = authorizerConfiguration.getStandardRoles(); - String specifiedRole = newValue.asString(); - - for (String current : standardRoles) { - if (specifiedRole.equalsIgnoreCase(current) && specifiedRole.equals(current) == false) { - return new ModelNode(current); - } - } - - return newValue; - } - }).build()); - } else { - enhanced.add(current); - } - } - - return enhanced; - } - @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { PathAddress address = PathAddress.pathAddress(operation.get(OP_ADDR)); diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleResourceDefinition.java b/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleResourceDefinition.java new file mode 100644 index 00000000000..1b43985ce05 --- /dev/null +++ b/domain-management/src/main/java/org/jboss/as/domain/management/access/ScopedRoleResourceDefinition.java @@ -0,0 +1,77 @@ +/* + * Copyright The WildFly Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.jboss.as.domain.management.access; + +import java.util.Set; + +import org.jboss.as.controller.AttributeDefinition; +import org.jboss.as.controller.OperationFailedException; +import org.jboss.as.controller.ParameterCorrector; +import org.jboss.as.controller.PathElement; +import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; +import org.jboss.as.controller.SimpleAttributeDefinition; +import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; +import org.jboss.as.controller.SimpleResourceDefinition; +import org.jboss.as.controller.access.management.WritableAuthorizerConfiguration; +import org.jboss.as.controller.descriptions.ModelDescriptionConstants; +import org.jboss.as.controller.descriptions.ResourceDescriptionResolver; +import org.jboss.as.controller.operations.validation.ParameterValidator; +import org.jboss.as.controller.registry.ManagementResourceRegistration; +import org.jboss.as.domain.management.logging.DomainManagementLogger; +import org.jboss.dmr.ModelNode; +import org.jboss.dmr.ModelType; + +/** + * Base {@link org.jboss.as.controller.ResourceDefinition} for scoped roles + */ +public abstract class ScopedRoleResourceDefinition extends SimpleResourceDefinition { + + public static final SimpleAttributeDefinition BASE_ROLE = + new SimpleAttributeDefinitionBuilder(ModelDescriptionConstants.BASE_ROLE, ModelType.STRING) + .setRestartAllServices() + .build(); + + private final AttributeDefinition roleAttribute; + + protected ScopedRoleResourceDefinition(PathElement path, ResourceDescriptionResolver resolver, WritableAuthorizerConfiguration authorizerConfiguration) { + super(path, resolver); + this.roleAttribute = new SimpleAttributeDefinitionBuilder(BASE_ROLE) + .setValidator(new ParameterValidator() { + @Override + public void validateParameter(String parameterName, ModelNode value) throws OperationFailedException { + Set standardRoles = authorizerConfiguration.getStandardRoles(); + String specifiedRole = value.asString(); + for (String current : standardRoles) { + if (specifiedRole.equalsIgnoreCase(current)) { + return; + } + } + + throw DomainManagementLogger.ROOT_LOGGER.badBaseRole(specifiedRole); + } + }).setCorrector(new ParameterCorrector() { + @Override + public ModelNode correct(ModelNode newValue, ModelNode currentValue) { + Set standardRoles = authorizerConfiguration.getStandardRoles(); + String specifiedRole = newValue.asString(); + + for (String current : standardRoles) { + if (specifiedRole.equalsIgnoreCase(current) && specifiedRole.equals(current) == false) { + return new ModelNode(current); + } + } + + return newValue; + } + }) + .build(); + } + + @Override + public void registerAttributes(ManagementResourceRegistration registration) { + registration.registerReadWriteAttribute(this.roleAttribute, null, ReloadRequiredWriteAttributeHandler.INSTANCE); + } +} diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleAdd.java b/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleAdd.java index 13ff6dddbf9..b5cb491f80a 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleAdd.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleAdd.java @@ -31,7 +31,7 @@ class ServerGroupScopedRoleAdd extends ScopedRoleAddHandler { ServerGroupScopedRoleAdd(Map constraintMap, WritableAuthorizerConfiguration authorizerConfiguration) { - super(authorizerConfiguration, ServerGroupScopedRoleResourceDefinition.BASE_ROLE, ServerGroupScopedRoleResourceDefinition.SERVER_GROUPS); + super(authorizerConfiguration); this.constraintMap = constraintMap; this.authorizerConfiguration = authorizerConfiguration; } diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleResourceDefinition.java b/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleResourceDefinition.java index b150689297d..8874bc73fc1 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleResourceDefinition.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/access/ServerGroupScopedRoleResourceDefinition.java @@ -18,13 +18,11 @@ import org.jboss.as.controller.AttributeMarshaller; import org.jboss.as.controller.ListAttributeDefinition; import org.jboss.as.controller.OperationDefinition; +import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; -import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; -import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; import org.jboss.as.controller.SimpleListAttributeDefinition; import org.jboss.as.controller.SimpleOperationDefinitionBuilder; -import org.jboss.as.controller.SimpleResourceDefinition; import org.jboss.as.controller.access.constraint.ServerGroupEffectConstraint; import org.jboss.as.controller.access.management.WritableAuthorizerConfiguration; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; @@ -41,16 +39,10 @@ * * @author Brian Stansberry (c) 2013 Red Hat Inc. */ -public class ServerGroupScopedRoleResourceDefinition extends SimpleResourceDefinition { +public class ServerGroupScopedRoleResourceDefinition extends ScopedRoleResourceDefinition { public static final PathElement PATH_ELEMENT = PathElement.pathElement(SERVER_GROUP_SCOPED_ROLE); - public static final SimpleAttributeDefinition BASE_ROLE = - new SimpleAttributeDefinitionBuilder(ModelDescriptionConstants.BASE_ROLE, ModelType.STRING) - .setRestartAllServices() - .build(); - - public static final ListAttributeDefinition SERVER_GROUPS = SimpleListAttributeDefinition.Builder.of(ModelDescriptionConstants.SERVER_GROUPS, new SimpleAttributeDefinitionBuilder(SERVER_GROUP, ModelType.STRING) @@ -66,12 +58,12 @@ public void marshallAsElement(AttributeDefinition attribute, ModelNode resourceM .setWrapXmlList(false) .build(); - private final ServerGroupScopedRoleAdd addHandler; - private final ServerGroupScopedRoleRemove removeHandler; - private final ServerGroupScopedRoleWriteAttributeHandler writeAttributeHandler; + private final OperationStepHandler addHandler; + private final OperationStepHandler removeHandler; + private final OperationStepHandler writeAttributeHandler; public ServerGroupScopedRoleResourceDefinition(WritableAuthorizerConfiguration authorizerConfiguration) { - super(PATH_ELEMENT, DomainManagementResolver.getResolver("core.access-control.server-group-scoped-role")); + super(PATH_ELEMENT, DomainManagementResolver.getResolver("core.access-control.server-group-scoped-role"), authorizerConfiguration); Map constraintMap = new HashMap(); this.addHandler = new ServerGroupScopedRoleAdd(constraintMap, authorizerConfiguration); @@ -91,7 +83,6 @@ public void registerOperations(ManagementResourceRegistration resourceRegistrati public void registerAttributes(ManagementResourceRegistration resourceRegistration) { super.registerAttributes(resourceRegistration); - resourceRegistration.registerReadWriteAttribute(BASE_ROLE, null, new ReloadRequiredWriteAttributeHandler(BASE_ROLE)); resourceRegistration.registerReadWriteAttribute(SERVER_GROUPS, null, writeAttributeHandler); } } diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/parsing/AccessControlXml.java b/domain-management/src/main/java/org/jboss/as/domain/management/parsing/AccessControlXml.java index 874837f6eb6..8a1e03dc604 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/parsing/AccessControlXml.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/parsing/AccessControlXml.java @@ -59,6 +59,7 @@ import org.jboss.as.domain.management.access.HostScopedRolesResourceDefinition; import org.jboss.as.domain.management.access.PrincipalResourceDefinition; import org.jboss.as.domain.management.access.RoleMappingResourceDefinition; +import org.jboss.as.domain.management.access.ScopedRoleResourceDefinition; import org.jboss.as.domain.management.access.SensitivityClassificationTypeResourceDefinition; import org.jboss.as.domain.management.access.SensitivityResourceDefinition; import org.jboss.as.domain.management.access.ServerGroupScopedRoleResourceDefinition; @@ -140,7 +141,7 @@ public void parseServerGroupScopedRoles(final XMLExtendedStreamReader reader, fi switch (element) { case ROLE: { parseScopedRole(reader, address, list, scopedRoleType, Element.SERVER_GROUP, - ServerGroupScopedRoleResourceDefinition.BASE_ROLE, ServerGroupScopedRoleResourceDefinition.SERVER_GROUPS, true); + ScopedRoleResourceDefinition.BASE_ROLE, ServerGroupScopedRoleResourceDefinition.SERVER_GROUPS, true); break; } default: { @@ -162,7 +163,7 @@ public void parseHostScopedRoles(final XMLExtendedStreamReader reader, final Mod switch (element) { case ROLE: { parseScopedRole(reader, address, list, scopedRoleType, Element.HOST, - HostScopedRolesResourceDefinition.BASE_ROLE, HostScopedRolesResourceDefinition.HOSTS, false); + ScopedRoleResourceDefinition.BASE_ROLE, HostScopedRolesResourceDefinition.HOSTS, false); break; } default: { diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOperationTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOperationTestCase.java index e562f32cb53..3feb43b337e 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOperationTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOperationTestCase.java @@ -27,6 +27,7 @@ import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -40,9 +41,13 @@ import java.util.Map; import java.util.Set; import java.util.logging.Level; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.CapabilityServiceTarget; import org.jboss.as.controller.ExpressionResolver; +import org.jboss.as.controller.ModelOnlyWriteAttributeHandler; import org.jboss.as.controller.NoopOperationStepHandler; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationDefinition; @@ -53,6 +58,7 @@ import org.jboss.as.controller.ProcessType; import org.jboss.as.controller.ProxyController; import org.jboss.as.controller.RunningMode; +import org.jboss.as.controller.SimpleOperationDefinitionBuilder; import org.jboss.as.controller.access.Action; import org.jboss.as.controller.access.Action.ActionEffect; import org.jboss.as.controller.access.AuthorizationResult; @@ -61,10 +67,14 @@ import org.jboss.as.controller.capability.CapabilityServiceSupport; import org.jboss.as.controller.capability.RuntimeCapability; import org.jboss.as.controller.client.MessageSeverity; +import org.jboss.as.controller.descriptions.ModelDescriptionConstants; +import org.jboss.as.controller.descriptions.ResourceDescriptionResolver; import org.jboss.as.controller.logging.ControllerLogger; import org.jboss.as.controller.notification.Notification; +import org.jboss.as.controller.registry.AttributeAccess; import org.jboss.as.controller.registry.ImmutableManagementResourceRegistration; import org.jboss.as.controller.registry.ManagementResourceRegistration; +import org.jboss.as.controller.registry.OperationEntry; import org.jboss.as.controller.registry.Resource; import org.jboss.as.domain.management.CoreManagementResourceDefinition; import org.jboss.as.domain.management.access.AccessAuthorizationResourceDefinition; @@ -122,8 +132,20 @@ protected MockOperationContext(final Resource root, final boolean booting, final this.registration = createManagementResourceRegistration(operationAddress); } - protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress) { + protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress, AttributeDefinition... attributes) { this(root, booting, operationAddress, true); + OperationEntry entry = mock(OperationEntry.class); + doReturn(SimpleOperationDefinitionBuilder.of(ModelDescriptionConstants.ADD, mock(ResourceDescriptionResolver.class)).setParameters(attributes).build()).when(entry).getOperationDefinition(); + doReturn(entry).when(this.registration).getOperationEntry(PathAddress.EMPTY_ADDRESS, ModelDescriptionConstants.ADD); + for (AttributeDefinition attribute : attributes) { + AttributeAccess access = mock(AttributeAccess.class); + doReturn(AttributeAccess.AccessType.READ_WRITE).when(access).getAccessType(); + doReturn(AttributeAccess.Storage.CONFIGURATION).when(access).getStorageType(); + doReturn(ModelOnlyWriteAttributeHandler.INSTANCE).when(access).getWriteHandler(); + doReturn(attribute).when(access).getAttributeDefinition(); + doReturn(access).when(this.registration).getAttributeAccess(PathAddress.EMPTY_ADDRESS, attribute.getName()); + } + doReturn(Stream.of(attributes).map(AttributeDefinition::getName).collect(Collectors.toSet())).when(this.registration).getAttributeNames(PathAddress.EMPTY_ADDRESS); } public void expectStep(final PathAddress address) { diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOrderedChildResourceSyncModelTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOrderedChildResourceSyncModelTestCase.java index 9812e3793ce..39ecef8d588 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOrderedChildResourceSyncModelTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/AbstractOrderedChildResourceSyncModelTestCase.java @@ -20,7 +20,6 @@ import java.util.Locale; import java.util.Set; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.CompositeOperationHandler; import org.jboss.as.controller.ManagementModel; @@ -258,8 +257,8 @@ class SubsystemResourceDefinition extends SimpleResourceDefinition { public SubsystemResourceDefinition() { super(SUBSYSTEM_ELEMENT, NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(REQUEST_ATTRIBUTES), - new ModelOnlyRemoveStepHandler()); + ModelOnlyAddStepHandler.INSTANCE, + ModelOnlyRemoveStepHandler.INSTANCE); } @@ -305,8 +304,7 @@ public void registerAttributes(ManagementResourceRegistration resourceRegistrati class OrderedChildResourceDefinition extends AbstractChildResourceDefinition { OrderedChildResourceDefinition() { - super(ORDERED_CHILD, - new AbstractAddStepHandler((REQUEST_ATTRIBUTES))); + super(ORDERED_CHILD, ModelOnlyAddStepHandler.INSTANCE); } @Override @@ -319,8 +317,7 @@ public void registerChildren(ManagementResourceRegistration resourceRegistration class ExtraChildResourceDefinition extends AbstractChildResourceDefinition { public ExtraChildResourceDefinition() { - super(EXTRA_CHILD, - new AbstractAddStepHandler(REQUEST_ATTRIBUTES)); + super(EXTRA_CHILD, ModelOnlyAddStepHandler.INSTANCE); } } diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ProfileIncludesHandlerTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ProfileIncludesHandlerTestCase.java index 1bd187a57fb..af7abbe821b 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ProfileIncludesHandlerTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ProfileIncludesHandlerTestCase.java @@ -237,10 +237,9 @@ private PathAddress getProfileAddress(String profileName) { MockOperationContext getOperationContext(final PathAddress operationAddress) { final Resource root = createRootResource(); - return new MockOperationContext(root, false, operationAddress, false); + return new MockOperationContext(root, operationAddress); } - MockOperationContext getOperationContextWithIncludes(final PathAddress operationAddress) { final Resource root = createRootResource(); Resource profileThree = Resource.Factory.create(); @@ -249,8 +248,7 @@ MockOperationContext getOperationContextWithIncludes(final PathAddress operation Resource profileFour = Resource.Factory.create(); profileFour.getModel().get(INCLUDES).add("profile-three"); root.registerChild(PathElement.pathElement(PROFILE, "profile-four"), profileFour); - return new MockOperationContext(root, false, operationAddress, false); - + return new MockOperationContext(root, operationAddress); } MockOperationContext getOperationContextForSubsystemIncludes(final PathAddress operationAddress, RootResourceInitializer initializer) { @@ -265,17 +263,16 @@ MockOperationContext getOperationContextForSubsystemIncludes(final PathAddress o root.registerChild(PathElement.pathElement(PROFILE, "profile-five"), profileFive); initializer.addAdditionalResources(root); - return new MockOperationContext(root, false, operationAddress, false); + return new MockOperationContext(root, operationAddress); } private class MockOperationContext extends AbstractOperationTestCase.MockOperationContext { private boolean reloadRequired; - private boolean rollback; + private boolean rollback = false; private OperationStepHandler nextStep; - protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress, final boolean rollback) { - super(root, booting, operationAddress); - this.rollback = rollback; + protected MockOperationContext(Resource root, PathAddress operationAddress) { + super(root, false, operationAddress, ProfileResourceDefinition.ATTRIBUTES); when(this.registration.getCapabilities()).thenReturn(Collections.singleton(ProfileResourceDefinition.PROFILE_CAPABILITY)); } diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ReloadRequiredServerTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ReloadRequiredServerTestCase.java index bc8b78bde4c..69aae6ed976 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ReloadRequiredServerTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ReloadRequiredServerTestCase.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Set; +import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.BlockingTimeout; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; @@ -63,7 +64,7 @@ public void testChangeServerGroupProfileSecondary() throws Exception { private void testChangeServerGroupProfile(boolean primary) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(SERVER_GROUP, "group-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerGroupOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -97,7 +98,7 @@ public void testChangeServerGroupProfileNoChangeSecondary() throws Exception { private void testChangeServerGroupProfileNoChange(boolean primary) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(SERVER_GROUP, "group-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerGroupOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -182,7 +183,7 @@ public void testChangeServerConfigGroupSecondary() throws Exception { public void testChangeServerConfigGroup(boolean primary) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -208,7 +209,7 @@ public void testChangeServerConfigGroupNoChangeSecondary() throws Exception { public void testChangeServerConfigGroupNoChange(boolean primary) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -275,7 +276,7 @@ public void testChangeServerConfigSocketBindingGroupSecondary() throws Exception private void testChangeServerConfigSocketBindingGroup(boolean primary) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -301,7 +302,7 @@ public void testChangeServerConfigSocketBindingGroupNoChangeSecondary() throws E private void testChangeServerConfigSocketBindingGroupNoChange(boolean primary) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -363,7 +364,7 @@ private void testChangeServerConfigSocketBindingGroupNoChange(boolean primary) t @Test public void testChangeServerConfigSocketBindingPortOffset() throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -380,7 +381,7 @@ public void testChangeServerConfigSocketBindingPortOffset() throws Exception { @Test public void testChangeServerConfigSocketBindingPortOffsetNoChange() throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); operationContext.root.getChild(PathElement.pathElement(HOST, "localhost")).getChild(PathElement.pathElement(SERVER_CONFIG, "server-one")).getModel().get(SOCKET_BINDING_PORT_OFFSET).set(10); @@ -399,7 +400,7 @@ public void testChangeServerConfigSocketBindingPortOffsetNoChange() throws Excep @Test public void testChangeServerConfigSocketBindingPortNegativeValue() throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); operationContext.root.getChild(PathElement.pathElement(HOST, "localhost")).getChild(PathElement.pathElement(SERVER_CONFIG, "server-one")).getModel().get(SOCKET_BINDING_PORT_OFFSET).set(10); @@ -417,7 +418,7 @@ public void testChangeServerConfigSocketBindingPortNegativeValue() throws Except @Test(expected=OperationFailedException.class) public void testChangeServerConfigSocketBindingPortOffsetBadPort() throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(false, pa); + final MockOperationContext operationContext = new ServerConfigOperationContext(pa); operationContext.root.getChild(PathElement.pathElement(HOST, "localhost")).getChild(PathElement.pathElement(SERVER_CONFIG, "server-one")).getModel().get(SOCKET_BINDING_PORT_OFFSET).set(10); @@ -430,11 +431,6 @@ public void testChangeServerConfigSocketBindingPortOffsetBadPort() throws Except ServerRestartRequiredServerConfigWriteAttributeHandler.INSTANCE.execute(operationContext, operation); } - MockOperationContext getOperationContext(boolean serversOnly, final PathAddress operationAddress) { - final Resource root = createRootResource(); - return new MockOperationContext(root, false, operationAddress); - } - private void checkServerOperationResolver(MockOperationContext context, ModelNode operation, PathAddress address, boolean expectServerOps) { Map serverProxies = new HashMap(); serverProxies.put("server-one", new MockServerProxy()); @@ -500,11 +496,24 @@ public void execute(ModelNode operation, OperationMessageHandler handler, ProxyO } + private class ServerGroupOperationContext extends MockOperationContext { + protected ServerGroupOperationContext(PathAddress operationAddress) { + super(operationAddress, ServerGroupResourceDefinition.ADD_ATTRIBUTES); + } + } + + private class ServerConfigOperationContext extends MockOperationContext { + protected ServerConfigOperationContext(PathAddress operationAddress) { + super(operationAddress, ServerConfigResourceDefinition.WRITABLE_ATTRIBUTES.toArray(AttributeDefinition[]::new)); + } + } + private class MockOperationContext extends AbstractOperationTestCase.MockOperationContext { private boolean reloadRequired; private OperationStepHandler nextStep; - protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress) { - super(root, booting, operationAddress); + + protected MockOperationContext(PathAddress operationAddress, AttributeDefinition... attributes) { + super(createRootResource(), false, operationAddress, attributes); Set capabilities = new HashSet<>(); capabilities.add(ServerConfigResourceDefinition.SERVER_CONFIG_CAPABILITY); capabilities.add(ServerGroupResourceDefinition.SERVER_GROUP_CAPABILITY); diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerConfigOperationsTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerConfigOperationsTestCase.java index 40415bd98ad..c11d43e8545 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerConfigOperationsTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerConfigOperationsTestCase.java @@ -26,6 +26,7 @@ import java.util.Queue; import java.util.Set; +import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.BlockingTimeout; import org.jboss.as.controller.ControlledProcessState; import org.jboss.as.controller.ControlledProcessState.State; @@ -36,7 +37,6 @@ import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ProxyController; import org.jboss.as.controller.client.helpers.domain.ServerStatus; -import org.jboss.as.controller.registry.Resource; import org.jboss.as.domain.controller.LocalHostControllerInfo; import org.jboss.as.host.controller.ServerInventory; import org.jboss.as.host.controller.discovery.DiscoveryOption; @@ -158,7 +158,7 @@ private void testAddServerConfigNoSocketBindingGroupOverride(boolean primary, bo private void testAddServerConfigBadInfo(boolean primary, boolean rollback, boolean badServerGroup, SocketBindingGroupOverrideType socketBindingGroupOverride) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-four")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); String serverGroupName = badServerGroup ? "bad-server-group" : "group-one"; String socketBindingGroupName; @@ -218,7 +218,7 @@ public void testRemoveServerConfigSecondaryRollback() throws Exception { private void testRemoveServerConfig(boolean primary, boolean rollback) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -278,7 +278,7 @@ public void testUpdateServerConfigServerGroupSecondaryRollback() throws Exceptio private void testUpdateServerConfigServerGroup(boolean primary, boolean rollback, boolean badGroup) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); String groupName = badGroup ? "bad-group" : "group-two"; @@ -376,7 +376,7 @@ public void testUpdateServerConfigNoSocketBindingGroupSecondaryRollback() throws private void testUpdateServerConfigSocketBindingGroup(boolean primary, boolean rollback, SocketBindingGroupOverrideType socketBindingGroupOverride) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(HOST, "localhost"), PathElement.pathElement(SERVER_CONFIG, "server-one")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); String socketBindingGroupName; if (socketBindingGroupOverride == SocketBindingGroupOverrideType.GOOD) { @@ -411,11 +411,6 @@ private void testUpdateServerConfigSocketBindingGroup(boolean primary, boolean r Assert.assertFalse(operationContext.isReloadRequired()); } - MockOperationContext getOperationContext(final boolean rollback, final PathAddress operationAddress) { - final Resource root = createRootResource(); - return new MockOperationContext(root, false, operationAddress, rollback); - } - private static class MockHostControllerInfo implements LocalHostControllerInfo { private final boolean primary; public MockHostControllerInfo(boolean primary) { @@ -671,8 +666,8 @@ private class MockOperationContext extends AbstractOperationTestCase.MockOperati private boolean rollback; private final Queue nextHandlers = new ArrayDeque<>(); - protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress, final boolean rollback) { - super(root, booting, operationAddress); + protected MockOperationContext(PathAddress operationAddress, boolean rollback) { + super(createRootResource(), false, operationAddress, ServerConfigResourceDefinition.WRITABLE_ATTRIBUTES.toArray(AttributeDefinition[]::new)); this.rollback = rollback; when(this.registration.getCapabilities()).thenReturn(Collections.singleton(ServerConfigResourceDefinition.SERVER_CONFIG_CAPABILITY)); } diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerGroupOperationsTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerGroupOperationsTestCase.java index 16118e87898..7c1ce4d3707 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerGroupOperationsTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/ServerGroupAffectedResourceServerGroupOperationsTestCase.java @@ -23,7 +23,6 @@ import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.PathElement; -import org.jboss.as.controller.registry.Resource; import org.jboss.as.domain.controller.resources.ServerGroupResourceDefinition; import org.jboss.dmr.ModelNode; import org.junit.Assert; @@ -111,7 +110,7 @@ private void testAddServerGroup(boolean primary, boolean rollback) throws Except private void testAddServerGroupBadInfo(boolean primary, boolean rollback, boolean badProfile, boolean badSocketBindingGroup) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(SERVER_GROUP, "group-three")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); String profileName = badProfile ? "bad-profile" : "profile-two"; String socketBindingGroupName = badSocketBindingGroup ? "bad-group" : "binding-two"; @@ -165,7 +164,7 @@ public void testRemoveServerGroupSecondaryRollback() throws Exception { private void testRemoveServerGroup(boolean primary, boolean rollback) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(SERVER_GROUP, "group-one")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); final ModelNode operation = new ModelNode(); operation.get(OP_ADDR).set(pa.toModelNode()); @@ -223,7 +222,7 @@ public void testUpdateServerGroupProfileSecondaryRollback() throws Exception { private void testUpdateServerGroupProfile(boolean primary, boolean rollback, boolean badProfile) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(SERVER_GROUP, "group-one")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); String profileName = badProfile ? "bad-profile" : "profile-two"; @@ -302,7 +301,7 @@ public void testUpdateServerGroupSocketBindingGroupSecondaryRollback() throws Ex private void testUpdateServerGroupSocketBindingGroup(boolean primary, boolean rollback, boolean badSocketBindingGroup) throws Exception { PathAddress pa = PathAddress.pathAddress(PathElement.pathElement(SERVER_GROUP, "group-one")); - final MockOperationContext operationContext = getOperationContext(rollback, pa); + final MockOperationContext operationContext = new MockOperationContext(pa, rollback); String socketBindingGroupName = badSocketBindingGroup ? "bad-group" : "binding-two"; @@ -332,19 +331,14 @@ private void testUpdateServerGroupSocketBindingGroup(boolean primary, boolean ro } } - MockOperationContext getOperationContext(final boolean rollback, final PathAddress operationAddress) { - final Resource root = createRootResource(); - return new MockOperationContext(root, false, operationAddress, rollback); - } - private class MockOperationContext extends AbstractOperationTestCase.MockOperationContext { private boolean reloadRequired; private boolean rollback; private OperationStepHandler nextStep; private ModelNode nextStepOp; - protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress, final boolean rollback) { - super(root, booting, operationAddress); + protected MockOperationContext(PathAddress operationAddress, final boolean rollback) { + super(createRootResource(), false, operationAddress, ServerGroupResourceDefinition.ADD_ATTRIBUTES); this.rollback = rollback; when(this.registration.getCapabilities()).thenReturn(Collections.singleton(ServerGroupResourceDefinition.SERVER_GROUP_CAPABILITY)); } diff --git a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/SocketBindingGroupIncludesHandlerTestCase.java b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/SocketBindingGroupIncludesHandlerTestCase.java index ae9f48fd01a..c9ec8a9b8d7 100644 --- a/host-controller/src/test/java/org/jboss/as/domain/controller/operations/SocketBindingGroupIncludesHandlerTestCase.java +++ b/host-controller/src/test/java/org/jboss/as/domain/controller/operations/SocketBindingGroupIncludesHandlerTestCase.java @@ -250,7 +250,7 @@ private PathAddress getSocketBindingGroupAddress(String SocketBindingGroupName) MockOperationContext getOperationContext(final PathAddress operationAddress) { final Resource root = createRootResource(); - return new MockOperationContext(root, false, operationAddress, false); + return new MockOperationContext(root, operationAddress); } @@ -263,7 +263,7 @@ MockOperationContext getOperationContextWithIncludes(final PathAddress operation socketBindingGroupFour.getModel().get(INCLUDES).add("binding-three"); root.registerChild(PathElement.pathElement(SOCKET_BINDING_GROUP, "binding-four"), socketBindingGroupFour); - return new MockOperationContext(root, false, operationAddress, false); + return new MockOperationContext(root, operationAddress); } @@ -279,17 +279,16 @@ MockOperationContext getOperationContextForSocketBindingIncludes(final PathAddre root.registerChild(PathElement.pathElement(SOCKET_BINDING_GROUP, "binding-five"), socketBindingGroupFive); initializer.addAdditionalResources(root); - return new MockOperationContext(root, false, operationAddress, false); + return new MockOperationContext(root, operationAddress); } private class MockOperationContext extends AbstractOperationTestCase.MockOperationContext { private boolean reloadRequired; - private boolean rollback; + private boolean rollback = false; private OperationStepHandler nextStep; - protected MockOperationContext(final Resource root, final boolean booting, final PathAddress operationAddress, final boolean rollback) { - super(root, booting, operationAddress); - this.rollback = rollback; + protected MockOperationContext(Resource root, PathAddress operationAddress) { + super(root, false, operationAddress, SocketBindingGroupResourceDefinition.INCLUDES); Set capabilities = new HashSet<>(); capabilities.add(SocketBindingGroupResourceDefinition.SOCKET_BINDING_GROUP_CAPABILITY); capabilities.add(ProfileResourceDefinition.PROFILE_CAPABILITY); diff --git a/io/subsystem/src/main/java/org/wildfly/extension/io/BufferPoolResourceDefinition.java b/io/subsystem/src/main/java/org/wildfly/extension/io/BufferPoolResourceDefinition.java index 1119f92329d..ca58da41d22 100644 --- a/io/subsystem/src/main/java/org/wildfly/extension/io/BufferPoolResourceDefinition.java +++ b/io/subsystem/src/main/java/org/wildfly/extension/io/BufferPoolResourceDefinition.java @@ -109,7 +109,7 @@ private BufferPoolResourceDefinition() { super(new SimpleResourceDefinition.Parameters(IOExtension.BUFFER_POOL_PATH, IOExtension.getResolver(Constants.BUFFER_POOL)) .setAddHandler(new BufferPoolAdd()) - .setRemoveHandler(new ReloadRequiredRemoveStepHandler()) + .setRemoveHandler(ReloadRequiredRemoveStepHandler.INSTANCE) .addCapabilities(IO_POOL_RUNTIME_CAPABILITY, IO_BYTE_BUFFER_POOL_RUNTIME_CAPABILITY) .setDeprecatedSince(ModelVersion.create(4)) diff --git a/logging/src/main/java/org/jboss/as/logging/CommonAttributes.java b/logging/src/main/java/org/jboss/as/logging/CommonAttributes.java index 196f4d90121..97651e57525 100644 --- a/logging/src/main/java/org/jboss/as/logging/CommonAttributes.java +++ b/logging/src/main/java/org/jboss/as/logging/CommonAttributes.java @@ -20,6 +20,7 @@ import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; import org.jboss.as.controller.SimpleMapAttributeDefinition; import org.jboss.as.controller.operations.validation.ObjectTypeValidator; +import org.jboss.as.controller.registry.AttributeAccess.Flag; import org.jboss.as.controller.services.path.PathResourceDefinition; import org.jboss.as.logging.capabilities.Capabilities; import org.jboss.as.logging.correctors.FileCorrector; @@ -117,6 +118,7 @@ public void marshallAsElement(final AttributeDefinition attribute, final ModelNo SimpleAttributeDefinition NAME = SimpleAttributeDefinitionBuilder.create("name", ModelType.STRING, true) .setAllowExpression(false) .setDeprecated(ModelVersion.create(1, 2, 0)) + .setResourceOnly() .build(); SimpleMapAttributeDefinition PROPERTIES = new SimpleMapAttributeDefinition.Builder("properties", true) @@ -265,6 +267,7 @@ public void validateParameter(final String parameterName, final ModelNode value) .addAlternatives("filter-spec") .setDeprecated(ModelVersion.create(1, 2, 0)) .setRequired(false) + .addFlag(Flag.ALIAS) .build(); String ADD_HANDLER_OPERATION_NAME = "add-handler"; diff --git a/logging/src/test/java/org/jboss/as/logging/LogFilterTestCase.java b/logging/src/test/java/org/jboss/as/logging/LogFilterTestCase.java index 2256b0a1761..1abd385fad4 100644 --- a/logging/src/test/java/org/jboss/as/logging/LogFilterTestCase.java +++ b/logging/src/test/java/org/jboss/as/logging/LogFilterTestCase.java @@ -11,6 +11,8 @@ import static org.jboss.as.controller.client.helpers.ClientConstants.RESULT; import org.jboss.as.controller.client.helpers.Operations; +import org.jboss.as.controller.descriptions.ModelDescriptionConstants; + import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OUTCOME; import static org.junit.Assert.assertEquals; @@ -70,6 +72,7 @@ public void addLoggingFilter() { assertEquals("{\"replace\" => {\"replace-all\" => true,\"pattern\" => \"JBAS\",\"replacement\" => \"DUMMY\"}}", Operations.readResult(result).asString()); ModelNode readResourceOp = Operations.createReadResourceOperation(consoleAddress); + readResourceOp.get(ModelDescriptionConstants.INCLUDE_ALIASES).set(true); result = executeOperation(kernelServices, readResourceOp); assertThat(result, is(notNullValue())); assertThat(result.get(OUTCOME).asString(), is("success")); @@ -77,7 +80,7 @@ public void addLoggingFilter() { ModelNode filterSpec = result.get(RESULT).get("filter-spec"); assertThat(filterSpec.asString(), is("substituteAll(\"JBAS\",\"DUMMY\")")); - assertThat(result.get(RESULT).hasDefined("filter"), is(true)); + assertThat(result.toJSONString(false), result.get(RESULT).hasDefined("filter"), is(true)); assertThat(result.get(RESULT).get("filter").hasDefined("replace"), is(true)); ModelNode replaceResult = result.get(RESULT).get("filter").get("replace"); assertThat(replaceResult.hasDefined("pattern"), is(true)); diff --git a/management-client-content/src/main/java/org/jboss/as/management/client/content/ManagedDMRContentAddHandler.java b/management-client-content/src/main/java/org/jboss/as/management/client/content/ManagedDMRContentAddHandler.java index f0cef8af106..d5c5103bec8 100644 --- a/management-client-content/src/main/java/org/jboss/as/management/client/content/ManagedDMRContentAddHandler.java +++ b/management-client-content/src/main/java/org/jboss/as/management/client/content/ManagedDMRContentAddHandler.java @@ -5,13 +5,11 @@ package org.jboss.as.management.client.content; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; 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.as.controller.PathElement; -import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.dmr.ModelNode; /** @@ -19,24 +17,22 @@ * * @author Brian Stansberry (c) 2011 Red Hat Inc. */ -public class ManagedDMRContentAddHandler extends AbstractAddStepHandler { +public class ManagedDMRContentAddHandler implements OperationStepHandler { - public ManagedDMRContentAddHandler(final AttributeDefinition contentAttribute) { - super(contentAttribute); + private final AttributeDefinition contentAttribute; + public ManagedDMRContentAddHandler(final AttributeDefinition contentAttribute) { + this.contentAttribute = contentAttribute; } - @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { - PathElement pe = PathAddress.pathAddress(operation.require(ModelDescriptionConstants.OP_ADDR)).getLastElement(); - ModelNode model = new ModelNode(); - populateModel(operation, model); + this.contentAttribute.validateAndSet(operation, model); // Create and add the specialized resource type we use for a managed dmr content resource - ManagedDMRContentResource resource = new ManagedDMRContentResource(pe); + ManagedDMRContentResource resource = new ManagedDMRContentResource(context.getCurrentAddress().getLastElement()); context.addResource(PathAddress.EMPTY_ADDRESS, resource); // IMPORTANT: Use writeModel, as this is what causes the content to be flushed to the content repo! resource.writeModel(model); diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorAdd.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorAdd.java index 1b4f5c9afff..670d3ebe7e6 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorAdd.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorAdd.java @@ -35,12 +35,6 @@ */ public class ConnectorAdd extends AbstractAddStepHandler { - static final ConnectorAdd INSTANCE = new ConnectorAdd(); - - private ConnectorAdd() { - super(ConnectorResource.ATTRIBUTES); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { final ModelNode fullModel = Resource.Tools.readModel(context.readResource(PathAddress.EMPTY_ADDRESS)); @@ -48,7 +42,7 @@ protected void performRuntime(OperationContext context, ModelNode operation, Mod launchServices(context, fullModel); } - void launchServices(OperationContext context, ModelNode fullModel) throws OperationFailedException { + static void launchServices(OperationContext context, ModelNode fullModel) throws OperationFailedException { final String connectorName = context.getCurrentAddressValue(); OptionMap optionMap = ConnectorUtils.getFullOptions(context, fullModel); diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorChildResource.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorChildResource.java index adefa778f1a..448bdb5a86f 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorChildResource.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorChildResource.java @@ -38,7 +38,7 @@ public ConnectorChildResource(Parameters parameters) { super(parameters); } static void recreateParentService(OperationContext context, ModelNode parentModel) throws OperationFailedException { - ConnectorAdd.INSTANCE.launchServices(context, parentModel); + ConnectorAdd.launchServices(context, parentModel); } static ServiceName getParentServiceName(PathAddress parentAddress) { diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorRemove.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorRemove.java index a4fbb927f25..bb671f270ee 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorRemove.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorRemove.java @@ -7,6 +7,7 @@ import org.jboss.as.controller.AbstractRemoveStepHandler; import org.jboss.as.controller.OperationContext; +import org.jboss.as.controller.OperationFailedException; import org.jboss.dmr.ModelNode; /** @@ -17,17 +18,14 @@ */ public class ConnectorRemove extends AbstractRemoveStepHandler { - static final ConnectorRemove INSTANCE = new ConnectorRemove(); - - private ConnectorRemove() { - } - + @Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) { final String name = context.getCurrentAddressValue(); RemotingServices.removeConnectorServices(context, name); } - protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model) { - // TODO: RE-ADD SERVICES + @Override + protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { + ConnectorAdd.launchServices(context, model); } } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorResource.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorResource.java index 236bff5fb72..34baa3c7451 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorResource.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/ConnectorResource.java @@ -14,7 +14,6 @@ import java.util.List; import org.jboss.as.controller.AttributeDefinition; -import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; import org.jboss.as.controller.SimpleAttributeDefinition; @@ -85,17 +84,15 @@ public class ConnectorResource extends SimpleResourceDefinition { ConnectorResource() { super(new Parameters(PATH, RemotingExtension.getResourceDescriptionResolver(CONNECTOR)) - .setAddHandler(ConnectorAdd.INSTANCE) - .setRemoveHandler(ConnectorRemove.INSTANCE) + .setAddHandler(new ConnectorAdd()) + .setRemoveHandler(new ConnectorRemove()) .setCapabilities(CONNECTOR_CAPABILITY)); } @Override public void registerAttributes(ManagementResourceRegistration resourceRegistration) { - final OperationStepHandler writeHandler = new ReloadRequiredWriteAttributeHandler(ATTRIBUTES); for (AttributeDefinition ad : ATTRIBUTES) { - resourceRegistration.registerReadWriteAttribute(ad, null, writeHandler); + resourceRegistration.registerReadWriteAttribute(ad, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } - } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionAdd.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionAdd.java index dfa536b1a6c..2782ad6302e 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionAdd.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionAdd.java @@ -28,10 +28,6 @@ */ class GenericOutboundConnectionAdd extends AbstractAddStepHandler { - GenericOutboundConnectionAdd() { - super(GenericOutboundConnectionResourceDefinition.ATTRIBUTES); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionResourceDefinition.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionResourceDefinition.java index d11e471ed18..5d0e8d7091f 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionResourceDefinition.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/GenericOutboundConnectionResourceDefinition.java @@ -9,7 +9,6 @@ import java.util.List; import org.jboss.as.controller.AttributeDefinition; -import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; import org.jboss.as.controller.ServiceRemoveStepHandler; @@ -53,9 +52,8 @@ public void registerChildren(ManagementResourceRegistration resourceRegistration @Override public void registerAttributes(ManagementResourceRegistration resourceRegistration) { - OperationStepHandler writeHandler = new ReloadRequiredWriteAttributeHandler(ATTRIBUTES); for (AttributeDefinition attribute : ATTRIBUTES) { - resourceRegistration.registerReadWriteAttribute(attribute, null, writeHandler); + resourceRegistration.registerReadWriteAttribute(attribute, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorAdd.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorAdd.java index aaf0bd6f7ca..213edb8de5e 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorAdd.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorAdd.java @@ -30,13 +30,6 @@ */ public class HttpConnectorAdd extends AbstractAddStepHandler { - static final HttpConnectorAdd INSTANCE = new HttpConnectorAdd(); - - private HttpConnectorAdd() { - super(HttpConnectorResource.CONNECTOR_REF, HttpConnectorResource.AUTHENTICATION_PROVIDER, HttpConnectorResource.SECURITY_REALM, - HttpConnectorResource.SASL_AUTHENTICATION_FACTORY, ConnectorCommon.SASL_PROTOCOL, ConnectorCommon.SERVER_NAME); - } - @Override protected void populateModel(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { super.populateModel(context, operation, resource); @@ -51,7 +44,7 @@ protected void performRuntime(OperationContext context, ModelNode operation, Res launchServices(context, connectorName, fullModel); } - void launchServices(OperationContext context, String connectorName, ModelNode model) throws OperationFailedException { + static void launchServices(OperationContext context, String connectorName, ModelNode model) throws OperationFailedException { OptionMap optionMap = ConnectorUtils.getFullOptions(context, model); final String connectorRef = HttpConnectorResource.CONNECTOR_REF.resolveModelAttribute(context, model).asString(); diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorRemove.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorRemove.java index d95ce914500..1c7b87a9298 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorRemove.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorRemove.java @@ -21,17 +21,17 @@ */ public class HttpConnectorRemove extends AbstractRemoveStepHandler { - static final HttpConnectorRemove INSTANCE = new HttpConnectorRemove(); - + @Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) { final PathAddress address = PathAddress.pathAddress(operation.require(OP_ADDR)); final String name = address.getLastElement().getValue(); context.removeService(RemotingHttpUpgradeService.UPGRADE_SERVICE_NAME.append(name)); } + @Override protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { final PathAddress address = PathAddress.pathAddress(operation.require(OP_ADDR)); final String name = address.getLastElement().getValue(); - HttpConnectorAdd.INSTANCE.launchServices(context, name, model); + HttpConnectorAdd.launchServices(context, name, model); } } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorResource.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorResource.java index e65a85a10b1..1595ee7e1f5 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorResource.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/HttpConnectorResource.java @@ -14,7 +14,6 @@ import java.util.List; import org.jboss.as.controller.AttributeDefinition; -import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; import org.jboss.as.controller.SimpleAttributeDefinition; @@ -71,17 +70,16 @@ public class HttpConnectorResource extends SimpleResourceDefinition { HttpConnectorResource() { super(new Parameters(PATH, RemotingExtension.getResourceDescriptionResolver(HTTP_CONNECTOR)) - .setAddHandler(HttpConnectorAdd.INSTANCE) - .setRemoveHandler(HttpConnectorRemove.INSTANCE) + .setAddHandler(new HttpConnectorAdd()) + .setRemoveHandler(new HttpConnectorRemove()) // expose a common connector capability (WFCORE-4875) .setCapabilities(CONNECTOR_CAPABILITY, HTTP_CONNECTOR_CAPABILITY)); } @Override public void registerAttributes(ManagementResourceRegistration resourceRegistration) { - final OperationStepHandler writeHandler = new ReloadRequiredWriteAttributeHandler(ATTRIBUTES); for (AttributeDefinition attribute : ATTRIBUTES) { - resourceRegistration.registerReadWriteAttribute(attribute, null, writeHandler); + resourceRegistration.registerReadWriteAttribute(attribute, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionAdd.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionAdd.java index 33f4b89d544..efdb15102d6 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionAdd.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionAdd.java @@ -26,10 +26,6 @@ */ class LocalOutboundConnectionAdd extends AbstractAddStepHandler { - LocalOutboundConnectionAdd() { - super(LocalOutboundConnectionResourceDefinition.ATTRIBUTES); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { installRuntimeService(context, resource.getModel()); diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionResourceDefinition.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionResourceDefinition.java index 3b417661632..7c6a3340147 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionResourceDefinition.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/LocalOutboundConnectionResourceDefinition.java @@ -9,7 +9,6 @@ import java.util.List; import org.jboss.as.controller.AttributeDefinition; -import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; import org.jboss.as.controller.ServiceRemoveStepHandler; @@ -57,9 +56,8 @@ public void registerChildren(ManagementResourceRegistration resourceRegistration @Override public void registerAttributes(ManagementResourceRegistration resourceRegistration) { - OperationStepHandler writeHandler = new ReloadRequiredWriteAttributeHandler(ATTRIBUTES); for (AttributeDefinition attribute : ATTRIBUTES) { - resourceRegistration.registerReadWriteAttribute(attribute, null, writeHandler); + resourceRegistration.registerReadWriteAttribute(attribute, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionAdd.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionAdd.java index 40c82b8f2e4..8a7a3d45d07 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionAdd.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionAdd.java @@ -29,10 +29,6 @@ */ class RemoteOutboundConnectionAdd extends AbstractAddStepHandler { - RemoteOutboundConnectionAdd() { - super(RemoteOutboundConnectionResourceDefinition.ATTRIBUTES); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { final ModelNode fullModel = Resource.Tools.readModel(resource); diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionResourceDefinition.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionResourceDefinition.java index fc83a6769bd..b67adef1e8a 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionResourceDefinition.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemoteOutboundConnectionResourceDefinition.java @@ -11,7 +11,6 @@ import java.util.List; import org.jboss.as.controller.AttributeDefinition; -import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; import org.jboss.as.controller.ServiceRemoveStepHandler; @@ -91,9 +90,8 @@ public void registerChildren(ManagementResourceRegistration resourceRegistration @Override public void registerAttributes(ManagementResourceRegistration resourceRegistration) { - OperationStepHandler writeHandler = new ReloadRequiredWriteAttributeHandler(ATTRIBUTES); for (AttributeDefinition attribute : ATTRIBUTES) { - resourceRegistration.registerReadWriteAttribute(attribute, null, writeHandler); + resourceRegistration.registerReadWriteAttribute(attribute, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } } diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemAdd.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemAdd.java index 8bec3ce6e83..cbb30f881cb 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemAdd.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemAdd.java @@ -32,10 +32,6 @@ */ class RemotingSubsystemAdd extends AbstractAddStepHandler { - RemotingSubsystemAdd() { - super(RemotingSubsystemRootResource.ATTRIBUTES); - } - @Override protected void performRuntime(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { // DomainServerCommunicationServices will already have created this service if the server group has {@link org.jboss.as.controller.descriptions.ModelDescriptionConstants#MANAGEMENT_SUBSYSTEM_ENDPOINT} enabled. diff --git a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemRootResource.java b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemRootResource.java index e6c6fa868f0..54b146a93d5 100644 --- a/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemRootResource.java +++ b/remoting/subsystem/src/main/java/org/jboss/as/remoting/RemotingSubsystemRootResource.java @@ -16,7 +16,6 @@ import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; -import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredRemoveStepHandler; import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler; @@ -102,9 +101,8 @@ public class RemotingSubsystemRootResource extends SimpleResourceDefinition { public void registerAttributes(ManagementResourceRegistration resourceRegistration) { resourceRegistration.registerReadWriteAttribute(WORKER, null, new WorkerAttributeWriteHandler()); - OperationStepHandler writeHandler = new ReloadRequiredWriteAttributeHandler(OPTIONS); for (final AttributeDefinition attribute: OPTIONS) { - resourceRegistration.registerReadWriteAttribute(attribute, null, writeHandler); + resourceRegistration.registerReadWriteAttribute(attribute, null, ReloadRequiredWriteAttributeHandler.INSTANCE); } } @@ -121,10 +119,6 @@ private static OptionAttributeDefinition createOptionAttribute(String name, Opti private static class WorkerAttributeWriteHandler extends ReloadRequiredWriteAttributeHandler { - WorkerAttributeWriteHandler() { - super(WORKER); - } - @Override protected void finishModelStage(OperationContext context, ModelNode operation, String attributeName, ModelNode newValue, ModelNode oldValue, Resource model) throws OperationFailedException { diff --git a/subsystem-test/tests/src/test/java/org/jboss/as/subsystem/test/validation/subsystem/ValidateSubsystemExtension.java b/subsystem-test/tests/src/test/java/org/jboss/as/subsystem/test/validation/subsystem/ValidateSubsystemExtension.java index 0533f4e14d7..db9e490ee8a 100644 --- a/subsystem-test/tests/src/test/java/org/jboss/as/subsystem/test/validation/subsystem/ValidateSubsystemExtension.java +++ b/subsystem-test/tests/src/test/java/org/jboss/as/subsystem/test/validation/subsystem/ValidateSubsystemExtension.java @@ -15,10 +15,10 @@ import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ExtensionContext; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelVersion; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.SimpleOperationDefinitionBuilder; @@ -77,7 +77,7 @@ public void initialize(ExtensionContext context) { SimpleOperationDefinitionBuilder.of(ADD, NonResolvingResourceDescriptionResolver.INSTANCE) .setParameters(addAttributes) .build(), - new AbstractAddStepHandler(addAttributes)); + ModelOnlyAddStepHandler.INSTANCE); //We always need to add a 'describe' operation registration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE); diff --git a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/ConstrainedResource.java b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/ConstrainedResource.java index 5b37f5de880..a9a2316ef87 100644 --- a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/ConstrainedResource.java +++ b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/ConstrainedResource.java @@ -6,7 +6,7 @@ package org.jboss.as.test.integration.domain.extension; -import org.jboss.as.controller.AbstractAddStepHandler; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredRemoveStepHandler; import org.jboss.as.controller.SimpleAttributeDefinition; @@ -35,7 +35,7 @@ public class ConstrainedResource extends SimpleResourceDefinition { .build(); - static SimpleAttributeDefinition SECURITY_DOMAIN = new SimpleAttributeDefinitionBuilder("security-domain", ModelType.STRING) + static final SimpleAttributeDefinition SECURITY_DOMAIN = new SimpleAttributeDefinitionBuilder("security-domain", ModelType.STRING) .setAllowExpression(true) .setRequired(false) .addAccessConstraint(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN_REF) @@ -53,7 +53,7 @@ public class ConstrainedResource extends SimpleResourceDefinition { public ConstrainedResource(PathElement pathElement) { super(new Parameters(pathElement, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler(PASSWORD, SECURITY_DOMAIN, AUTHENTICATION_INFLOW)) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) .setRemoveHandler(ReloadRequiredRemoveStepHandler.INSTANCE) .setAccessConstraints(new ApplicationTypeAccessConstraintDefinition(new ApplicationTypeConfig("datasources", "datasource")))); } diff --git a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/OrderedChildResourceExtension.java b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/OrderedChildResourceExtension.java index ac9d4c0e188..2e000269557 100644 --- a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/OrderedChildResourceExtension.java +++ b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/OrderedChildResourceExtension.java @@ -13,10 +13,10 @@ import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ExtensionContext; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.ModelOnlyWriteAttributeHandler; import org.jboss.as.controller.ModelVersion; @@ -77,8 +77,8 @@ private static class SubsystemResourceDefinition extends SimpleResourceDefinitio public SubsystemResourceDefinition() { super(SUBSYSTEM_PATH, NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(REQUEST_ATTRIBUTES), - new ModelOnlyRemoveStepHandler()); + ModelOnlyAddStepHandler.INSTANCE, + ModelOnlyRemoveStepHandler.INSTANCE); } @Override @@ -102,8 +102,8 @@ private static class OrderedChildResourceDefinition extends SimpleResourceDefini public OrderedChildResourceDefinition() { super(new Parameters(CHILD, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler()) - .setRemoveHandler(new ModelOnlyRemoveStepHandler()) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) + .setRemoveHandler(ModelOnlyRemoveStepHandler.INSTANCE) .setOrderedChild()); } } diff --git a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/SensitiveResource.java b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/SensitiveResource.java index 9ef3f2b4bdd..a72912726df 100644 --- a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/SensitiveResource.java +++ b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/SensitiveResource.java @@ -5,8 +5,7 @@ package org.jboss.as.test.integration.domain.extension; - -import org.jboss.as.controller.AbstractAddStepHandler; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredRemoveStepHandler; import org.jboss.as.controller.SimpleResourceDefinition; @@ -22,7 +21,7 @@ public class SensitiveResource extends SimpleResourceDefinition { public SensitiveResource(PathElement pathElement) { super(new Parameters(pathElement, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler()) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) .setRemoveHandler(ReloadRequiredRemoveStepHandler.INSTANCE) .setAccessConstraints(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN, new ApplicationTypeAccessConstraintDefinition(new ApplicationTypeConfig("security", "security-domain")))); diff --git a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/TestAliasReadResourceDescriptionAddressExtension.java b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/TestAliasReadResourceDescriptionAddressExtension.java index 4dc317e7447..095b324cab8 100644 --- a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/TestAliasReadResourceDescriptionAddressExtension.java +++ b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/TestAliasReadResourceDescriptionAddressExtension.java @@ -10,9 +10,9 @@ import java.util.ArrayList; import java.util.List; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ExtensionContext; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.ModelVersion; import org.jboss.as.controller.PathAddress; @@ -60,8 +60,8 @@ private static class AbstractResourceDefinition extends SimpleResourceDefinition public AbstractResourceDefinition(PathElement pathElement) { super(pathElement, NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(), - new ModelOnlyRemoveStepHandler()); + ModelOnlyAddStepHandler.INSTANCE, + ModelOnlyRemoveStepHandler.INSTANCE); } } diff --git a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/VersionedExtensionCommon.java b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/VersionedExtensionCommon.java index 4a9383bb1c1..12ac16dff47 100644 --- a/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/VersionedExtensionCommon.java +++ b/testsuite/domain/src/test/java/org/jboss/as/test/integration/domain/extension/VersionedExtensionCommon.java @@ -5,9 +5,9 @@ package org.jboss.as.test.integration.domain.extension; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.Extension; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.OperationDefinition; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.ReloadRequiredRemoveStepHandler; @@ -29,11 +29,11 @@ public abstract class VersionedExtensionCommon implements Extension { public static final String IGNORED_SUBSYSTEM_NAME = "ignored-test-subsystem"; - static AttributeDefinition TEST_ATTRIBUTE = SimpleAttributeDefinitionBuilder.create("test-attribute", ModelType.STRING, true).build(); + static final AttributeDefinition TEST_ATTRIBUTE = SimpleAttributeDefinitionBuilder.create("test-attribute", ModelType.STRING, true).build(); protected static ResourceDefinition createResourceDefinition(final PathElement element) { return new SimpleResourceDefinition(new SimpleResourceDefinition.Parameters(element, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler()) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) .setRemoveHandler(ReloadRequiredRemoveStepHandler.INSTANCE)); } diff --git a/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/ConstrainedResource.java b/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/ConstrainedResource.java index 7a35c41ad71..bb958a7174a 100644 --- a/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/ConstrainedResource.java +++ b/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/ConstrainedResource.java @@ -4,10 +4,9 @@ */ package org.jboss.as.test.integration.mgmt.access.extension; - -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AbstractWriteAttributeHandler; import org.jboss.as.controller.AttributeDefinition; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; @@ -40,7 +39,7 @@ public class ConstrainedResource extends SimpleResourceDefinition { .addAccessConstraint(DS_SECURITY_DEF) .build(); - static SimpleAttributeDefinition SECURITY_DOMAIN = new SimpleAttributeDefinitionBuilder("security-domain", ModelType.STRING) + static final SimpleAttributeDefinition SECURITY_DOMAIN = new SimpleAttributeDefinitionBuilder("security-domain", ModelType.STRING) .setAllowExpression(true) .setAttributeGroup("security") .setRequired(false) @@ -57,11 +56,11 @@ public class ConstrainedResource extends SimpleResourceDefinition { .build(); - static SimpleAttributeDefinition NEW_CONNECTION_SQL = new SimpleAttributeDefinitionBuilder("new-connection-sql", ModelType.STRING, true) + static final SimpleAttributeDefinition NEW_CONNECTION_SQL = new SimpleAttributeDefinitionBuilder("new-connection-sql", ModelType.STRING, true) .setAllowExpression(true) .build(); - static SimpleAttributeDefinition JNDI_NAME = new SimpleAttributeDefinitionBuilder("jndi-name", ModelType.STRING, true) + static final SimpleAttributeDefinition JNDI_NAME = new SimpleAttributeDefinitionBuilder("jndi-name", ModelType.STRING, true) .setAllowExpression(true) .setAttributeGroup("naming") .setValidator(new ParameterValidator() { @@ -76,8 +75,6 @@ public void validateParameter(String parameterName, ModelNode value) throws Oper throw new OperationFailedException("Jndi name shouldn't include '//' or end with '/'"); } } - } else { - throw new OperationFailedException("Jndi name is required"); } } }) @@ -85,7 +82,7 @@ public void validateParameter(String parameterName, ModelNode value) throws Oper public ConstrainedResource(PathElement pathElement) { super(new Parameters(pathElement, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler(PASSWORD, SECURITY_DOMAIN, AUTHENTICATION_INFLOW)) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) .setRemoveHandler(ModelOnlyRemoveStepHandler.INSTANCE) .setAccessConstraints(new ApplicationTypeAccessConstraintDefinition(new ApplicationTypeConfig("rbac", "datasource")))); } diff --git a/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/SensitiveResource.java b/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/SensitiveResource.java index 6258d719788..42b1bb90d1a 100644 --- a/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/SensitiveResource.java +++ b/testsuite/rbac/src/test/java/org/jboss/as/test/integration/mgmt/access/extension/SensitiveResource.java @@ -5,8 +5,7 @@ package org.jboss.as.test.integration.mgmt.access.extension; - -import org.jboss.as.controller.AbstractAddStepHandler; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.SimpleResourceDefinition; @@ -22,7 +21,7 @@ public class SensitiveResource extends SimpleResourceDefinition { public SensitiveResource(PathElement pathElement) { super(new Parameters(pathElement, NonResolvingResourceDescriptionResolver.INSTANCE) - .setAddHandler(new AbstractAddStepHandler()) + .setAddHandler(ModelOnlyAddStepHandler.INSTANCE) .setRemoveHandler(ModelOnlyRemoveStepHandler.INSTANCE) .setAccessConstraints(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN, new ApplicationTypeAccessConstraintDefinition(new ApplicationTypeConfig("rbac", "security-domain")))); diff --git a/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/blocker/BlockerExtension.java b/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/blocker/BlockerExtension.java index 54bb48e23b5..82f534edb3b 100644 --- a/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/blocker/BlockerExtension.java +++ b/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/blocker/BlockerExtension.java @@ -12,10 +12,10 @@ import java.util.Set; import java.util.logging.Logger; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ExtensionContext; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.ModelOnlyWriteAttributeHandler; import org.jboss.as.controller.ModelVersion; @@ -92,7 +92,7 @@ private static class BlockerSubsystemResourceDefinition extends SimpleResourceDe private final boolean forHost; private BlockerSubsystemResourceDefinition(boolean forHost) { super(PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME), NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(), + ModelOnlyAddStepHandler.INSTANCE, ModelOnlyRemoveStepHandler.INSTANCE); this.forHost = forHost; } diff --git a/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/error/ErrorExtension.java b/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/error/ErrorExtension.java index 5804e5fad8b..b6706f1a0e9 100644 --- a/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/error/ErrorExtension.java +++ b/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/error/ErrorExtension.java @@ -14,10 +14,10 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ExtensionContext; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelVersion; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationDefinition; @@ -92,7 +92,7 @@ private static class BlockerSubsystemResourceDefinition extends SimpleResourceDe private final boolean forHost; private BlockerSubsystemResourceDefinition(boolean forHost) { super(PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME), NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(), ErrorRemovingBlockingSubsystemStepHandler.REMOVE_SUBSYSTEM_INSTANCE); + ModelOnlyAddStepHandler.INSTANCE, ErrorRemovingBlockingSubsystemStepHandler.REMOVE_SUBSYSTEM_INSTANCE); this.forHost = forHost; } diff --git a/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/streams/LogStreamExtension.java b/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/streams/LogStreamExtension.java index 929e771ea9b..e2ee330a99a 100644 --- a/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/streams/LogStreamExtension.java +++ b/testsuite/shared/src/main/java/org/jboss/as/test/integration/management/extension/streams/LogStreamExtension.java @@ -14,10 +14,10 @@ import java.io.IOException; import java.util.logging.Logger; -import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ExtensionContext; +import org.jboss.as.controller.ModelOnlyAddStepHandler; import org.jboss.as.controller.ModelOnlyRemoveStepHandler; import org.jboss.as.controller.ModelVersion; import org.jboss.as.controller.OperationContext; @@ -81,7 +81,7 @@ private static class LogStreamSubsystemResourceDefinition extends SimpleResource private final OperationStepHandler handler; private LogStreamSubsystemResourceDefinition() { super(PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME), NonResolvingResourceDescriptionResolver.INSTANCE, - new AbstractAddStepHandler(), + ModelOnlyAddStepHandler.INSTANCE, ModelOnlyRemoveStepHandler.INSTANCE); this.handler = new LogStreamHandler(); }