Skip to content

Commit

Permalink
Add deprecated override models for legacy *_ENCRYPT, JDBC_PING, TCPPI…
Browse files Browse the repository at this point in the history
…NG, and TCPGOSSIP.
  • Loading branch information
pferraro committed May 24, 2017
1 parent bf13d08 commit 0ff2c8c
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 43 deletions.
@@ -0,0 +1,80 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2017, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.clustering.jgroups.subsystem;

import java.util.EnumSet;
import java.util.function.Consumer;

import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.dmr.ModelType;
import org.jgroups.stack.Protocol;
import org.wildfly.clustering.jgroups.spi.ChannelFactory;
import org.wildfly.clustering.jgroups.spi.ProtocolConfiguration;

/**
* @author Paul Ferraro
*/
public class GenericProtocolResourceDefinition<P extends Protocol> extends ProtocolResourceDefinition<P> {

@Deprecated
enum DeprecatedAttribute implements org.jboss.as.clustering.controller.Attribute {
SOCKET_BINDING("socket-binding", ModelType.STRING, JGroupsModel.VERSION_4_1_0), // socket-binding is now a required attribute of SocketBindingProtocolResourceDefinition
;
private final AttributeDefinition definition;

DeprecatedAttribute(String name, ModelType type, JGroupsModel deprecation) {
this.definition = new SimpleAttributeDefinitionBuilder(name, type)
.setRequired(false)
.setDeprecated(deprecation.getVersion())
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.build();
}

@Override
public AttributeDefinition getDefinition() {
return this.definition;
}
}

GenericProtocolResourceDefinition(Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory) {
this(WILDCARD_PATH, descriptorConfigurator, builderFactory, parentBuilderFactory);
}

GenericProtocolResourceDefinition(String name, JGroupsModel deprecation, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory) {
this(pathElement(String.join(".", org.jgroups.conf.ProtocolConfiguration.protocol_prefix, name)), descriptorConfigurator, builderFactory, parentBuilderFactory);
this.setDeprecated(deprecation.getVersion());
}

private GenericProtocolResourceDefinition(PathElement path, Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory) {
super(path, descriptorConfigurator.andThen(descriptor -> descriptor
.addExtraParameters(DeprecatedAttribute.class)
), builderFactory, parentBuilderFactory, (parent, registration) -> {
EnumSet.allOf(DeprecatedAttribute.class).forEach(attribute -> registration.registerReadOnlyAttribute(attribute.getDefinition(), null));
});
}
}
Expand Up @@ -577,7 +577,7 @@ private void parseProtocolAttribute(XMLExtendedStreamReader reader, int index, M
}
case SOCKET_BINDING: {
boolean socketProtocol = ProtocolRegistration.ProtocolType.MULTICAST_SOCKET.contains(Operations.getPathAddress(operation).getLastElement().getValue());
readAttribute(reader, index, operation, socketProtocol ? SocketBindingProtocolResourceDefinition.Attribute.SOCKET_BINDING : ProtocolResourceDefinition.DeprecatedAttribute.SOCKET_BINDING);
readAttribute(reader, index, operation, socketProtocol ? SocketBindingProtocolResourceDefinition.Attribute.SOCKET_BINDING : GenericProtocolResourceDefinition.DeprecatedAttribute.SOCKET_BINDING);
break;
}
case DATA_SOURCE: {
Expand Down
Expand Up @@ -154,7 +154,7 @@ private static void writeProtocolAttributes(XMLExtendedStreamWriter writer, Prop
} else if (ProtocolRegistration.ProtocolType.SOCKET_DISCOVERY.contains(property.getName())) {
writeAttributes(writer, property.getValue(), EnumSet.allOf(SocketDiscoveryProtocolResourceDefinition.Attribute.class));
} else {
writeAttributes(writer, property.getValue(), EnumSet.allOf(ProtocolResourceDefinition.DeprecatedAttribute.class));
writeAttributes(writer, property.getValue(), EnumSet.allOf(GenericProtocolResourceDefinition.DeprecatedAttribute.class));
}
}

