Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Replacement service/configurator/dependency abstractions based on MSC…
… 1.4.x.
- Loading branch information
Showing
50 changed files
with
1,527 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
...ommon/src/main/java/org/jboss/as/clustering/controller/CapabilityServiceConfigurator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2018, 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 org.jboss.as.controller.OperationContext; | ||
import org.jboss.as.controller.capability.CapabilityServiceSupport; | ||
import org.wildfly.clustering.service.ServiceConfigurator; | ||
|
||
/** | ||
* @author Paul Ferraro | ||
*/ | ||
public interface CapabilityServiceConfigurator extends ServiceConfigurator { | ||
|
||
default ServiceConfigurator configure(CapabilityServiceSupport support) { | ||
return this; | ||
} | ||
|
||
default ServiceConfigurator configure(OperationContext context) { | ||
return this.configure(context.getCapabilityServiceSupport()); | ||
} | ||
} |
95 changes: 95 additions & 0 deletions
95
...c/main/java/org/jboss/as/clustering/controller/IdentityCapabilityServiceConfigurator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2018, 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.function.Consumer; | ||
import java.util.function.Function; | ||
|
||
import org.jboss.as.controller.capability.CapabilityServiceSupport; | ||
import org.jboss.msc.Service; | ||
import org.jboss.msc.service.ServiceBuilder; | ||
import org.jboss.msc.service.ServiceController; | ||
import org.jboss.msc.service.ServiceName; | ||
import org.jboss.msc.service.ServiceTarget; | ||
import org.wildfly.clustering.service.FunctionalService; | ||
import org.wildfly.clustering.service.ServiceConfigurator; | ||
import org.wildfly.clustering.service.SimpleServiceNameProvider; | ||
import org.wildfly.clustering.service.SupplierDependency; | ||
import org.wildfly.clustering.service.ServiceSupplierDependency; | ||
|
||
/** | ||
* Similar to {@link org.wildfly.clustering.service.IdentityServiceConfigurator}, but resolves the {@link ServiceName} of the requirement during {@link #configure(CapabilityServiceSupport)}. | ||
* @author Paul Ferraro | ||
*/ | ||
public class IdentityCapabilityServiceConfigurator<T> extends SimpleServiceNameProvider implements CapabilityServiceConfigurator { | ||
|
||
private final Function<CapabilityServiceSupport, ServiceName> requirementNameFactory; | ||
|
||
private volatile SupplierDependency<T> requirement; | ||
|
||
public IdentityCapabilityServiceConfigurator(ServiceName name, ServiceNameFactory targetFactory) { | ||
this(name, new Function<CapabilityServiceSupport, ServiceName>() { | ||
@Override | ||
public ServiceName apply(CapabilityServiceSupport support) { | ||
return targetFactory.getServiceName(support); | ||
} | ||
}); | ||
} | ||
|
||
public IdentityCapabilityServiceConfigurator(ServiceName name, UnaryServiceNameFactory targetFactory, String requirementName) { | ||
this(name, new Function<CapabilityServiceSupport, ServiceName>() { | ||
@Override | ||
public ServiceName apply(CapabilityServiceSupport support) { | ||
return targetFactory.getServiceName(support, requirementName); | ||
} | ||
}); | ||
} | ||
|
||
public IdentityCapabilityServiceConfigurator(ServiceName name, BinaryServiceNameFactory targetFactory, String requirementParent, String requirementChild) { | ||
this(name, new Function<CapabilityServiceSupport, ServiceName>() { | ||
@Override | ||
public ServiceName apply(CapabilityServiceSupport support) { | ||
return targetFactory.getServiceName(support, requirementParent, requirementChild); | ||
} | ||
}); | ||
} | ||
|
||
private IdentityCapabilityServiceConfigurator(ServiceName name, Function<CapabilityServiceSupport, ServiceName> requirementNameFactory) { | ||
super(name); | ||
this.requirementNameFactory = requirementNameFactory; | ||
} | ||
|
||
@Override | ||
public ServiceConfigurator configure(CapabilityServiceSupport support) { | ||
this.requirement = new ServiceSupplierDependency<>(this.requirementNameFactory.apply(support)); | ||
return this; | ||
} | ||
|
||
@Override | ||
public ServiceBuilder<?> build(ServiceTarget target) { | ||
ServiceBuilder<?> builder = target.addService(this.getServiceName()); | ||
Consumer<T> consumer = this.requirement.register(builder).provides(this.getServiceName()); | ||
Service service = new FunctionalService<>(consumer, Function.identity(), this.requirement); | ||
return builder.setInstance(service).setInitialMode(ServiceController.Mode.PASSIVE); | ||
} | ||
} |
83 changes: 83 additions & 0 deletions
83
...ng/common/src/main/java/org/jboss/as/clustering/controller/ModuleServiceConfigurator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2018, 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.function.Consumer; | ||
import java.util.function.Function; | ||
import java.util.function.Supplier; | ||
|
||
import org.jboss.as.controller.OperationContext; | ||
import org.jboss.as.controller.OperationFailedException; | ||
import org.jboss.as.server.Services; | ||
import org.jboss.dmr.ModelNode; | ||
import org.jboss.modules.Module; | ||
import org.jboss.modules.ModuleLoadException; | ||
import org.jboss.modules.ModuleLoader; | ||
import org.jboss.msc.Service; | ||
import org.jboss.msc.service.ServiceBuilder; | ||
import org.jboss.msc.service.ServiceName; | ||
import org.jboss.msc.service.ServiceTarget; | ||
import org.wildfly.clustering.service.FunctionalService; | ||
import org.wildfly.clustering.service.ServiceConfigurator; | ||
import org.wildfly.clustering.service.SimpleServiceNameProvider; | ||
|
||
/** | ||
* Configures a service providing a {@link Module}. | ||
* @author Paul Ferraro | ||
*/ | ||
public class ModuleServiceConfigurator extends SimpleServiceNameProvider implements ResourceServiceConfigurator, Supplier<Module> { | ||
|
||
private final Attribute attribute; | ||
|
||
private volatile String identifier; | ||
private volatile Supplier<ModuleLoader> loader; | ||
|
||
public ModuleServiceConfigurator(ServiceName name, Attribute attribute) { | ||
super(name); | ||
this.attribute = attribute; | ||
} | ||
|
||
@Override | ||
public ServiceConfigurator configure(OperationContext context, ModelNode model) throws OperationFailedException { | ||
this.identifier = this.attribute.resolveModelAttribute(context, model).asString(); | ||
return this; | ||
} | ||
|
||
@Override | ||
public ServiceBuilder<?> build(ServiceTarget target) { | ||
ServiceBuilder<?> builder = target.addService(this.getServiceName()); | ||
Consumer<Module> module = builder.provides(this.getServiceName()); | ||
this.loader = builder.requires(Services.JBOSS_SERVICE_MODULE_LOADER); | ||
Service service = new FunctionalService<>(module, Function.identity(), this); | ||
return builder.setInstance(service); | ||
} | ||
|
||
@Override | ||
public Module get() { | ||
try { | ||
return this.loader.get().loadModule(this.identifier); | ||
} catch (ModuleLoadException e) { | ||
throw new IllegalArgumentException(e); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
46 changes: 46 additions & 0 deletions
46
.../common/src/main/java/org/jboss/as/clustering/controller/ResourceServiceConfigurator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2018, 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 org.jboss.as.controller.OperationContext; | ||
import org.jboss.as.controller.OperationFailedException; | ||
import org.jboss.dmr.ModelNode; | ||
import org.wildfly.clustering.service.ServiceConfigurator; | ||
|
||
/** | ||
* Configures a {@link org.jboss.msc.Service} using the model of a resource. | ||
* @author Paul Ferraro | ||
*/ | ||
public interface ResourceServiceConfigurator extends ServiceConfigurator { | ||
|
||
/** | ||
* Configures a service using the specified operation context and model. | ||
* @param context an operation context, used to resolve capabilities and expressions | ||
* @param model the resource model | ||
* @return the reference to this configurator | ||
* @throws OperationFailedException if there was a failure reading the model or resolving expressions/capabilities | ||
*/ | ||
default ServiceConfigurator configure(OperationContext context, ModelNode model) throws OperationFailedException { | ||
return this; | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
.../src/main/java/org/jboss/as/clustering/controller/ResourceServiceConfiguratorFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2018, 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 org.jboss.as.controller.PathAddress; | ||
|
||
/** | ||
* Factory for creating a {@link ResourceServiceConfigurator}. | ||
* @author Paul Ferraro | ||
*/ | ||
public interface ResourceServiceConfiguratorFactory { | ||
|
||
/** | ||
* Creates a {@link ServiceConfigurator} for a resource | ||
* @param address the path address of this resource | ||
* @return a service configurator | ||
*/ | ||
ResourceServiceConfigurator createServiceConfigurator(PathAddress address); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.