From 635a23251cc1be629efd01b20ea1b7ae474ede4b Mon Sep 17 00:00:00 2001 From: Tomas Hofman Date: Wed, 12 Jan 2022 13:12:34 +0100 Subject: [PATCH] WFLY-15897 Messaging BroadcastGroupDefinition & DiscoveryGroupDefinition fixes * Change BroadcastGroupDefinition#CONNECTOR_REFS to be required, as both JGroupsBroadcastGroupDefinition#CONNECTOR_REFS and SocketBroadcastGroupDefinition#CONNECTOR_REFS are required. This is causing the web console not to include the connectors attribute in the Add form. * BroadcastGroupWriteAttributeHandler#SOCKET_INSTANCE references wrong attributes list. Causes NPE when editing resources. * Avoid NPE in SocketBroadcastGroupAdd and JGroupsBroadcastGroupAdd when the provided socket binding doesn't have broadcast address defined. Print helpful message instead. * Make TranslatedWriteAttributeHandler not to write into attribute, if the attribute is in the list of ignored attributes for given resource (causes NPE). --- .../activemq/logging/MessagingLogger.java | 3 ++ .../activemq/BroadcastGroupDefinition.java | 2 +- .../BroadcastGroupWriteAttributeHandler.java | 2 +- .../activemq/SocketBroadcastGroupAdd.java | 3 ++ .../activemq/SocketDiscoveryGroupAdd.java | 4 +++ .../TranslatedWriteAttributeHandler.java | 28 +++++++++++++------ 6 files changed, 31 insertions(+), 11 deletions(-) diff --git a/messaging-activemq/injection/src/main/java/org/wildfly/extension/messaging/activemq/logging/MessagingLogger.java b/messaging-activemq/injection/src/main/java/org/wildfly/extension/messaging/activemq/logging/MessagingLogger.java index ef0bf4fcca09..1ff88a98c05a 100644 --- a/messaging-activemq/injection/src/main/java/org/wildfly/extension/messaging/activemq/logging/MessagingLogger.java +++ b/messaging-activemq/injection/src/main/java/org/wildfly/extension/messaging/activemq/logging/MessagingLogger.java @@ -879,4 +879,7 @@ public interface MessagingLogger extends BasicLogger { @Message(id = 104, value = "Legacy security is no longer supported.") IllegalStateException legacySecurityUnsupported(); + @Message(id = 105, value = "The %s %s is configured to use socket-binding %s, but this socket binding doesn't have the multicast-address or a multicast-port attributes configured.") + OperationFailedException socketBindingMulticastNotSet(String resourceType, String resourceName, String socketBindingName); + } diff --git a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupDefinition.java b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupDefinition.java index 73348d3146da..01aa86655a76 100644 --- a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupDefinition.java +++ b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupDefinition.java @@ -67,7 +67,7 @@ */ public class BroadcastGroupDefinition extends ShallowResourceDefinition { public static final PrimitiveListAttributeDefinition CONNECTOR_REFS = new StringListAttributeDefinition.Builder(CONNECTORS) - .setRequired(false) + .setRequired(true) .setElementValidator(new StringLengthValidator(1)) .setAttributeParser(AttributeParser.STRING_LIST) .setAttributeMarshaller(AttributeMarshaller.STRING_LIST) diff --git a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupWriteAttributeHandler.java b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupWriteAttributeHandler.java index 176d87059a72..c0d267b2f9ab 100644 --- a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupWriteAttributeHandler.java +++ b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/BroadcastGroupWriteAttributeHandler.java @@ -49,7 +49,7 @@ public class BroadcastGroupWriteAttributeHandler extends ReloadRequiredWriteAttr public static final BroadcastGroupWriteAttributeHandler INSTANCE = new BroadcastGroupWriteAttributeHandler(BROADCAST_GROUP_PATH, BroadcastGroupDefinition.ATTRIBUTES); public static final BroadcastGroupWriteAttributeHandler JGROUP_INSTANCE = new BroadcastGroupWriteAttributeHandler(JGROUPS_BROADCAST_GROUP_PATH, JGroupsBroadcastGroupDefinition.ATTRIBUTES); - public static final BroadcastGroupWriteAttributeHandler SOCKET_INSTANCE = new BroadcastGroupWriteAttributeHandler(SOCKET_BROADCAST_GROUP_PATH, JGroupsBroadcastGroupDefinition.ATTRIBUTES); + public static final BroadcastGroupWriteAttributeHandler SOCKET_INSTANCE = new BroadcastGroupWriteAttributeHandler(SOCKET_BROADCAST_GROUP_PATH, SocketBroadcastGroupDefinition.ATTRIBUTES); private final PathElement path; diff --git a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketBroadcastGroupAdd.java b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketBroadcastGroupAdd.java index 61b9cdbfa9be..e54e72f6a5cc 100644 --- a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketBroadcastGroupAdd.java +++ b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketBroadcastGroupAdd.java @@ -138,6 +138,9 @@ static BroadcastGroupConfiguration createBroadcastGroupConfiguration(final Opera static BroadcastGroupConfiguration createBroadcastGroupConfiguration(final String name, final BroadcastGroupConfiguration config, final SocketBinding socketBinding) throws Exception { final String localAddress = socketBinding.getAddress().getHostAddress(); + if (socketBinding.getMulticastAddress() == null) { + throw MessagingLogger.ROOT_LOGGER.socketBindingMulticastNotSet("socket-broadcast-group", name, socketBinding.getName()); + } final String groupAddress = socketBinding.getMulticastAddress().getHostAddress(); final int localPort = socketBinding.getPort(); final int groupPort = socketBinding.getMulticastPort(); diff --git a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketDiscoveryGroupAdd.java b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketDiscoveryGroupAdd.java index cb8f91cb4e57..7d49bb7c07c2 100644 --- a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketDiscoveryGroupAdd.java +++ b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/SocketDiscoveryGroupAdd.java @@ -45,6 +45,7 @@ import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceRegistry; import org.jboss.msc.service.ServiceTarget; +import org.wildfly.extension.messaging.activemq.logging.MessagingLogger; /** * Handler for adding a discovery group using socket bindings. @@ -122,6 +123,9 @@ static DiscoveryGroupConfiguration createDiscoveryGroupConfiguration(final Opera public static DiscoveryGroupConfiguration createDiscoveryGroupConfiguration(final String name, final DiscoveryGroupConfiguration config, final SocketBinding socketBinding) throws Exception { final String localAddress = socketBinding.getAddress().getHostAddress(); + if (socketBinding.getMulticastAddress() == null) { + throw MessagingLogger.ROOT_LOGGER.socketBindingMulticastNotSet("socket-discovery-group", name, socketBinding.getName()); + } final String groupAddress = socketBinding.getMulticastAddress().getHostAddress(); final int groupPort = socketBinding.getMulticastPort(); final long refreshTimeout = config.getRefreshTimeout(); diff --git a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/shallow/TranslatedWriteAttributeHandler.java b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/shallow/TranslatedWriteAttributeHandler.java index 3eef3d7f06ec..63bccc90317a 100644 --- a/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/shallow/TranslatedWriteAttributeHandler.java +++ b/messaging-activemq/subsystem/src/main/java/org/wildfly/extension/messaging/activemq/shallow/TranslatedWriteAttributeHandler.java @@ -23,6 +23,7 @@ import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.dmr.ModelNode; +import org.jboss.logging.Logger; /** * @@ -30,18 +31,27 @@ */ public class TranslatedWriteAttributeHandler implements OperationStepHandler { - private final OperationAddressConverter converter; + private static final Logger LOG = Logger.getLogger(TranslatedWriteAttributeHandler.class); - public TranslatedWriteAttributeHandler(OperationAddressConverter converter) { + private final ShallowResourceDefinition converter; + + public TranslatedWriteAttributeHandler(ShallowResourceDefinition converter) { this.converter = converter; } - @Override - public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { - PathAddress targetAddress = converter.convert(context, operation); - ModelNode op = operation.clone(); - op.get(OP_ADDR).set(targetAddress.toModelNode()); - OperationStepHandler writeAttributeHandler = context.getRootResourceRegistration().getAttributeAccess(targetAddress, op.get(ModelDescriptionConstants.NAME).asString()).getWriteHandler(); + @Override + public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { + PathAddress targetAddress = converter.convert(context, operation); + ModelNode op = operation.clone(); + op.get(OP_ADDR).set(targetAddress.toModelNode()); + String attributeName = op.get(ModelDescriptionConstants.NAME).asString(); + if (!converter.getIgnoredAttributes(context, op).contains(attributeName)) { + OperationStepHandler writeAttributeHandler = context.getRootResourceRegistration() + .getAttributeAccess(targetAddress, attributeName).getWriteHandler(); context.addStep(op, writeAttributeHandler, context.getCurrentStage(), true); + } else { + LOG.debugf("Ignoring write operation on resource %s, attribute %s. The attribute is ignored.", + targetAddress.toString(), attributeName); } - } \ No newline at end of file + } +} \ No newline at end of file