Package org.jboss.as.connector.subsystems.connector

Source Code of org.jboss.as.connector.subsystems.connector.ConnectorSubsystemAdd

/*
* JBoss, Home of Professional Open Source.
* Copyright 2010, 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.connector.subsystems.connector;

import static org.jboss.as.connector.subsystems.connector.Constants.ARCHIVE_VALIDATION_ENABLED;
import static org.jboss.as.connector.subsystems.connector.Constants.ARCHIVE_VALIDATION_FAIL_ON_ERROR;
import static org.jboss.as.connector.subsystems.connector.Constants.ARCHIVE_VALIDATION_FAIL_ON_WARN;
import static org.jboss.as.connector.subsystems.connector.Constants.BEAN_VALIDATION_ENABLED;
import static org.jboss.as.connector.subsystems.connector.Constants.DEFAULT_WORKMANAGER_LONG_RUNNING_THREAD_POOL;
import static org.jboss.as.connector.subsystems.connector.Constants.DEFAULT_WORKMANAGER_SHORT_RUNNING_THREAD_POOL;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;

import java.util.concurrent.Executor;

import javax.transaction.TransactionManager;
import javax.transaction.TransactionSynchronizationRegistry;

import org.jboss.as.connector.ConnectorServices;
import org.jboss.as.connector.bootstrap.DefaultBootStrapContextService;
import org.jboss.as.connector.deployers.RaDeploymentActivator;
import org.jboss.as.connector.transactionintegration.TransactionIntegrationService;
import org.jboss.as.connector.workmanager.WorkManagerService;
import org.jboss.as.controller.BasicOperationResult;
import org.jboss.as.controller.ModelAddOperationHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.OperationHandler;
import org.jboss.as.controller.OperationResult;
import org.jboss.as.controller.ResultHandler;
import org.jboss.as.controller.RuntimeTask;
import org.jboss.as.controller.RuntimeTaskContext;
import org.jboss.as.server.BootOperationContext;
import org.jboss.as.server.BootOperationHandler;
import org.jboss.as.threads.ThreadsServices;
import org.jboss.as.txn.TxnServices;
import org.jboss.dmr.ModelNode;
import org.jboss.jca.core.api.bootstrap.CloneableBootstrapContext;
import org.jboss.jca.core.api.workmanager.WorkManager;
import org.jboss.jca.core.bootstrapcontext.BaseCloneableBootstrapContext;
import org.jboss.jca.core.workmanager.WorkManagerImpl;
import org.jboss.msc.service.ServiceController.Mode;
import org.jboss.msc.service.ServiceTarget;
import org.jboss.tm.JBossXATerminator;
import org.jboss.tm.TransactionLocalDelegate;
import org.jboss.tm.XAResourceRecoveryRegistry;

/**
* @author @author <a href="mailto:stefano.maestri@redhat.com">Stefano
*         Maestri</a>
*/
class ConnectorSubsystemAdd implements ModelAddOperationHandler, BootOperationHandler {

    static final OperationHandler INSTANCE = new ConnectorSubsystemAdd();

