@Override protected void performRuntime( OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException { final PathAddress address = PathAddress.pathAddress(operation.get(OP_ADDR)); final PathAddress parent = address.subAddress(0, address.size() - 1); String name = address.getLastElement().getValue(); String bindingRef = ListenerResourceDefinition.SOCKET_BINDING.resolveModelAttribute(context, model).asString(); String workerName = ListenerResourceDefinition.WORKER.resolveModelAttribute(context, model).asString(); String bufferPoolName = ListenerResourceDefinition.BUFFER_POOL.resolveModelAttribute(context, model).asString(); boolean enabled = ListenerResourceDefinition.ENABLED.resolveModelAttribute(context, model).asBoolean(); OptionMap listenerOptions = OptionList.resolveOptions(context, model, ListenerResourceDefinition.LISTENER_OPTIONS); OptionMap socketOptions = OptionList.resolveOptions(context, model, ListenerResourceDefinition.SOCKET_OPTIONS); String serverName = parent.getLastElement().getValue(); final ServiceName listenerServiceName = UndertowService.listenerName(name); final ListenerService<? extends ListenerService> service = createService(name, serverName, context, model, listenerOptions, socketOptions); final ServiceBuilder<? extends ListenerService> serviceBuilder = context.getServiceTarget().addService(listenerServiceName, service); serviceBuilder .addDependency(IOServices.WORKER.append(workerName), XnioWorker.class, service.getWorker()) .addDependency( SocketBinding.JBOSS_BINDING_NAME.append(bindingRef), SocketBinding.class, service.getBinding()) .addDependency( IOServices.BUFFER_POOL.append(bufferPoolName), Pool.class, service.getBufferPool()) .addDependency( UndertowService.SERVER.append(serverName), Server.class, service.getServerService()); configureAdditionalDependencies(context, serviceBuilder, model, service); serviceBuilder.setInitialMode( enabled ? ServiceController.Mode.ACTIVE : ServiceController.Mode.NEVER); serviceBuilder.addListener(verificationHandler); final ServiceController<? extends ListenerService> serviceController = serviceBuilder.install(); if (newControllers != null) { newControllers.add(serviceController); } }
public static OptionMap populate(final ExpressionResolver resolver, final ModelNode model) throws OperationFailedException { OptionMap.Builder builder = OptionMap.builder() .set(Options.TCP_NODELAY, Boolean.TRUE) .set(Options.REUSE_ADDRESSES, true) .addAll(OptionList.resolveOptions(resolver, model, RemotingEndpointResource.OPTIONS)); return builder.getMap(); }
/** @author <a href="mailto:[email protected]">Tomaz Cerar</a> (c) 2013 Red Hat Inc. */ abstract class ListenerResourceDefinition extends PersistentResourceDefinition { protected static final SimpleAttributeDefinition SOCKET_BINDING = new SimpleAttributeDefinitionBuilder(Constants.SOCKET_BINDING, ModelType.STRING) .setAllowNull(false) .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES) .setValidator(new StringLengthValidator(1)) .build(); protected static final SimpleAttributeDefinition WORKER = new SimpleAttributeDefinitionBuilder(Constants.WORKER, ModelType.STRING) .setAllowNull(true) .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES) .setValidator(new StringLengthValidator(1)) .setDefaultValue(new ModelNode("default")) .build(); protected static final SimpleAttributeDefinition BUFFER_POOL = new SimpleAttributeDefinitionBuilder(Constants.BUFFER_POOL, ModelType.STRING) .setAllowNull(true) .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES) .setValidator(new StringLengthValidator(1)) .setDefaultValue(new ModelNode("default")) .build(); protected static final SimpleAttributeDefinition ENABLED = new SimpleAttributeDefinitionBuilder(Constants.ENABLED, ModelType.BOOLEAN) .setAllowNull(true) .setFlags(AttributeAccess.Flag.RESTART_ALL_SERVICES) .setDefaultValue(new ModelNode(true)) .setAllowExpression(true) .build(); static final List<OptionAttributeDefinition> OPTIONS = OptionList.builder() .addOption( UndertowOptions.MAX_HEADER_SIZE, "max-header-size", new ModelNode(UndertowOptions.DEFAULT_MAX_HEADER_SIZE)) .addOption( UndertowOptions.MAX_ENTITY_SIZE, Constants.MAX_POST_SIZE, new ModelNode(UndertowOptions.DEFAULT_MAX_ENTITY_SIZE)) .addOption( UndertowOptions.BUFFER_PIPELINED_DATA, "buffer-pipelined-data", new ModelNode(true)) .addOption(UndertowOptions.MAX_PARAMETERS, "max-parameters", new ModelNode(1000)) .addOption(UndertowOptions.MAX_HEADERS, "max-headers", new ModelNode(200)) .addOption(UndertowOptions.MAX_COOKIES, "max-cookies", new ModelNode(200)) .addOption( UndertowOptions.ALLOW_ENCODED_SLASH, "allow-encoded-slash", new ModelNode(false)) .addOption(UndertowOptions.DECODE_URL, "decode-url", new ModelNode(true)) .addOption(UndertowOptions.URL_CHARSET, "url-charset", new ModelNode("UTF-8")) .build(); protected static final Collection ATTRIBUTES; static { ATTRIBUTES = new LinkedHashSet<AttributeDefinition>( Arrays.asList(SOCKET_BINDING, WORKER, BUFFER_POOL, ENABLED)); ATTRIBUTES.addAll(OPTIONS); } public ListenerResourceDefinition(PathElement pathElement) { super(pathElement, UndertowExtension.getResolver(Constants.LISTENER)); } public Collection<AttributeDefinition> getAttributes() { //noinspection unchecked return ATTRIBUTES; } @Override public void registerOperations(ManagementResourceRegistration resourceRegistration) { super.registerOperations(resourceRegistration); super.registerAddOperation( resourceRegistration, getAddHandler(), OperationEntry.Flag.RESTART_NONE); super.registerRemoveOperation( resourceRegistration, new ListenerRemoveHandler(getAddHandler()), OperationEntry.Flag.RESTART_NONE); } protected abstract ListenerAdd getAddHandler(); }