Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2011, 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.datasources;
 
 import static org.jboss.as.connector.pool.Constants.BACKGROUNDVALIDATION;
 import static org.jboss.as.connector.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
 import static org.jboss.as.connector.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
 import static org.jboss.as.connector.pool.Constants.IDLETIMEOUTMINUTES;
 import static org.jboss.as.connector.pool.Constants.MAX_POOL_SIZE;
 import static org.jboss.as.connector.pool.Constants.MIN_POOL_SIZE;
 import static org.jboss.as.connector.pool.Constants.POOL_FLUSH_STRATEGY;
 import static org.jboss.as.connector.pool.Constants.POOL_PREFILL;
 import static org.jboss.as.connector.pool.Constants.POOL_USE_STRICT_MIN;
 import static org.jboss.as.connector.pool.Constants.USE_FAST_FAIL;
 import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
 import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
 import static org.jboss.as.connector.subsystems.datasources.Constants.CHECKVALIDCONNECTIONSQL;
 import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
 import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
 import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
 import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
 import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
 import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTIONSORTERCLASSNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTIONSORTER_PROPERTIES;
 import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
 import static org.jboss.as.connector.subsystems.datasources.Constants.JNDINAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
 import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
 import static org.jboss.as.connector.subsystems.datasources.Constants.NOTXSEPARATEPOOL;
 import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
 import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
 import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
 import static org.jboss.as.connector.subsystems.datasources.Constants.PREPAREDSTATEMENTSCACHESIZE;
 import static org.jboss.as.connector.subsystems.datasources.Constants.QUERYTIMEOUT;
 import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_CLASSNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
 import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERLUGIN_CLASSNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERLUGIN_PROPERTIES;
 import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
 import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
 import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
 import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
 import static org.jboss.as.connector.subsystems.datasources.Constants.SETTXQUERYTIMEOUT;
 import static org.jboss.as.connector.subsystems.datasources.Constants.SHAREPREPAREDSTATEMENTS;
 import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
 import static org.jboss.as.connector.subsystems.datasources.Constants.STALECONNECTIONCHECKERCLASSNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.STALECONNECTIONCHECKER_PROPERTIES;
 import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKSTATEMENTS;
 import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
 import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
 import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.USETRYLOCK;
 import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATEONMATCH;
 import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDCONNECTIONCHECKERCLASSNAME;
 import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDCONNECTIONCHECKER_PROPERTIES;
 import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCECLASS;
 import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 
 import java.util.List;
 import java.util.Map;
 
Utility used to help convert between JCA spi data-source instances and model node representations and vice-versa.

