Search in sources :

Example 1 with ModClusterConfiguration

use of org.jboss.modcluster.config.ModClusterConfiguration in project wildfly by wildfly.

the class ModClusterConfigurationServiceBuilder method configure.

@Override
public Builder<ModClusterConfiguration> configure(OperationContext context, ModelNode model) throws OperationFailedException {
    // Advertise
    optionalString(ADVERTISE_SOCKET.resolveModelAttribute(context, model)).ifPresent(advertiseSocketRef -> this.advertiseSocketDependency = new InjectedValueDependency<>(context.getCapabilityServiceName(SOCKET_BINDING_CAPABILITY_NAME, advertiseSocketRef, SocketBinding.class), SocketBinding.class));
    optionalString(ADVERTISE_SECURITY_KEY.resolveModelAttribute(context, model)).ifPresent(securityKey -> builder.advertise().setAdvertiseSecurityKey(securityKey));
    // MCMP
    builder.mcmp().setAdvertise(ADVERTISE.resolveModelAttribute(context, model).asBoolean()).setProxyURL(PROXY_URL.resolveModelAttribute(context, model).asString()).setAutoEnableContexts(AUTO_ENABLE_CONTEXTS.resolveModelAttribute(context, model).asBoolean()).setStopContextTimeout(STOP_CONTEXT_TIMEOUT.resolveModelAttribute(context, model).asInt()).setStopContextTimeoutUnit(TimeUnit.valueOf(STOP_CONTEXT_TIMEOUT.getMeasurementUnit().getName())).setSocketTimeout(SOCKET_TIMEOUT.resolveModelAttribute(context, model).asInt() * 1000).setSessionDrainingStrategy(Enum.valueOf(SessionDrainingStrategyEnum.class, SESSION_DRAINING_STRATEGY.resolveModelAttribute(context, model).asString()));
    if (model.hasDefined(CommonAttributes.EXCLUDED_CONTEXTS)) {
        String contexts = EXCLUDED_CONTEXTS.resolveModelAttribute(context, model).asString();
        Map<String, Set<String>> excludedContextsPerHost;
        if (contexts == null) {
            excludedContextsPerHost = Collections.emptyMap();
        } else {
            String trimmedContexts = contexts.trim();
            if (trimmedContexts.isEmpty()) {
                excludedContextsPerHost = Collections.emptyMap();
            } else {
                excludedContextsPerHost = new HashMap<>();
                for (String c : trimmedContexts.split(",")) {
                    String[] parts = c.trim().split(":");
                    if (parts.length > 2) {
                        throw ROOT_LOGGER.excludedContextsWrongFormat(trimmedContexts);
                    }
                    String host = null;
                    String trimmedContext = parts[0].trim();
                    if (parts.length == 2) {
                        host = trimmedContext;
                        trimmedContext = parts[1].trim();
                    }
                    String path = trimmedContext.equals("ROOT") ? "" : "/" + trimmedContext;
                    Set<String> paths = excludedContextsPerHost.computeIfAbsent(host, k -> new HashSet<>());
                    paths.add(path);
                }
            }
        }
        builder.mcmp().setExcludedContextsPerHost(excludedContextsPerHost);
    }
    // Balancer
    builder.balancer().setStickySession(STICKY_SESSION.resolveModelAttribute(context, model).asBoolean()).setStickySessionRemove(STICKY_SESSION_REMOVE.resolveModelAttribute(context, model).asBoolean()).setStickySessionForce(STICKY_SESSION_FORCE.resolveModelAttribute(context, model).asBoolean()).setWorkerTimeout(WORKER_TIMEOUT.resolveModelAttribute(context, model).asInt()).setMaxAttempts(MAX_ATTEMPTS.resolveModelAttribute(context, model).asInt());
    // Node
    builder.node().setFlushPackets(FLUSH_PACKETS.resolveModelAttribute(context, model).asBoolean()).setFlushWait(FLUSH_WAIT.resolveModelAttribute(context, model).asInt()).setPing(PING.resolveModelAttribute(context, model).asInt()).setSmax(SMAX.resolveModelAttribute(context, model).asInt()).setTtl(TTL.resolveModelAttribute(context, model).asInt()).setNodeTimeout(NODE_TIMEOUT.resolveModelAttribute(context, model).asInt());
    optionalString(BALANCER.resolveModelAttribute(context, model)).ifPresent(balancer -> builder.node().setBalancer(balancer));
    optionalString(LOAD_BALANCING_GROUP.resolveModelAttribute(context, model)).ifPresent(group -> builder.node().setLoadBalancingGroup(group));
    optionalList(PROXIES.resolveModelAttribute(context, model)).ifPresent(refs -> refs.stream().map(ModelNode::asString).forEach(ref -> outboundSocketBindings.add(new InjectedValueDependency<>(context.getCapabilityServiceName(OUTBOUND_SOCKET_BINDING_CAPABILITY_NAME, ref, OutboundSocketBinding.class), OutboundSocketBinding.class))));
    if (model.hasDefined(CommonAttributes.PROXY_LIST)) {
        throw new OperationFailedException(ROOT_LOGGER.proxyListNotAllowedInCurrentModel());
    }
    // Elytron-based security support
    Optional<String> sslContextRef = optionalString(SSL_CONTEXT.resolveModelAttribute(context, model));
    sslContextRef.ifPresent(sslContext -> this.sslContextDependency = new InjectedValueDependency<>(context.getCapabilityServiceName(SSL_CONTEXT_CAPABILITY_NAME, sslContext, SSLContext.class), SSLContext.class));
    if (model.get(ModClusterSSLResourceDefinition.PATH.getKeyValuePair()).isDefined()) {
        if (sslContextRef.isPresent()) {
            throw ROOT_LOGGER.bothElytronAndLegacySslContextDefined();
        }
        ModelNode sslModel = model.get(ModClusterSSLResourceDefinition.PATH.getKeyValuePair());
        ModClusterConfig sslConfiguration = new ModClusterConfig();
        optionalString(KEY_ALIAS.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslKeyAlias);
        optionalString(PASSWORD.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslTrustStorePassword);
        optionalString(PASSWORD.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslKeyStorePassword);
        optionalString(CERTIFICATE_KEY_FILE.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslKeyStore);
        optionalString(CIPHER_SUITE.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslCiphers);
        optionalString(PROTOCOL.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslProtocol);
        optionalString(CA_CERTIFICATE_FILE.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslTrustStore);
        optionalString(CA_REVOCATION_URL.resolveModelAttribute(context, sslModel)).ifPresent(sslConfiguration::setSslCrlFile);
        builder.mcmp().setSocketFactory(new JSSESocketFactory(sslConfiguration));
    }
    return this;
}
Also used : OutboundSocketBinding(org.jboss.as.network.OutboundSocketBinding) SocketBinding(org.jboss.as.network.SocketBinding) FLUSH_WAIT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.FLUSH_WAIT) LOAD_BALANCING_GROUP(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.LOAD_BALANCING_GROUP) SSLContext(javax.net.ssl.SSLContext) ROOT_LOGGER(org.wildfly.extension.mod_cluster.ModClusterLogger.ROOT_LOGGER) OutboundSocketBinding(org.jboss.as.network.OutboundSocketBinding) OperationContext(org.jboss.as.controller.OperationContext) SSL_CONTEXT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SSL_CONTEXT) Map(java.util.Map) SessionDrainingStrategyEnum(org.jboss.modcluster.config.impl.SessionDrainingStrategyEnum) ServiceTarget(org.jboss.msc.service.ServiceTarget) WORKER_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.WORKER_TIMEOUT) ModelNodes.optionalList(org.jboss.as.clustering.dmr.ModelNodes.optionalList) CA_REVOCATION_URL(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CA_REVOCATION_URL) AUTO_ENABLE_CONTEXTS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.AUTO_ENABLE_CONTEXTS) Collection(java.util.Collection) NetworkInterface(java.net.NetworkInterface) ADVERTISE_SECURITY_KEY(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.ADVERTISE_SECURITY_KEY) Set(java.util.Set) ResourceServiceBuilder(org.jboss.as.clustering.controller.ResourceServiceBuilder) ADVERTISE_SOCKET(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.ADVERTISE_SOCKET) InetSocketAddress(java.net.InetSocketAddress) Objects(java.util.Objects) SSL_CONTEXT_CAPABILITY_NAME(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SSL_CONTEXT_CAPABILITY_NAME) PASSWORD(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.PASSWORD) PROTOCOL(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.PROTOCOL) List(java.util.List) Stream(java.util.stream.Stream) OperationFailedException(org.jboss.as.controller.OperationFailedException) JSSESocketFactory(org.jboss.modcluster.mcmp.impl.JSSESocketFactory) ServiceName(org.jboss.msc.service.ServiceName) Optional(java.util.Optional) MAX_ATTEMPTS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.MAX_ATTEMPTS) ModelNode(org.jboss.dmr.ModelNode) Builder(org.wildfly.clustering.service.Builder) SESSION_DRAINING_STRATEGY(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SESSION_DRAINING_STRATEGY) ValueDependency(org.wildfly.clustering.service.ValueDependency) SMAX(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SMAX) Value(org.jboss.msc.value.Value) BALANCER(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.BALANCER) ProxyConfiguration(org.jboss.modcluster.config.ProxyConfiguration) HashMap(java.util.HashMap) PROXY_URL(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.PROXY_URL) PROXIES(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.PROXIES) HashSet(java.util.HashSet) CIPHER_SUITE(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CIPHER_SUITE) SocketException(java.net.SocketException) KEY_ALIAS(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.KEY_ALIAS) CERTIFICATE_KEY_FILE(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CERTIFICATE_KEY_FILE) SocketBinding(org.jboss.as.network.SocketBinding) InjectedValueDependency(org.wildfly.clustering.service.InjectedValueDependency) LinkedList(java.util.LinkedList) ModClusterConfiguration(org.jboss.modcluster.config.ModClusterConfiguration) PING(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.PING) NODE_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.NODE_TIMEOUT) STOP_CONTEXT_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STOP_CONTEXT_TIMEOUT) EXCLUDED_CONTEXTS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.EXCLUDED_CONTEXTS) ModClusterConfig(org.jboss.modcluster.config.impl.ModClusterConfig) ServiceBuilder(org.jboss.msc.service.ServiceBuilder) ModClusterConfigurationBuilder(org.jboss.modcluster.config.builder.ModClusterConfigurationBuilder) STICKY_SESSION(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STICKY_SESSION) STICKY_SESSION_FORCE(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STICKY_SESSION_FORCE) TimeUnit(java.util.concurrent.TimeUnit) CA_CERTIFICATE_FILE(org.wildfly.extension.mod_cluster.ModClusterSSLResourceDefinition.CA_CERTIFICATE_FILE) ServiceController(org.jboss.msc.service.ServiceController) ValueService(org.jboss.msc.service.ValueService) ADVERTISE(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.ADVERTISE) TTL(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.TTL) ModelNodes.optionalString(org.jboss.as.clustering.dmr.ModelNodes.optionalString) FLUSH_PACKETS(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.FLUSH_PACKETS) SOCKET_TIMEOUT(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.SOCKET_TIMEOUT) STICKY_SESSION_REMOVE(org.wildfly.extension.mod_cluster.ModClusterConfigResourceDefinition.STICKY_SESSION_REMOVE) Collections(java.util.Collections) Set(java.util.Set) HashSet(java.util.HashSet) OutboundSocketBinding(org.jboss.as.network.OutboundSocketBinding) OperationFailedException(org.jboss.as.controller.OperationFailedException) SessionDrainingStrategyEnum(org.jboss.modcluster.config.impl.SessionDrainingStrategyEnum) ModelNodes.optionalString(org.jboss.as.clustering.dmr.ModelNodes.optionalString) SSLContext(javax.net.ssl.SSLContext) ModClusterConfig(org.jboss.modcluster.config.impl.ModClusterConfig) InjectedValueDependency(org.wildfly.clustering.service.InjectedValueDependency) ModelNode(org.jboss.dmr.ModelNode) JSSESocketFactory(org.jboss.modcluster.mcmp.impl.JSSESocketFactory)