    /** {@inheritDoc} */
    @Override
    public OperationResult execute(final OperationContext context, final ModelNode operation, final ResultHandler resultHandler) {
        final String shortRunningThreadPool = operation.get(DEFAULT_WORKMANAGER_SHORT_RUNNING_THREAD_POOL).asString();
        final String longRunningThreadPool = operation.get(DEFAULT_WORKMANAGER_LONG_RUNNING_THREAD_POOL).asString();
        final boolean beanValidationEnabled = ParamsUtils.parseBooleanParameter(operation, BEAN_VALIDATION_ENABLED, false);
        final boolean archiveValidationEnabled = ParamsUtils
                .parseBooleanParameter(operation, ARCHIVE_VALIDATION_ENABLED, false);
        final boolean failOnError = ParamsUtils.parseBooleanParameter(operation, ARCHIVE_VALIDATION_FAIL_ON_ERROR, true);
        final boolean failOnWarn = ParamsUtils.parseBooleanParameter(operation, ARCHIVE_VALIDATION_FAIL_ON_WARN, false);

        // Apply to the model
        final ModelNode model = context.getSubModel();

        if (shortRunningThreadPool != null) {
            model.get(DEFAULT_WORKMANAGER_SHORT_RUNNING_THREAD_POOL).set(shortRunningThreadPool);

        }
        if (longRunningThreadPool != null) {
            model.get(DEFAULT_WORKMANAGER_LONG_RUNNING_THREAD_POOL).set(longRunningThreadPool);

        }
        if (ParamsUtils.has(operation, BEAN_VALIDATION_ENABLED)) {
            model.get(BEAN_VALIDATION_ENABLED).set(beanValidationEnabled);
        }
        if (ParamsUtils.has(operation, ARCHIVE_VALIDATION_ENABLED)) {
            model.get(ARCHIVE_VALIDATION_ENABLED).set(archiveValidationEnabled);
        }
        if (ParamsUtils.has(operation, ARCHIVE_VALIDATION_FAIL_ON_ERROR)) {
            model.get(ARCHIVE_VALIDATION_FAIL_ON_ERROR).set(failOnError);
        }
        if (ParamsUtils.has(operation, ARCHIVE_VALIDATION_FAIL_ON_WARN)) {
            model.get(ARCHIVE_VALIDATION_FAIL_ON_WARN).set(failOnWarn);
        }

        if (context instanceof BootOperationContext) {
            final BootOperationContext bootContext = BootOperationContext.class.cast(context);
            context.getRuntimeContext().setRuntimeTask(new RuntimeTask() {
                public void execute(RuntimeTaskContext context) throws OperationFailedException {
                    ServiceTarget serviceTarget = context.getServiceTarget();

                    TransactionIntegrationService tiService = new TransactionIntegrationService();

                    serviceTarget
                            .addService(ConnectorServices.TRANSACTION_INTEGRATION_SERVICE, tiService)
                            .addDependency(TxnServices.JBOSS_TXN_TRANSACTION_MANAGER, TransactionManager.class,
                                    tiService.getTmInjector())
                            .addDependency(TxnServices.JBOSS_TXN_SYNCHRONIZATION_REGISTRY,
                                    TransactionSynchronizationRegistry.class, tiService.getTsrInjector())
                            .addDependency(TxnServices.JBOSS_TXN_USER_TRANSACTION_REGISTRY,
                                    org.jboss.tm.usertx.UserTransactionRegistry.class, tiService.getUtrInjector())
                            .addDependency(TxnServices.JBOSS_TXN_XA_TERMINATOR, JBossXATerminator.class,
                                    tiService.getTerminatorInjector())
                            .addDependency(TxnServices.JBOSS_TXN_ARJUNA_RECOVERY_MANAGER, XAResourceRecoveryRegistry.class,
                                    tiService.getRrInjector())

                            .addDependency(TxnServices.JBOSS_TXN_TRANSACTION_MANAGER, TransactionLocalDelegate.class,
                                    tiService.getTldInjector()).setInitialMode(Mode.ACTIVE).install();
                    WorkManager wm = new WorkManagerImpl();

                    final WorkManagerService wmService = new WorkManagerService(wm);
                    serviceTarget
                            .addService(ConnectorServices.WORKMANAGER_SERVICE, wmService)
                            .addDependency(ThreadsServices.EXECUTOR.append(shortRunningThreadPool), Executor.class,
                                    wmService.getExecutorShortInjector())
                            .addDependency(ThreadsServices.EXECUTOR.append(longRunningThreadPool), Executor.class,
                                    wmService.getExecutorLongInjector())
                            .addDependency(TxnServices.JBOSS_TXN_XA_TERMINATOR, JBossXATerminator.class,
                                    wmService.getXaTerminatorInjector()).setInitialMode(Mode.ACTIVE).install();

                    CloneableBootstrapContext ctx = new BaseCloneableBootstrapContext();
                    final DefaultBootStrapContextService defaultBootCtxService = new DefaultBootStrapContextService(ctx);
                    serviceTarget
                            .addService(ConnectorServices.DEFAULT_BOOTSTRAP_CONTEXT_SERVICE, defaultBootCtxService)
                            .addDependency(ConnectorServices.WORKMANAGER_SERVICE, WorkManager.class,
                                    defaultBootCtxService.getWorkManagerValueInjector())
                            .addDependency(TxnServices.JBOSS_TXN_XA_TERMINATOR, JBossXATerminator.class,
                                    defaultBootCtxService.getXaTerminatorInjector())
                            .addDependency(TxnServices.JBOSS_TXN_ARJUNA_TRANSACTION_MANAGER,
                                    com.arjuna.ats.jbossatx.jta.TransactionManagerService.class,
                                    defaultBootCtxService.getTxManagerInjector()).setInitialMode(Mode.ACTIVE).install();
                    final ConnectorSubsystemConfiguration config = new ConnectorSubsystemConfiguration();

                    config.setArchiveValidation(archiveValidationEnabled);
                    config.setArchiveValidationFailOnError(failOnError);
                    config.setArchiveValidationFailOnWarn(failOnWarn);

                    // FIXME Bean validation currently not used
                    config.setBeanValidation(false);

                    final ConnectorConfigService connectorConfigService = new ConnectorConfigService(config);
                    serviceTarget
                            .addService(ConnectorServices.CONNECTOR_CONFIG_SERVICE, connectorConfigService)
                            .addDependency(ConnectorServices.DEFAULT_BOOTSTRAP_CONTEXT_SERVICE,
                                    CloneableBootstrapContext.class,
                                    connectorConfigService.getDefaultBootstrapContextInjector()).setInitialMode(Mode.ACTIVE)
                            .install();

                    new RaDeploymentActivator().activate(bootContext, serviceTarget);
                    resultHandler.handleResultComplete(); // TODO: Listener
                }
            });

        } else {
            resultHandler.handleResultComplete();
        }

        // Compensating is remove
        final ModelNode compensating = new ModelNode();
        compensating.get(OP_ADDR).set(operation.require(ADDRESS));
        compensating.get(OP).set("remove");
        return new BasicOperationResult(compensating);
    }
}
TOP

Related Classes of org.jboss.as.connector.subsystems.connector.ConnectorSubsystemAdd

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.