Expand Down
Expand Up @@ -125,15 +125,27 @@ static void buildTransformation(ModelVersion version, ResourceTransformationDesc

@Override
public void register(ManagementResourceRegistration registration) {
new ProtocolResourceDefinition<>(this.descriptorConfigurator, address -> ProtocolType.MULTICAST.contains(address.getLastElement().getValue()) ? new MulticastProtocolConfigurationBuilder<>(address) : new ProtocolConfigurationBuilder<>(address), this.parentBuilderFactory).register(registration);
new GenericProtocolResourceDefinition<>(this.descriptorConfigurator, address -> ProtocolType.MULTICAST.contains(address.getLastElement().getValue()) ? new MulticastProtocolConfigurationBuilder<>(address) : new ProtocolConfigurationBuilder<>(address), this.parentBuilderFactory).register(registration);

// Override definitions for protocol types
ProtocolType.MULTICAST_SOCKET.forEach(protocol -> new SocketBindingProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, address -> new MulticastSocketProtocolConfigurationBuilder<>(address), this.parentBuilderFactory).register(registration));

ProtocolType.JDBC.forEach(protocol -> new JDBCProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, this.parentBuilderFactory).register(registration));
ProtocolType.JDBC.forEach(protocol -> {
new JDBCProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, this.parentBuilderFactory).register(registration);
// Add deprecated override definition for legacy variant
new GenericProtocolResourceDefinition<>(protocol, JGroupsModel.VERSION_4_1_0, address -> new ProtocolConfigurationBuilder<>(address), this.descriptorConfigurator, this.parentBuilderFactory).register(registration);
});

ProtocolType.ENCRYPT.forEach(protocol -> new EncryptProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, this.parentBuilderFactory).register(registration));
ProtocolType.ENCRYPT.forEach(protocol -> {
new EncryptProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, this.parentBuilderFactory).register(registration);
// Add deprecated override definition for legacy variant
new GenericProtocolResourceDefinition<>(protocol, JGroupsModel.VERSION_4_1_0, address -> new ProtocolConfigurationBuilder<>(address), this.descriptorConfigurator, this.parentBuilderFactory).register(registration);
});

ProtocolType.SOCKET_DISCOVERY.forEach(protocol -> new SocketDiscoveryProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, this.parentBuilderFactory).register(registration));
ProtocolType.SOCKET_DISCOVERY.forEach(protocol -> {
new SocketDiscoveryProtocolResourceDefinition<>(protocol, this.descriptorConfigurator, this.parentBuilderFactory).register(registration);
// Add deprecated override definition for legacy variant
new GenericProtocolResourceDefinition<>(protocol, JGroupsModel.VERSION_4_1_0, address -> new ProtocolConfigurationBuilder<>(address), this.descriptorConfigurator, this.parentBuilderFactory).register(registration);
});
}
}
Expand Up @@ -22,7 +22,7 @@

package org.jboss.as.clustering.jgroups.subsystem;

import java.util.EnumSet;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

import org.jboss.as.clustering.controller.Operations;
Expand All @@ -32,19 +32,16 @@
import org.jboss.as.clustering.controller.transform.LegacyPropertyResourceTransformer;
import org.jboss.as.clustering.controller.transform.OperationTransformer;
import org.jboss.as.clustering.controller.transform.SimpleOperationTransformer;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.ModelVersion;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.Util;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.transform.description.RejectAttributeChecker;
import org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.jgroups.stack.Protocol;
import org.wildfly.clustering.jgroups.spi.ChannelFactory;
import org.wildfly.clustering.jgroups.spi.ProtocolConfiguration;
Expand Down Expand Up @@ -80,26 +77,6 @@ public RuntimeCapability<?> resolve(PathAddress address) {
}
}

