package org.jboss.as.undertow; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR; import java.util.List; import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.ServiceVerificationHandler; import org.jboss.dmr.ModelNode; import org.jboss.dmr.ModelType; import org.jboss.msc.service.ServiceBuilder; import org.jboss.msc.service.ServiceController; import org.xnio.Option; import org.xnio.OptionMap; import org.xnio.Options; import org.xnio.XnioWorker; /** * @author <a href="mailto:tomaz.cerar@redhat.com">Tomaz Cerar</a> (c) 2012 Red Hat Inc. */ public class WorkerAdd extends AbstractAddStepHandler { public static final WorkerAdd INSTANCE = new WorkerAdd(); private WorkerAdd(){ } @Override protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException { for (AttributeDefinition attr : WorkerResourceDefinition.ATTRIBUTES) { attr.validateAndSet(operation, model); } } @Override @SuppressWarnings("unchecked") 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 String name = address.getLastElement().getValue(); final OptionMap.Builder builder = OptionMap.builder(); for (OptionAttributeDefinition attr : WorkerResourceDefinition.ATTRIBUTES) { Option option = attr.getOption(); ModelNode value = attr.resolveModelAttribute(context, model); if (attr.getType() == ModelType.INT) { builder.set((Option<Integer>) option, value.asInt()); } else if (attr.getType() == ModelType.LONG) { builder.set(option, value.asLong()); } else if (attr.getType() == ModelType.BOOLEAN) { builder.set(option, value.asBoolean()); } } builder.set(Options.WORKER_NAME, name); final WorkerService workerService = new WorkerService(builder.getMap()); final ServiceBuilder<XnioWorker> serviceBuilder = context.getServiceTarget(). addService(UndertowService.WORKER.append(name), workerService); serviceBuilder.setInitialMode(ServiceController.Mode.ACTIVE); final ServiceController<XnioWorker> serviceController = serviceBuilder.install(); if (newControllers != null) { newControllers.add(serviceController); } } }