Author(s):
John Bailey
    static ModifiableDataSource from(final OperationContext operationContextfinal ModelNode dataSourceNodefinal String dsNamethrows OperationFailedExceptionValidateException {
        final Map<StringStringconnectionProperties= Collections.emptyMap();
        final String connectionUrl = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String driverClass = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String dataSourceClass = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String jndiName = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String driver = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String newConnectionSql = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String poolName = dsName;
        final String urlDelimiter = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String urlSelectorStrategyClassName = getStringIfSetOrGetDefault(dataSourceNode,
                null);
        final boolean useJavaContext = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final boolean enabled = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final boolean jta = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Integer maxPoolSize = getIntIfSetOrGetDefault(dataSourceNode.);
        final Integer minPoolSize = getIntIfSetOrGetDefault(dataSourceNode.);
        final boolean prefill = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final boolean useStrictMin = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final FlushStrategy flushStrategy = dataSourceNode.hasDefined(.getName()) ? FlushStrategy.forName(dataSourceNode
                .get(.getName()).asString()) : .;
        final CommonPool pool = new CommonPoolImpl(minPoolSizemaxPoolSizeprefilluseStrictMinflushStrategy);
        final String username = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String password = getResolvedStringIfSetOrGetDefault(operationContextdataSourceNodenull);
        final String securityDomain = getStringIfSetOrGetDefault(dataSourceNodenull);
        final Extension reauthPlugin = extractExtension(dataSourceNode);
        final DsSecurity security = new DsSecurityImpl(usernamepasswordsecurityDomainreauthPlugin);
        final boolean sharePreparedStatements = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Long preparedStatementsCacheSize = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Statement.TrackStatementsEnum trackStatements = dataSourceNode.hasDefined(.getName()) ? Statement.TrackStatementsEnum
                .valueOf(dataSourceNode.get(.getName()).asString()) : .;
        final Statement statement = new StatementImpl(sharePreparedStatementspreparedStatementsCacheSizetrackStatements);
        final Integer allocationRetry = getIntIfSetOrGetDefault(dataSourceNodenull);
        final Long allocationRetryWaitMillis = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Long blockingTimeoutMillis = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Long idleTimeoutMinutes = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Long queryTimeout = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Integer xaResourceTimeout = getIntIfSetOrGetDefault(dataSourceNodenull);
        final Long useTryLock = getLongIfSetOrGetDefault(dataSourceNodenull);
        final boolean setTxQuertTimeout = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final TimeOut timeOut = new TimeOutImpl(blockingTimeoutMillisidleTimeoutMinutesallocationRetry,
                allocationRetryWaitMillisxaResourceTimeoutsetTxQuertTimeoutqueryTimeoutuseTryLock);
        final TransactionIsolation transactionIsolation = dataSourceNode.hasDefined(.getName()) ? TransactionIsolation
                .valueOf(dataSourceNode.get(.getName()).asString()) : null;
        final String checkValidConnectionSql = getStringIfSetOrGetDefault(dataSourceNodenull);
        final Extension exceptionSorter = extractExtension(dataSourceNode);
        final Extension staleConnectionChecker = extractExtension(dataSourceNode,
                );
        final Extension validConnectionChecker = extractExtension(dataSourceNode,
                );
        Long backgroundValidationMillis = getLongIfSetOrGetDefault(dataSourceNodenull);
        final boolean backgroundValidation = getBooleanIfSetOrGetDefault(dataSourceNode.);
        boolean useFastFail = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final boolean validateOnMatch = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final boolean spy = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final boolean useCcm = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Validation validation = new ValidationImpl(backgroundValidationbackgroundValidationMillisuseFastFail,
                validConnectionCheckercheckValidConnectionSqlvalidateOnMatchstaleConnectionCheckerexceptionSorter);
        return new ModifiableDataSource(connectionUrldriverClassdataSourceClassdrivertransactionIsolationconnectionPropertiestimeOut,
                securitystatementvalidationurlDelimiterurlSelectorStrategyClassNamenewConnectionSqluseJavaContext,
                poolNameenabledjndiNamespyuseCcmjtapool);
    }
    static ModifiableXaDataSource xaFrom(final OperationContext operationContextfinal ModelNode dataSourceNodefinal String dsNamethrows OperationFailedExceptionValidateException {
        final Map<StringStringxaDataSourceProperty;
        xaDataSourceProperty = Collections.emptyMap();
        final String xaDataSourceClass = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String jndiName = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String module = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String newConnectionSql = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String poolName = dsName;
        final String urlDelimiter = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String urlSelectorStrategyClassName = getStringIfSetOrGetDefault(dataSourceNode,
                null);
        final Boolean useJavaContext = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean enabled = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Integer maxPoolSize = getIntIfSetOrGetDefault(dataSourceNode.);
        final Integer minPoolSize = getIntIfSetOrGetDefault(dataSourceNode.);
        final Boolean prefill = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean useStrictMin = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean interleaving = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean noTxSeparatePool = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean padXid = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean isSameRmOverride = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean wrapXaDataSource = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final FlushStrategy flushStrategy = dataSourceNode.hasDefined(.getName()) ? FlushStrategy.forName(dataSourceNode
                .get(.getName()).asString()) : .;
        final CommonXaPool xaPool = new CommonXaPoolImpl(minPoolSizemaxPoolSizeprefilluseStrictMinflushStrategy,
                isSameRmOverrideinterleavingpadXidwrapXaDataSourcenoTxSeparatePool);
        final String username = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String password = getResolvedStringIfSetOrGetDefault(operationContextdataSourceNodenull);
        final String securityDomain = getStringIfSetOrGetDefault(dataSourceNodenull);
        final Extension reauthPlugin = extractExtension(dataSourceNode);
        final DsSecurity security = new DsSecurityImpl(usernamepasswordsecurityDomainreauthPlugin);
        final Boolean sharePreparedStatements = dataSourceNode.hasDefined(.getName()) ? dataSourceNode.get(
        final Long preparedStatementsCacheSize = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Statement.TrackStatementsEnum trackStatements = dataSourceNode.hasDefined(.getName()) ? Statement.TrackStatementsEnum
                .valueOf(dataSourceNode.get(.getName()).asString()) : .;
        final Statement statement = new StatementImpl(sharePreparedStatementspreparedStatementsCacheSizetrackStatements);
        final Integer allocationRetry = getIntIfSetOrGetDefault(dataSourceNodenull);
        final Long allocationRetryWaitMillis = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Long blockingTimeoutMillis = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Long idleTimeoutMinutes = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Long queryTimeout = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Integer xaResourceTimeout = getIntIfSetOrGetDefault(dataSourceNodenull);
        final Long useTryLock = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Boolean setTxQuertTimeout = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final TimeOut timeOut = new TimeOutImpl(blockingTimeoutMillisidleTimeoutMinutesallocationRetry,
                allocationRetryWaitMillisxaResourceTimeoutsetTxQuertTimeoutqueryTimeoutuseTryLock);
        final TransactionIsolation transactionIsolation = dataSourceNode.hasDefined(.getName()) ? TransactionIsolation
                .valueOf(dataSourceNode.get(.getName()).asString()) : null;
        final String checkValidConnectionSql = getStringIfSetOrGetDefault(dataSourceNodenull);
        final Extension exceptionSorter = extractExtension(dataSourceNode);
        final Extension staleConnectionChecker = extractExtension(dataSourceNode,
                );
        final Extension validConnectionChecker = extractExtension(dataSourceNode,
                );
        Long backgroundValidationMillis = getLongIfSetOrGetDefault(dataSourceNodenull);
        final Boolean backgroundValidation = getBooleanIfSetOrGetDefault(dataSourceNode.);
        boolean useFastFail = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean validateOnMatch = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean spy = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Boolean useCcm = getBooleanIfSetOrGetDefault(dataSourceNode.);
        final Validation validation = new ValidationImpl(backgroundValidationbackgroundValidationMillisuseFastFail,
                validConnectionCheckercheckValidConnectionSqlvalidateOnMatchstaleConnectionCheckerexceptionSorter);
        final String recoveryUsername = getStringIfSetOrGetDefault(dataSourceNodenull);
        final String recoveryPassword = getResolvedStringIfSetOrGetDefault(operationContextdataSourceNodenull);
        final String recoverySecurityDomain = getStringIfSetOrGetDefault(dataSourceNodenull);
        final Boolean noRecovery = getBooleanIfSetOrGetDefault(dataSourceNodenull);
        Recovery recovery = null;
        if (recoveryUsername != null || recoveryPassword != null || recoverySecurityDomain != null ||
            (noRecovery != null && noRecovery.booleanValue())) {
            final Credential credential = new CredentialImpl(recoveryUsernamerecoveryPasswordrecoverySecurityDomain);
            final Extension recoverPlugin = extractExtension(dataSourceNode);
            recovery = new Recovery(credentialrecoverPluginnoRecovery);
        }
        return new ModifiableXaDataSource(transactionIsolationtimeOutsecuritystatementvalidationurlDelimiter,
                urlSelectorStrategyClassNameuseJavaContextpoolNameenabledjndiNamespyuseCcmxaDataSourceProperty,
                xaDataSourceClassmodulenewConnectionSqlxaPoolrecovery);
    }
    private static void setBooleanIfNotNull(final ModelNode nodefinal String identifierfinal Boolean value) {
        if (value != null) {
            node.get(identifier).set(value);
        }
    }
    private static void setBooleanIfTrue(final ModelNode nodefinal String identifierfinal Boolean value) {
        if (value != null && value.booleanValue() == true) {
            node.get(identifier).set(value);
        }
    }
    private static void setIntegerIfNotNull(final ModelNode nodefinal String identifierfinal Integer value) {
        if (value != null) {
            node.get(identifier).set(value);
        }
    }
    private static void setLongIfNotNull(final ModelNode nodefinal String identifierfinal Long value) {
        if (value != null) {
            node.get(identifier).set(value);
        }
    }
    private static void setStringIfNotNull(final ModelNode nodefinal String identifierfinal String value) {
        if (value != null) {
            node.get(identifier).set(value);
        }
    }
    private static void setExtensionIfNotNull(final ModelNode dsModelfinal String extensionclassname,
            final String extensionPropertiesfinal Extension extension) {
        if (extension != null) {
            setStringIfNotNull(dsModelextensionclassnameextension.getClassName());
            if (extension.getConfigPropertiesMap() != null) {
                for (Map.Entry<StringStringentry : extension.getConfigPropertiesMap().entrySet()) {
                    dsModel.get(extensionPropertiesentry.getKey()).set(entry.getValue());
                }
            }
        }
    }
    private static Long getLongIfSetOrGetDefault(final ModelNode dataSourceNodefinal SimpleAttributeDefinition keyfinal Long defaultValue) {
        if (dataSourceNode.hasDefined(key.getName())) {
            return dataSourceNode.get(key.getName()).asLong();
        } else {
            return defaultValue;
        }
    }
    private static Integer getIntIfSetOrGetDefault(final ModelNode dataSourceNodefinal SimpleAttributeDefinition keyfinal Integer defaultValue) {
        if (dataSourceNode.hasDefined(key.getName())) {
            return dataSourceNode.get(key.getName()).asInt();
        } else {
            return defaultValue;
        }
    }
    private static Boolean getBooleanIfSetOrGetDefault(final ModelNode dataSourceNodefinal SimpleAttributeDefinition key,
            final Boolean defaultValue) {
        if (dataSourceNode.hasDefined(key.getName())) {
            return dataSourceNode.get(key.getName()).asBoolean();
        } else {
            return defaultValue;
        }
    }
    private static String getResolvedStringIfSetOrGetDefault(final OperationContext contextfinal ModelNode dataSourceNodefinal SimpleAttributeDefinition keyfinal String defaultValuethrows OperationFailedException {
        if (dataSourceNode.hasDefined(key.getName())) {
            return context.resolveExpressions(dataSourceNode.get(key.getName())).asString();
        } else {
            return defaultValue;
        }
    }
    private static String getStringIfSetOrGetDefault(final ModelNode dataSourceNodefinal SimpleAttributeDefinition keyfinal String defaultValue) {
        if (dataSourceNode.hasDefined(key.getName())) {
            String returnValue = dataSourceNode.get(key.getName()).asString();
            return (returnValue != null && returnValue.trim().length() != 0) ? returnValue : null;
        } else {
            return defaultValue;
        }
    }
    private static Extension extractExtension(final ModelNode dataSourceNodefinal SimpleAttributeDefinition classNamefinal SimpleAttributeDefinition propertyName)
            throws ValidateException {
        if (dataSourceNode.hasDefined(className.getName())) {
            String exceptionSorterClassName = dataSourceNode.get(className.getName()).asString();
            getStringIfSetOrGetDefault(dataSourceNodeclassNamenull);
            Map<StringStringexceptionSorterProperty = null;
            if (dataSourceNode.hasDefined(propertyName.getName())) {
                exceptionSorterProperty = new HashMap<StringString>(dataSourceNode.get(propertyName.getName()).asList().size());
                for (Property property : dataSourceNode.get(propertyName.getName()).asPropertyList()) {
                    exceptionSorterProperty.put(property.getName(), property.getValue().asString());
                }
            }
            return new Extension(exceptionSorterClassNameexceptionSorterProperty);
        } else {
            return null;
        }
    }
New to GrepCode? Check out our FAQ X