@Deprecated
enum DeprecatedAttribute implements org.jboss.as.clustering.controller.Attribute {
SOCKET_BINDING("socket-binding", ModelType.STRING, JGroupsModel.VERSION_4_1_0), // socket-binding is now a required attribute of SocketBindingProtocolResourceDefinition
;
private final AttributeDefinition definition;

DeprecatedAttribute(String name, ModelType type, JGroupsModel deprecation) {
this.definition = new SimpleAttributeDefinitionBuilder(name, type)
.setRequired(false)
.setDeprecated(deprecation.getVersion())
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.build();
}

@Override
public AttributeDefinition getDefinition() {
return this.definition;
}
}

static void buildTransformation(ModelVersion version, ResourceTransformationDescriptionBuilder parent) {
ResourceTransformationDescriptionBuilder builder = parent.addChildResource(WILDCARD_PATH);

Expand Down Expand Up @@ -152,18 +129,13 @@ public ModelNode transformOperation(ModelNode operation) {
}
}

ProtocolResourceDefinition(Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory) {
super(new Parameters(WILDCARD_PATH, new JGroupsResourceDescriptionResolver(WILDCARD_PATH)).setOrderedChild(), descriptorConfigurator.andThen(descriptor -> descriptor
.addCapabilities(Capability.class)
.addExtraParameters(DeprecatedAttribute.class)
), builderFactory, parentBuilderFactory, (parent, registration) -> {
EnumSet.allOf(DeprecatedAttribute.class).forEach(attribute -> registration.registerReadOnlyAttribute(attribute.getDefinition(), null));
});
ProtocolResourceDefinition(PathElement path, Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory) {
this(path, descriptorConfigurator, builderFactory, parentBuilderFactory, (parent, registration) -> {});
}

ProtocolResourceDefinition(PathElement path, Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory) {
super(new Parameters(path, new JGroupsResourceDescriptionResolver(path, WILDCARD_PATH)).setOrderedChild(), descriptorConfigurator.andThen(descriptor -> descriptor
ProtocolResourceDefinition(PathElement path, Consumer<ResourceDescriptor> descriptorConfigurator, ResourceServiceBuilderFactory<ProtocolConfiguration<P>> builderFactory, ResourceServiceBuilderFactory<ChannelFactory> parentBuilderFactory, BiConsumer<ManagementResourceRegistration, ManagementResourceRegistration> registrationConfigurator) {
super(new Parameters(path, path.isWildcard() ? new JGroupsResourceDescriptionResolver(path) : new JGroupsResourceDescriptionResolver(path, WILDCARD_PATH)).setOrderedChild(), descriptorConfigurator.andThen(descriptor -> descriptor
.addCapabilities(Capability.class)
), builderFactory, parentBuilderFactory, (parent, registration) -> {});
), builderFactory, parentBuilderFactory, registrationConfigurator);
}
}
Expand Up @@ -110,14 +110,14 @@ public org.jboss.as.clustering.controller.Capability getCapability() {
}

@Deprecated
static final ObjectTypeAttributeDefinition TRANSPORT = ObjectTypeAttributeDefinition.Builder.of(TransportResourceDefinition.WILDCARD_PATH.getKey(), AbstractProtocolResourceDefinition.DeprecatedAttribute.TYPE.getDefinition(), TransportResourceDefinition.Attribute.SHARED.getDefinition(), SocketBindingProtocolResourceDefinition.Attribute.SOCKET_BINDING.getDefinition(), TransportResourceDefinition.Attribute.DIAGNOSTICS_SOCKET_BINDING.getDefinition(), TransportResourceDefinition.ThreadingAttribute.DEFAULT_EXECUTOR.getDefinition(), TransportResourceDefinition.ThreadingAttribute.OOB_EXECUTOR.getDefinition(), TransportResourceDefinition.ThreadingAttribute.TIMER_EXECUTOR.getDefinition(), TransportResourceDefinition.ThreadingAttribute.THREAD_FACTORY.getDefinition(), TransportResourceDefinition.Attribute.SITE.getDefinition(), TransportResourceDefinition.Attribute.RACK.getDefinition(), TransportResourceDefinition.Attribute.MACHINE.getDefinition(), AbstractProtocolResourceDefinition.Attribute.PROPERTIES.getDefinition())
static final ObjectTypeAttributeDefinition TRANSPORT = ObjectTypeAttributeDefinition.Builder.of(TransportResourceDefinition.WILDCARD_PATH.getKey(), AbstractProtocolResourceDefinition.DeprecatedAttribute.TYPE.getDefinition(), TransportResourceDefinition.Attribute.SHARED.getDefinition(), TransportResourceDefinition.Attribute.SOCKET_BINDING.getDefinition(), TransportResourceDefinition.Attribute.DIAGNOSTICS_SOCKET_BINDING.getDefinition(), TransportResourceDefinition.ThreadingAttribute.DEFAULT_EXECUTOR.getDefinition(), TransportResourceDefinition.ThreadingAttribute.OOB_EXECUTOR.getDefinition(), TransportResourceDefinition.ThreadingAttribute.TIMER_EXECUTOR.getDefinition(), TransportResourceDefinition.ThreadingAttribute.THREAD_FACTORY.getDefinition(), TransportResourceDefinition.Attribute.SITE.getDefinition(), TransportResourceDefinition.Attribute.RACK.getDefinition(), TransportResourceDefinition.Attribute.MACHINE.getDefinition(), AbstractProtocolResourceDefinition.Attribute.PROPERTIES.getDefinition())
.setDeprecated(JGroupsModel.VERSION_3_0_0.getVersion())
.setRequired(false)
.setSuffix(null)
.build();

@Deprecated
static final ObjectTypeAttributeDefinition PROTOCOL = ObjectTypeAttributeDefinition.Builder.of(ProtocolResourceDefinition.WILDCARD_PATH.getKey(), AbstractProtocolResourceDefinition.DeprecatedAttribute.TYPE.getDefinition(), ProtocolResourceDefinition.DeprecatedAttribute.SOCKET_BINDING.getDefinition(), AbstractProtocolResourceDefinition.Attribute.PROPERTIES.getDefinition())
static final ObjectTypeAttributeDefinition PROTOCOL = ObjectTypeAttributeDefinition.Builder.of(ProtocolResourceDefinition.WILDCARD_PATH.getKey(), AbstractProtocolResourceDefinition.DeprecatedAttribute.TYPE.getDefinition(), GenericProtocolResourceDefinition.DeprecatedAttribute.SOCKET_BINDING.getDefinition(), AbstractProtocolResourceDefinition.Attribute.PROPERTIES.getDefinition())
.setRequired(false)
.setSuffix("protocol")
.build();
Expand Down
Expand Up @@ -98,6 +98,13 @@ jgroups.protocol.credential-reference.alias=The alias which denotes stored secre
jgroups.protocol.credential-reference.type=The type of credential this reference is denoting.
jgroups.protocol.credential-reference.clear-text=The secret specified using clear text. Check credential store way of supplying credential/secrets to services.
jgroups.protocol.statistics-enabled=Indicates whether or not this protocol will collect statistics overriding stack configuration.

jgroups.protocol.org.jgroups.protocols.ASYM_ENCRYPT.deprecated=Deprecated. Use protocol=ASYM_ENCRYPT instead.
jgroups.protocol.org.jgroups.protocols.SYM_ENCRYPT.deprecated=Deprecated. Use protocol=SYM_ENCRYPT instead.
jgroups.protocol.org.jgroups.protocols.JDBC_PING.deprecated=Deprecated. Use protocol=JDBC_PING instead.
jgroups.protocol.org.jgroups.protocols.TCPGOSSIP.deprecated=Deprecated. Use protocol=TCPGOSSIP instead.
jgroups.protocol.org.jgroups.protocols.TCPPING.deprecated=Deprecated. Use protocol=TCPPING instead.

# property resource
jgroups.property=A protocol property with name and value.
jgroups.property.deprecated=Deprecated. Protocol properties are defined via the "properties" attribute of the parent resource.
Expand Down

0 comments on commit 0ff2c8c

Please sign in to comment.