Skip to content

Commit

Permalink
Use capabilities for socket-binding and outbound-socket-binding depen…
Browse files Browse the repository at this point in the history
…dencies.
  • Loading branch information
pferraro committed Aug 5, 2015
1 parent 04517a9 commit 5710b19
Show file tree
Hide file tree
Showing 29 changed files with 335 additions and 134 deletions.
Expand Up @@ -99,5 +99,7 @@ public void register(ManagementResourceRegistration registration) {
builder.addParameter(parameter);
}
registration.registerOperationHandler(builder.build(), this);

new CapabilityRegistration(this.descriptor.getCapabilities()).register(registration);
}
}
Expand Up @@ -91,5 +91,7 @@ public void register(ManagementResourceRegistration registration) {
builder.addParameter(parameter);
}
registration.registerOperationHandler(builder.build(), this);

new CapabilityRegistration(this.descriptor.getCapabilities()).register(registration);
}
}
Expand Up @@ -31,7 +31,7 @@
*/
public class CapabilityDependency<T> extends InjectedValueDependency<T> {

public CapabilityDependency(OperationContext context, Capability capability, String name, Class<T> targetClass) {
super(context.getCapabilityServiceName(capability.getDefinition().getName(), name, targetClass), targetClass);
public CapabilityDependency(OperationContext context, Requirement requirement, String name, Class<T> targetClass) {
super(context.getCapabilityServiceName(requirement.getName(), name, targetClass), targetClass);
}
}
@@ -0,0 +1,60 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2015, 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.controller;

import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;

import org.jboss.as.controller.registry.ManagementResourceRegistration;

/**
* Registration facility for capabilities.
* @author Paul Ferraro
*/
public class CapabilityRegistration implements Registration {

private final Collection<? extends Capability> capabilities;

public <E extends Enum<E> & Capability> CapabilityRegistration(Class<E> capabilityClass) {
this(EnumSet.allOf(capabilityClass));
}

public CapabilityRegistration(Capability... capabilities) {
this.capabilities = Arrays.asList(capabilities);
}

public CapabilityRegistration(Collection<? extends Capability> capabilities) {
this.capabilities = capabilities;
}

/**
* {@inheritDoc}
*/
@Override
public void register(ManagementResourceRegistration registration) {
for (Capability capability : this.capabilities) {
registration.registerCapability(capability.getDefinition());
}
}
}
@@ -0,0 +1,71 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2015, 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.subsystem;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

import org.jboss.as.clustering.controller.Requirement;
import org.jboss.as.controller.RunningMode;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.capability.registry.RuntimeCapabilityRegistry;
import org.jboss.as.controller.extension.ExtensionRegistry;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.Resource;

/**
* {@link AdditionalInitialization} extension that simplifies setup of required capabilities.
* @author Paul Ferraro
*/
public class AdditionalInitialization extends org.jboss.as.subsystem.test.AdditionalInitialization implements Serializable {
private static final long serialVersionUID = 7496922674294804719L;

private final RunningMode mode;
private final List<String> requirements = new LinkedList<>();

public AdditionalInitialization() {
this(RunningMode.ADMIN_ONLY);
}

public AdditionalInitialization(RunningMode mode) {
this.mode = mode;
}

@Override
protected RunningMode getRunningMode() {
return this.mode;
}

@Override
protected void initializeExtraSubystemsAndModel(ExtensionRegistry registry, Resource root, ManagementResourceRegistration registration, RuntimeCapabilityRegistry capabilityRegistry) {
registerCapabilities(capabilityRegistry, this.requirements.stream().toArray(String[]::new));
}

public AdditionalInitialization require(Requirement requirement, String... names) {
for (String name : names) {
this.requirements.add(RuntimeCapability.buildDynamicCapabilityName(requirement.getName(), name));
}
return this;
}
}
@@ -1,3 +1,25 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2015, 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.subsystem;

import java.io.IOException;
Expand All @@ -8,11 +30,12 @@
import javax.xml.stream.XMLStreamReader;

import org.jboss.as.controller.Extension;
import org.jboss.as.controller.RunningMode;
import org.jboss.as.subsystem.test.AbstractSubsystemBaseTest;
import org.jboss.as.subsystem.test.AdditionalInitialization;
import org.jboss.as.subsystem.test.ModelDescriptionValidator.ValidationConfiguration;

/**
* Base class for clustering subsystem tests.
* @author Paul Ferraro
*/
public abstract class ClusteringSubsystemTest extends AbstractSubsystemBaseTest {
private final String path;

Expand All @@ -23,7 +46,7 @@ protected ClusteringSubsystemTest(String name, Extension extension, String path)

@Override
protected String getSubsystemXml() throws IOException {
return readResource(path);
return readResource(this.path);
}

/**
Expand Down Expand Up @@ -54,22 +77,4 @@ protected void compareXml(String configId, final String original, final String m
compareXml(configId, original, marshalled, true);
}
}


@Override
protected AdditionalInitialization createAdditionalInitialization() {
return new AdditionalInitialization() {
@Override
protected RunningMode getRunningMode() {
return RunningMode.ADMIN_ONLY;
}

@Override
protected ValidationConfiguration getModelValidationConfiguration() {
return ClusteringSubsystemTest.this.getModelValidationConfiguration();
}
};
}

protected abstract ValidationConfiguration getModelValidationConfiguration();
}
Expand Up @@ -26,7 +26,7 @@
import org.infinispan.persistence.jdbc.configuration.JdbcBinaryStoreConfiguration;
import org.infinispan.persistence.jdbc.configuration.JdbcBinaryStoreConfigurationBuilder;
import org.infinispan.persistence.jdbc.configuration.TableManipulationConfiguration;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceBuilder;
Expand Down Expand Up @@ -64,8 +64,8 @@ public PersistenceConfiguration getValue() {
}

@Override
JdbcBinaryStoreConfigurationBuilder createStore(ExpressionResolver resolver, ModelNode model) throws OperationFailedException {
this.builder = super.createStore(resolver, model);
JdbcBinaryStoreConfigurationBuilder createStore(OperationContext context, ModelNode model) throws OperationFailedException {
this.builder = super.createStore(context, model);
return this.builder;
}
}
Expand Up @@ -27,7 +27,7 @@
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.cache.StoreConfigurationBuilder;
import org.jboss.as.clustering.infinispan.InfinispanLogger;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;

Expand All @@ -41,8 +41,8 @@ public class CustomStoreBuilder extends StoreBuilder {
}

@Override
StoreConfigurationBuilder<?, ?> createStore(ExpressionResolver resolver, ModelNode model) throws OperationFailedException {
String className = CLASS.getDefinition().resolveModelAttribute(resolver, model).asString();
StoreConfigurationBuilder<?, ?> createStore(OperationContext context, ModelNode model) throws OperationFailedException {
String className = CLASS.getDefinition().resolveModelAttribute(context, model).asString();
try {
return new ConfigurationBuilder().persistence().addStore(this.getClass().getClassLoader().loadClass(className).asSubclass(StoreConfigurationBuilder.class));
} catch (ClassNotFoundException | ClassCastException e) {
Expand Down
Expand Up @@ -32,7 +32,7 @@
import org.infinispan.configuration.cache.SingleFileStoreConfigurationBuilder;
import org.infinispan.configuration.cache.StoreConfigurationBuilder;
import org.jboss.as.clustering.dmr.ModelNodes;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.services.path.PathManager;
import org.jboss.as.controller.services.path.PathManagerService;
Expand Down Expand Up @@ -69,12 +69,12 @@ public PersistenceConfiguration getValue() {
}

@Override
StoreConfigurationBuilder<?, ?> createStore(ExpressionResolver resolver, ModelNode model) throws OperationFailedException {
String relativePath = ModelNodes.asString(RELATIVE_PATH.getDefinition().resolveModelAttribute(resolver, model));
StoreConfigurationBuilder<?, ?> createStore(OperationContext context, ModelNode model) throws OperationFailedException {
String relativePath = ModelNodes.asString(RELATIVE_PATH.getDefinition().resolveModelAttribute(context, model));
if (relativePath != null) {
this.relativePath = relativePath;
}
this.relativeTo = RELATIVE_TO.getDefinition().resolveModelAttribute(resolver, model).asString();
this.relativeTo = RELATIVE_TO.getDefinition().resolveModelAttribute(context, model).asString();
this.builder = new ConfigurationBuilder().persistence().addSingleFileStore();
return this.builder;
}
Expand Down
Expand Up @@ -31,7 +31,7 @@
import org.infinispan.persistence.jdbc.configuration.AbstractJdbcStoreConfiguration;
import org.infinispan.persistence.jdbc.configuration.AbstractJdbcStoreConfigurationBuilder;
import org.jboss.as.clustering.dmr.ModelNodes;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceBuilder;
Expand All @@ -58,9 +58,9 @@ public ServiceBuilder<PersistenceConfiguration> build(ServiceTarget target) {
}

@Override
B createStore(ExpressionResolver resolver, ModelNode model) throws OperationFailedException {
this.dataSource = DATA_SOURCE.getDefinition().resolveModelAttribute(resolver, model).asString();
B storeBuilder = new ConfigurationBuilder().persistence().addStore(this.builderClass).dialect(ModelNodes.asEnum(DIALECT.getDefinition().resolveModelAttribute(resolver, model), DatabaseType.class));
B createStore(OperationContext context, ModelNode model) throws OperationFailedException {
this.dataSource = DATA_SOURCE.getDefinition().resolveModelAttribute(context, model).asString();
B storeBuilder = new ConfigurationBuilder().persistence().addStore(this.builderClass).dialect(ModelNodes.asEnum(DIALECT.getDefinition().resolveModelAttribute(context, model), DatabaseType.class));
storeBuilder.dataSource().jndiUrl(this.dataSource);
return storeBuilder;
}
Expand Down
Expand Up @@ -26,7 +26,7 @@
import org.infinispan.persistence.jdbc.configuration.JdbcMixedStoreConfiguration;
import org.infinispan.persistence.jdbc.configuration.JdbcMixedStoreConfigurationBuilder;
import org.infinispan.persistence.jdbc.configuration.TableManipulationConfiguration;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceBuilder;
Expand Down Expand Up @@ -68,8 +68,8 @@ public PersistenceConfiguration getValue() {
}

@Override
JdbcMixedStoreConfigurationBuilder createStore(ExpressionResolver resolver, ModelNode model) throws OperationFailedException {
this.builder = super.createStore(resolver, model);
JdbcMixedStoreConfigurationBuilder createStore(OperationContext context, ModelNode model) throws OperationFailedException {
this.builder = super.createStore(context, model);
return this.builder;
}
}
Expand Up @@ -22,10 +22,7 @@

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

import static org.jboss.as.clustering.infinispan.subsystem.RemoteStoreResourceDefinition.Attribute.CACHE;
import static org.jboss.as.clustering.infinispan.subsystem.RemoteStoreResourceDefinition.Attribute.SOCKET_BINDINGS;
import static org.jboss.as.clustering.infinispan.subsystem.RemoteStoreResourceDefinition.Attribute.SOCKET_TIMEOUT;
import static org.jboss.as.clustering.infinispan.subsystem.RemoteStoreResourceDefinition.Attribute.TCP_NO_DELAY;
import static org.jboss.as.clustering.infinispan.subsystem.RemoteStoreResourceDefinition.Attribute.*;

import java.net.UnknownHostException;
import java.util.LinkedList;
Expand All @@ -35,8 +32,10 @@
import org.infinispan.configuration.cache.PersistenceConfiguration;
import org.infinispan.configuration.cache.StoreConfigurationBuilder;
import org.infinispan.persistence.remote.configuration.RemoteStoreConfigurationBuilder;
import org.jboss.as.clustering.controller.CapabilityDependency;
import org.jboss.as.clustering.controller.RequiredCapability;
import org.jboss.as.clustering.infinispan.InfinispanLogger;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.StringListAttributeDefinition;
import org.jboss.as.network.OutboundSocketBinding;
Expand All @@ -45,7 +44,6 @@
import org.jboss.msc.service.ServiceTarget;
import org.jboss.msc.value.Value;
import org.wildfly.clustering.service.Dependency;
import org.wildfly.clustering.service.InjectedValueDependency;
import org.wildfly.clustering.service.ValueDependency;

/**
Expand Down Expand Up @@ -84,14 +82,14 @@ public PersistenceConfiguration getValue() {
}

@Override
StoreConfigurationBuilder<?, ?> createStore(ExpressionResolver resolver, ModelNode model) throws OperationFailedException {
StoreConfigurationBuilder<?, ?> createStore(OperationContext context, ModelNode model) throws OperationFailedException {
this.storeBuilder = new ConfigurationBuilder().persistence().addStore(RemoteStoreConfigurationBuilder.class)
.remoteCacheName(CACHE.getDefinition().resolveModelAttribute(resolver, model).asString())
.socketTimeout(SOCKET_TIMEOUT.getDefinition().resolveModelAttribute(resolver, model).asLong())
.tcpNoDelay(TCP_NO_DELAY.getDefinition().resolveModelAttribute(resolver, model).asBoolean())
.remoteCacheName(CACHE.getDefinition().resolveModelAttribute(context, model).asString())
.socketTimeout(SOCKET_TIMEOUT.getDefinition().resolveModelAttribute(context, model).asLong())
.tcpNoDelay(TCP_NO_DELAY.getDefinition().resolveModelAttribute(context, model).asBoolean())
;
for (String binding : StringListAttributeDefinition.unwrapValue(resolver, SOCKET_BINDINGS.getDefinition().resolveModelAttribute(resolver, model))) {
this.bindings.add(new InjectedValueDependency<>(OutboundSocketBinding.OUTBOUND_SOCKET_BINDING_BASE_SERVICE_NAME.append(binding), OutboundSocketBinding.class));
for (String binding : StringListAttributeDefinition.unwrapValue(context, SOCKET_BINDINGS.getDefinition().resolveModelAttribute(context, model))) {
this.bindings.add(new CapabilityDependency<>(context, RequiredCapability.OUTBOUND_SOCKET_BINDING, binding, OutboundSocketBinding.class));
}
return this.storeBuilder;
}
Expand Down

0 comments on commit 5710b19

Please sign in to comment.