diff --git a/galleon-pack/src/main/resources/feature_groups/modcluster.xml b/galleon-pack/src/main/resources/feature_groups/modcluster.xml index a725cb55b768..dcd6fd322761 100644 --- a/galleon-pack/src/main/resources/feature_groups/modcluster.xml +++ b/galleon-pack/src/main/resources/feature_groups/modcluster.xml @@ -4,7 +4,7 @@ - + diff --git a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ContainerEventHandlerAdapterServiceConfiguratorProvider.java b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ContainerEventHandlerAdapterServiceConfiguratorProvider.java index 106d7d584f57..e3a547b6184e 100644 --- a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ContainerEventHandlerAdapterServiceConfiguratorProvider.java +++ b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ContainerEventHandlerAdapterServiceConfiguratorProvider.java @@ -33,5 +33,5 @@ * @author Radoslav Husar */ public interface ContainerEventHandlerAdapterServiceConfiguratorProvider { - CapabilityServiceConfigurator getServiceConfigurator(String adapterName, String connector, Duration statusInterval); + CapabilityServiceConfigurator getServiceConfigurator(String adapterName, String listenerName, Duration statusInterval); } diff --git a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemServiceHandler.java b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemServiceHandler.java index 59e20b771c47..d14fa698aadd 100644 --- a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemServiceHandler.java +++ b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemServiceHandler.java @@ -23,7 +23,7 @@ package org.wildfly.extension.mod_cluster; import static org.wildfly.extension.mod_cluster.ModClusterLogger.ROOT_LOGGER; -import static org.wildfly.extension.mod_cluster.ProxyConfigurationResourceDefinition.Attribute.CONNECTOR; +import static org.wildfly.extension.mod_cluster.ProxyConfigurationResourceDefinition.Attribute.LISTENER; import static org.wildfly.extension.mod_cluster.ProxyConfigurationResourceDefinition.Attribute.STATUS_INTERVAL; import java.time.Duration; @@ -83,14 +83,14 @@ public void installServices(OperationContext context, ModelNode model) throws Op LoadBalanceFactorProvider loadProvider = this.getLoadProvider(proxyName, metrics, context, proxyModel); enabledMetrics.addAll(metrics); - String connector = CONNECTOR.resolveModelAttribute(context, proxyModel).asString(); + String listenerName = LISTENER.resolveModelAttribute(context, proxyModel).asString(); int statusInterval = STATUS_INTERVAL.resolveModelAttribute(context, proxyModel).asInt(); new ContainerEventHandlerServiceConfigurator(proxyAddress, loadProvider).build(target).install(); // Install services for web container integration for (ContainerEventHandlerAdapterServiceConfiguratorProvider provider : ServiceLoader.load(ContainerEventHandlerAdapterServiceConfiguratorProvider.class, ContainerEventHandlerAdapterServiceConfiguratorProvider.class.getClassLoader())) { - provider.getServiceConfigurator(proxyName, connector, Duration.ofSeconds(statusInterval)).configure(context).build(target).setInitialMode(Mode.PASSIVE).install(); + provider.getServiceConfigurator(proxyName, listenerName, Duration.ofSeconds(statusInterval)).configure(context).build(target).setInitialMode(Mode.PASSIVE).install(); } } diff --git a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemXMLReader.java b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemXMLReader.java index 10a67fe455b1..95560e1571e4 100644 --- a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemXMLReader.java +++ b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ModClusterSubsystemXMLReader.java @@ -197,9 +197,11 @@ private void parseProxy(XMLExtendedStreamReader reader, List list, Pa } } case CONNECTOR: { - if (schema.since(ModClusterSchema.MODCLUSTER_1_1)) { - readAttribute(reader, i, operation, ProxyConfigurationResourceDefinition.Attribute.CONNECTOR); + if (schema.since(ModClusterSchema.MODCLUSTER_1_1) && !schema.since(ModClusterSchema.MODCLUSTER_4_0)) { + readAttribute(reader, i, operation, ProxyConfigurationResourceDefinition.Attribute.LISTENER); break; + } else { + throw unexpectedAttribute(reader, i); } } // 1.2 @@ -236,6 +238,12 @@ private void parseProxy(XMLExtendedStreamReader reader, List list, Pa break; } } + case LISTENER: { + if (schema.since(ModClusterSchema.MODCLUSTER_4_0)) { + readAttribute(reader, i, operation, ProxyConfigurationResourceDefinition.Attribute.LISTENER); + break; + } + } default: { throw unexpectedAttribute(reader, i); } @@ -244,7 +252,7 @@ private void parseProxy(XMLExtendedStreamReader reader, List list, Pa if (schema == ModClusterSchema.MODCLUSTER_1_0) { // This is a required attribute - so set it to something reasonable - setAttribute(reader, "ajp", operation, ProxyConfigurationResourceDefinition.Attribute.CONNECTOR); + setAttribute(reader, "ajp", operation, ProxyConfigurationResourceDefinition.Attribute.LISTENER); } while (reader.hasNext() && reader.nextTag() != END_ELEMENT) { diff --git a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ProxyConfigurationResourceDefinition.java b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ProxyConfigurationResourceDefinition.java index 3305a8a7e901..1a687c9d9044 100644 --- a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ProxyConfigurationResourceDefinition.java +++ b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/ProxyConfigurationResourceDefinition.java @@ -124,15 +124,6 @@ public SimpleAttributeDefinitionBuilder apply(SimpleAttributeDefinitionBuilder b }, AUTO_ENABLE_CONTEXTS("auto-enable-contexts", ModelType.BOOLEAN, new ModelNode(true)), BALANCER("balancer", ModelType.STRING, null), - CONNECTOR("connector", ModelType.STRING, null) { - @Override - public SimpleAttributeDefinitionBuilder apply(SimpleAttributeDefinitionBuilder builder) { - return builder - .setCapabilityReference(UNDERTOW_LISTENER_CAPABILITY_NAME) - .setRequired(true) - ; - } - }, EXCLUDED_CONTEXTS("excluded-contexts", ModelType.STRING, null), FLUSH_PACKETS("flush-packets", ModelType.BOOLEAN, new ModelNode(false)), FLUSH_WAIT("flush-wait", ModelType.INT, new ModelNode(-1)) { @@ -145,6 +136,15 @@ public SimpleAttributeDefinitionBuilder apply(SimpleAttributeDefinitionBuilder b ; } }, + LISTENER("listener", ModelType.STRING, null) { + @Override + public SimpleAttributeDefinitionBuilder apply(SimpleAttributeDefinitionBuilder builder) { + return builder + .setCapabilityReference(UNDERTOW_LISTENER_CAPABILITY_NAME) + .setRequired(true) + ; + } + }, LOAD_BALANCING_GROUP("load-balancing-group", ModelType.STRING, null), MAX_ATTEMPTS("max-attempts", ModelType.INT, new ModelNode(1)) { @Override @@ -333,6 +333,23 @@ public SimpleAttributeDefinitionBuilder apply(SimpleAttributeDefinitionBuilder b } } + enum DeprecatedAttribute implements org.jboss.as.clustering.controller.Attribute { + CONNECTOR("connector", ModelType.STRING, ModClusterModel.VERSION_6_0_0), + SIMPLE_LOAD_PROVIDER("simple-load-provider", ModelType.INT, ModClusterModel.VERSION_6_0_0), + ; + + private final AttributeDefinition definition; + + DeprecatedAttribute(String name, ModelType type, ModClusterModel deprecation) { + this.definition = new SimpleAttributeDefinitionBuilder(name, type, true).setDeprecated(deprecation.getVersion()).build(); + } + + @Override + public AttributeDefinition getDefinition() { + return this.definition; + } + } + public ProxyConfigurationResourceDefinition() { super(WILDCARD_PATH, ModClusterExtension.SUBSYSTEM_RESOLVER.createChildResolver(WILDCARD_PATH)); } @@ -345,7 +362,9 @@ public ManagementResourceRegistration register(ManagementResourceRegistration pa ResourceDescriptor descriptor = new ResourceDescriptor(this.getResourceDescriptionResolver()) .addAttributes(EnumSet.complementOf(EnumSet.of(Attribute.SSL_CONTEXT))) .addExtraParameters(Attribute.SSL_CONTEXT) - .addCapabilities(Capability.class); + .addAlias(DeprecatedAttribute.CONNECTOR, Attribute.LISTENER) + .addCapabilities(Capability.class) + ; registration.registerReadWriteAttribute(Attribute.SSL_CONTEXT.getDefinition(), null, new ReloadRequiredWriteAttributeHandler() { @Override protected void validateUpdatedModel(OperationContext context, Resource model) { @@ -408,6 +427,12 @@ public PathAddress convertToTargetAddress(PathAddress aliasAddress, AliasContext static void buildTransformation(ModelVersion version, ResourceTransformationDescriptionBuilder parent) { ResourceTransformationDescriptionBuilder builder = ModClusterModel.VERSION_6_0_0.requiresTransformation(version) ? parent.addChildRedirection(WILDCARD_PATH, new PathAddressTransformer.BasicPathAddressTransformer(LEGACY_PATH), new ProxyConfigurationDynamicDiscardPolicy()) : parent.addChildResource(WILDCARD_PATH); + if (ModClusterModel.VERSION_6_0_0.requiresTransformation(version)) { + builder.getAttributeBuilder() + .addRename(Attribute.LISTENER.getDefinition(), DeprecatedAttribute.CONNECTOR.getName()) + .end(); + } + if (ModClusterModel.VERSION_5_0_0.requiresTransformation(version)) { builder.getAttributeBuilder() .setDiscard(DiscardAttributeChecker.UNDEFINED, Attribute.SSL_CONTEXT.getDefinition()) diff --git a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/XMLAttribute.java b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/XMLAttribute.java index d3ac42a3d2d4..fa6cb98a1d19 100644 --- a/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/XMLAttribute.java +++ b/mod_cluster/extension/src/main/java/org/wildfly/extension/mod_cluster/XMLAttribute.java @@ -44,11 +44,12 @@ enum XMLAttribute { ADVERTISE_SOCKET(ProxyConfigurationResourceDefinition.Attribute.ADVERTISE_SOCKET), AUTO_ENABLE_CONTEXTS(ProxyConfigurationResourceDefinition.Attribute.AUTO_ENABLE_CONTEXTS), BALANCER(ProxyConfigurationResourceDefinition.Attribute.BALANCER), - CONNECTOR(ProxyConfigurationResourceDefinition.Attribute.CONNECTOR), + @Deprecated CONNECTOR(ProxyConfigurationResourceDefinition.DeprecatedAttribute.CONNECTOR), + @Deprecated DOMAIN("domain"), EXCLUDED_CONTEXTS(ProxyConfigurationResourceDefinition.Attribute.EXCLUDED_CONTEXTS), FLUSH_PACKETS(ProxyConfigurationResourceDefinition.Attribute.FLUSH_PACKETS), FLUSH_WAIT(ProxyConfigurationResourceDefinition.Attribute.FLUSH_WAIT), - @Deprecated DOMAIN("domain"), + LISTENER(ProxyConfigurationResourceDefinition.Attribute.LISTENER), LOAD_BALANCING_GROUP(ProxyConfigurationResourceDefinition.Attribute.LOAD_BALANCING_GROUP), MAX_ATTEMPTS(ProxyConfigurationResourceDefinition.Attribute.MAX_ATTEMPTS), NAME(ModelDescriptionConstants.NAME), diff --git a/mod_cluster/extension/src/main/resources/org/wildfly/extension/mod_cluster/LocalDescriptions.properties b/mod_cluster/extension/src/main/resources/org/wildfly/extension/mod_cluster/LocalDescriptions.properties index ef624aa1d805..1826b5731204 100644 --- a/mod_cluster/extension/src/main/resources/org/wildfly/extension/mod_cluster/LocalDescriptions.properties +++ b/mod_cluster/extension/src/main/resources/org/wildfly/extension/mod_cluster/LocalDescriptions.properties @@ -14,9 +14,11 @@ modcluster.proxy.advertise-socket=Name of socket binding to use for the advertis modcluster.proxy.auto-enable-contexts=If false, the contexts are registered with the reverse proxy as disabled, they need to be enabled manually by 'enable-context' operation or via mod_cluster_manager console (if available). modcluster.proxy.balancer=The name of the balancer on the reverse proxy to register with. modcluster.proxy.connector=The name of Undertow listener that will be registered with the reverse proxy. +modcluster.connector.deprecated=Deprecated. Functions as alias for the 'listener' attribute. modcluster.proxy.excluded-contexts=List of contexts to exclude from registration with the reverse proxies. modcluster.proxy.flush-packets=Whether to enable packet flushing on the reverse proxy. modcluster.proxy.flush-wait=Time to wait before flushing packets on the reverse proxy. +modcluster.proxy.listener=The name of Undertow listener that will be registered with the reverse proxy. modcluster.proxy.load-balancing-group=Name of the load balancing group this node belongs to. modcluster.proxy.max-attempts=Maximum number of failover attempts by reverse proxy when sending the request to the backend server. modcluster.proxy.node-timeout=Timeout (in seconds) for proxy connections to a node. That is the time mod_cluster will wait for the back-end response before returning an error. diff --git a/mod_cluster/extension/src/main/resources/schema/jboss-as-mod-cluster_4_0.xsd b/mod_cluster/extension/src/main/resources/schema/jboss-as-mod-cluster_4_0.xsd index d38f489d333a..899d8a4b3577 100644 --- a/mod_cluster/extension/src/main/resources/schema/jboss-as-mod-cluster_4_0.xsd +++ b/mod_cluster/extension/src/main/resources/schema/jboss-as-mod-cluster_4_0.xsd @@ -108,13 +108,6 @@ - - - - The name of Undertow listener that will be registered with the reverse proxy. - - - @@ -136,6 +129,13 @@ + + + + The name of Undertow listener that will be registered with the reverse proxy. + + + diff --git a/mod_cluster/extension/src/main/resources/subsystem-templates/mod_cluster.xml b/mod_cluster/extension/src/main/resources/subsystem-templates/mod_cluster.xml index 0aa143b7f70a..81db1b58a226 100644 --- a/mod_cluster/extension/src/main/resources/subsystem-templates/mod_cluster.xml +++ b/mod_cluster/extension/src/main/resources/subsystem-templates/mod_cluster.xml @@ -8,7 +8,7 @@ - + @@ -17,7 +17,7 @@ - + diff --git a/mod_cluster/extension/src/test/java/org/wildfly/extension/mod_cluster/ModClusterOperationsTestCase.java b/mod_cluster/extension/src/test/java/org/wildfly/extension/mod_cluster/ModClusterOperationsTestCase.java index 212d29119b2d..e0a61f6d5067 100644 --- a/mod_cluster/extension/src/test/java/org/wildfly/extension/mod_cluster/ModClusterOperationsTestCase.java +++ b/mod_cluster/extension/src/test/java/org/wildfly/extension/mod_cluster/ModClusterOperationsTestCase.java @@ -129,6 +129,23 @@ public void testLegacyMetricOperations() throws Exception { Assert.assertEquals(result.get(FAILURE_DESCRIPTION).asString(), FAILED, result.get(OUTCOME).asString()); } + + @Test + public void testLegacyConnectorOperations() throws Exception { + KernelServices services = this.buildKernelServices(); + + String testListenerName = "default"; + + ModelNode op = Operations.createWriteAttributeOperation(getLegacyModClusterConfigAddress(), ProxyConfigurationResourceDefinition.DeprecatedAttribute.CONNECTOR, new ModelNode(testListenerName)); + ModelNode result = services.executeOperation(op); + Assert.assertEquals(result.get(FAILURE_DESCRIPTION).asString(), SUCCESS, result.get(OUTCOME).asString()); + + op = Operations.createReadAttributeOperation(getProxyAddress("default"), ProxyConfigurationResourceDefinition.Attribute.LISTENER); + result = services.executeOperation(op); + Assert.assertEquals(result.get(FAILURE_DESCRIPTION).asString(), SUCCESS, result.get(OUTCOME).asString()); + Assert.assertEquals(testListenerName, result.get(RESULT).asString()); + } + // Addresses private static PathAddress getSubsystemAddress() { diff --git a/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-reject.xml b/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-reject.xml index 54a24779c5b2..ac815aa6458c 100644 --- a/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-reject.xml +++ b/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-reject.xml @@ -26,7 +26,7 @@ advertise-socket="modcluster" auto-enable-contexts="${modcluster.auto-enable-contexts:true}" balancer="${modcluster.balancer:mybalancer}" - connector="ajp" + listener="ajp" excluded-contexts="${modcluster.excluded-contexts:contextA,contextB,contextC}" flush-packets="${modcluster.flush-packets:true}" flush-wait="${modcluster.flush-wait:10}" diff --git a/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-transform.xml b/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-transform.xml index b876e69d7527..10a2fee3384d 100644 --- a/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-transform.xml +++ b/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem-transform.xml @@ -27,7 +27,7 @@ advertise-socket="modcluster" auto-enable-contexts="${modcluster.auto-enable-contexts:true}" balancer="${modcluster.balancer:mybalancer}" - connector="ajp" + listener="ajp" excluded-contexts="${modcluster.excluded-contexts:contextA,contextB,contextC}" flush-packets="${modcluster.flush-packets:true}" flush-wait="${modcluster.flush-wait:10}" diff --git a/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem_4_0.xml b/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem_4_0.xml index 56e1b07a99b4..b9b666cac019 100644 --- a/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem_4_0.xml +++ b/mod_cluster/extension/src/test/resources/org/wildfly/extension/mod_cluster/subsystem_4_0.xml @@ -27,7 +27,7 @@ advertise-socket="modcluster" auto-enable-contexts="${modcluster.auto-enable-contexts:true}" balancer="${modcluster.balancer:mybalancer}" - connector="ajp" + listener="ajp" excluded-contexts="${modcluster.excluded-contexts:contextA,contextB,contextC}" flush-packets="${modcluster.flush-packets:true}" flush-wait="${modcluster.flush-wait:10}" @@ -79,7 +79,7 @@ + listener="default">