Example 2 with ModClusterConfiguration

use of org.jboss.modcluster.config.ModClusterConfiguration in project wildfly by wildfly.

the class ModClusterSubsystemAdd method performBoottime.

@Override
public void performBoottime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
    ServiceTarget target = context.getServiceTarget();
    final ModelNode fullModel = Resource.Tools.readModel(context.readResource(PathAddress.EMPTY_ADDRESS));
    final ModelNode modelConfig = fullModel.get(ModClusterConfigResourceDefinition.PATH.getKeyValuePair());
    ModClusterConfigurationServiceBuilder configurationBuilder = new ModClusterConfigurationServiceBuilder();
    configurationBuilder.configure(context, modelConfig).build(target).install();
    // Construct LoadBalanceFactorProvider and call pluggable boot time handlers.
    Set<LoadMetric> metrics = new HashSet<>();
    final LoadBalanceFactorProvider loadProvider = getModClusterLoadProvider(metrics, context, modelConfig);
    for (BoottimeHandlerProvider handler : ServiceLoader.load(BoottimeHandlerProvider.class, BoottimeHandlerProvider.class.getClassLoader())) {
        handler.performBoottime(metrics, context, operation, modelConfig);
    }
    final String connector = CONNECTOR.resolveModelAttribute(context, modelConfig).asString();
    final int statusInterval = STATUS_INTERVAL.resolveModelAttribute(context, modelConfig).asInt();
    InjectedValue<ModClusterConfiguration> modClusterConfiguration = new InjectedValue<>();
    ContainerEventHandlerService service = new ContainerEventHandlerService(modClusterConfiguration, loadProvider);
    // Install the main service
    new AsynchronousServiceBuilder<>(ContainerEventHandlerService.SERVICE_NAME, service).build(target).addDependency(configurationBuilder.getServiceName(), ModClusterConfiguration.class, modClusterConfiguration).setInitialMode(Mode.ACTIVE).install();
    // Install services for web container integration
    for (ContainerEventHandlerAdapterBuilder adapterBuilder : ServiceLoader.load(ContainerEventHandlerAdapterBuilder.class, ContainerEventHandlerAdapterBuilder.class.getClassLoader())) {
        adapterBuilder.build(target, connector, statusInterval).setInitialMode(Mode.PASSIVE).install();
    }
}
Also used : ModClusterConfiguration(org.jboss.modcluster.config.ModClusterConfiguration) InjectedValue(org.jboss.msc.value.InjectedValue) ServiceTarget(org.jboss.msc.service.ServiceTarget) LoadBalanceFactorProvider(org.jboss.modcluster.load.LoadBalanceFactorProvider) SimpleLoadBalanceFactorProvider(org.jboss.modcluster.load.impl.SimpleLoadBalanceFactorProvider) DynamicLoadBalanceFactorProvider(org.jboss.modcluster.load.impl.DynamicLoadBalanceFactorProvider) LoadMetric(org.jboss.modcluster.load.metric.LoadMetric) AsynchronousServiceBuilder(org.wildfly.clustering.service.AsynchronousServiceBuilder) ModelNode(org.jboss.dmr.ModelNode) HashSet(java.util.HashSet)

Aggregations

HashSet (java.util.HashSet)2 ModelNode (org.jboss.dmr.ModelNode)2 ModClusterConfiguration (org.jboss.modcluster.config.ModClusterConfiguration)2 ServiceTarget (org.jboss.msc.service.ServiceTarget)2 InetSocketAddress (java.net.InetSocketAddress)1 NetworkInterface (java.net.NetworkInterface)1 SocketException (java.net.SocketException)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Optional (java.util.Optional)1 Set (java.util.Set)1 TimeUnit (java.util.concurrent.TimeUnit)1 Stream (java.util.stream.Stream)1 SSLContext (javax.net.ssl.SSLContext)1 ResourceServiceBuilder (org.jboss.as.clustering.controller.ResourceServiceBuilder)1