/* * 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.util; import static org.jboss.as.connector.logging.ConnectorLogger.ROOT_LOGGER; import java.util.HashMap; import java.util.Map; import org.jboss.as.connector.logging.ConnectorLogger; import org.jboss.as.connector.subsystems.resourceadapters.ModifiableResourceAdapter; import org.jboss.jca.common.api.metadata.resourceadapter.Activation; import org.jboss.msc.service.ServiceName; /** * ConnectorServices contains some utility methods used internally and constants for all connector's subsystems service names. * * @author <a href="mailto:stefano.maestri@redhat.comdhat.com">Stefano Maestri</a> * @author <a href="mailto:jesper.pedersen@jboss.org">Jesper Pedersen</a> */ public class ConnectorServices { /** * A map whose key corresponds to a ra name and whose value is an identifier with which the RA is registered in the * {@link org.jboss.jca.core.spi.rar.ResourceAdapterRepository} */ private static Map<String, String> resourceAdapterRepositoryIdentifiers = new HashMap<String, String>(); public static final ServiceName CONNECTOR_CONFIG_SERVICE = ServiceName.JBOSS.append("connector", "config"); public static final ServiceName BEAN_VALIDATION_CONFIG_SERVICE = ServiceName.JBOSS.append("connector", "bean_validation", "config"); public static final ServiceName TRACER_CONFIG_SERVICE = ServiceName.JBOSS.append("connector", "tracer", "config"); public static final ServiceName ARCHIVE_VALIDATION_CONFIG_SERVICE = ServiceName.JBOSS.append("connector", "archive_validation", "config"); public static final ServiceName BOOTSTRAP_CONTEXT_SERVICE = ServiceName.JBOSS.append("connector", "bootstrapcontext"); public static final ServiceName TRANSACTION_INTEGRATION_SERVICE = ServiceName.JBOSS.append("connector", "transactionintegration"); public static final ServiceName WORKMANAGER_SERVICE = ServiceName.JBOSS.append("connector", "workmanager"); public static final ServiceName WORKMANAGER_STATS_SERVICE = WORKMANAGER_SERVICE.append("statistics"); public static final ServiceName DISTRIBUTED_WORKMANAGER_STATS_SERVICE = WORKMANAGER_SERVICE.append("distributed-statistics"); public static final ServiceName RESOURCE_ADAPTER_SERVICE_PREFIX = ServiceName.JBOSS.append("ra"); public static final String STATISTICS_SUFFIX = "STATISTICS"; public static final ServiceName RESOURCE_ADAPTER_DEPLOYMENT_SERVICE_PREFIX = RESOURCE_ADAPTER_SERVICE_PREFIX .append("deployment"); public static final ServiceName RESOURCE_ADAPTER_DEPLOYER_SERVICE_PREFIX = RESOURCE_ADAPTER_SERVICE_PREFIX .append("deployer"); public static final ServiceName RESOURCE_ADAPTER_REGISTRY_SERVICE = ServiceName.JBOSS.append("raregistry"); public static final ServiceName RESOURCE_ADAPTER_ACTIVATOR_SERVICE = ServiceName.JBOSS.append("raactivator"); public static final ServiceName INACTIVE_RESOURCE_ADAPTER_SERVICE = ServiceName.JBOSS.append("rainactive"); /** * MDR service name * */ public static final ServiceName IRONJACAMAR_MDR = ServiceName.JBOSS.append("ironjacamar", "mdr"); public static final ServiceName IRONJACAMAR_RESOURCE = ServiceName.JBOSS.append("ironjacamar", "resource"); public static final ServiceName RA_REPOSITORY_SERVICE = ServiceName.JBOSS.append("rarepository"); public static final ServiceName NON_JTA_DS_RA_REPOSITORY_SERVICE = ServiceName.JBOSS.append("non_jta_ds_rarepository"); public static final ServiceName MANAGEMENT_REPOSITORY_SERVICE = ServiceName.JBOSS.append("management_repository"); public static final ServiceName RESOURCEADAPTERS_SERVICE = ServiceName.JBOSS.append("resourceadapters"); public static final ServiceName RESOURCEADAPTERS_SUBSYSTEM_SERVICE = ServiceName.JBOSS.append("resourceadapters-subsystem"); public static final ServiceName RA_SERVICE = ServiceName.JBOSS.append("resourceadapters", "ra"); public static final ServiceName DATASOURCES_SERVICE = ServiceName.JBOSS.append("datasources"); public static final ServiceName JDBC_DRIVER_REGISTRY_SERVICE = ServiceName.JBOSS.append("jdbc-driver", "registry"); public static final ServiceName CCM_SERVICE = ServiceName.JBOSS.append("cached-connection-manager"); public static final ServiceName NON_TX_CCM_SERVICE = ServiceName.JBOSS.append("non-tx-cached-connection-manager"); public static final ServiceName IDLE_REMOVER_SERVICE = ServiceName.JBOSS.append("ironjacamar", "idle-remover"); public static final ServiceName CONNECTION_VALIDATOR_SERVICE = ServiceName.JBOSS.append("ironjacamar", "connection-validator"); /** * convenient method to check notNull of value * * @param <T> type of the value * @param value the value * @return the value or throw an {@link IllegalStateException} if value is null (a.k.a. service not started) */ public static <T> T notNull(T value) { if (value == null) throw ConnectorLogger.ROOT_LOGGER.serviceNotStarted(); return value; } // resource-adapter DMR resource public static synchronized ServiceName getDeploymentServiceName(final String raName, final Activation raxml) { if (raName == null) throw ConnectorLogger.ROOT_LOGGER.undefinedVar("RaName"); ServiceName serviceName = null; ModifiableResourceAdapter ra = (ModifiableResourceAdapter) raxml; if (ra != null && ra.getId() != null) { serviceName = getDeploymentServiceName(raName,ra.getId()); } else { serviceName = getDeploymentServiceName(raName,(String)null); } ROOT_LOGGER.tracef("ConnectorServices: getDeploymentServiceName(%s,%s) -> %s", raName, raxml,serviceName); return serviceName; } public static synchronized ServiceName getDeploymentServiceName(String raName, String raId) { if (raName == null) throw ConnectorLogger.ROOT_LOGGER.undefinedVar("RaName"); // ServiceName entry = deploymentServiceNames.get(raName); ServiceName serviceName = null; if (raId == null || raId.equals(raName)) { serviceName = RESOURCE_ADAPTER_DEPLOYMENT_SERVICE_PREFIX.append(raName); } else { serviceName = RESOURCE_ADAPTER_DEPLOYMENT_SERVICE_PREFIX.append(raName + "_" + raId); } ROOT_LOGGER.tracef("ConnectorServices: getDeploymentServiceName(%s,%s) -> %s", raName, raId,serviceName); return serviceName; } public static synchronized ServiceName getDeploymentServiceName(final String raName) { if (raName == null) throw ConnectorLogger.ROOT_LOGGER.undefinedVar("RaName"); final ServiceName serviceName = RESOURCE_ADAPTER_DEPLOYMENT_SERVICE_PREFIX.append(raName); ROOT_LOGGER.tracef("ConnectorServices: getDeploymentServiceName(%s) -> %s", raName, serviceName); return serviceName; } public static synchronized ServiceName getResourceAdapterServiceName(final String id) { if (id == null || id.trim().isEmpty()) { throw ConnectorLogger.ROOT_LOGGER.undefinedVar("id"); } ServiceName serviceName = RESOURCE_ADAPTER_SERVICE_PREFIX.append(stripDotRarSuffix(id)); ROOT_LOGGER.tracef("ConnectorServices: getResourceAdapterServiceName(%s) -> %s", id, serviceName); return serviceName; } private static String stripDotRarSuffix(final String raName) { if (raName == null) { return null; } // See RaDeploymentParsingProcessor if (raName.endsWith(".rar")) { return raName.substring(0, raName.indexOf(".rar")); } return raName; } /** * Returns the identifier with which the resource adapter named <code>raName</code> is registered in the * {@link org.jboss.jca.core.spi.rar.ResourceAdapterRepository}. Returns null, if there's no registration for a resource * adapter named <code>raName</code> * * @param raName The resource adapter name * @return */ public static String getRegisteredResourceAdapterIdentifier(final String raName) { synchronized (resourceAdapterRepositoryIdentifiers) { return resourceAdapterRepositoryIdentifiers.get(raName); } } /** * Makes a note of the resource adapter identifier with which a resource adapter named <code>raName</code> is registered in * the {@link org.jboss.jca.core.spi.rar.ResourceAdapterRepository}. * <p/> * Subsequent calls to {@link #getRegisteredResourceAdapterIdentifier(String)} with the passed <code>raName</code> return * the <code>raIdentifier</code> * * @param raName The resource adapter name * @param raIdentifier The resource adapter identifier */ public static void registerResourceAdapterIdentifier(final String raName, final String raIdentifier) { synchronized (resourceAdapterRepositoryIdentifiers) { resourceAdapterRepositoryIdentifiers.put(raName, raIdentifier); } } /** * Clears the mapping between the <code>raName</code> and the resource adapter identifier, with which the resource adapter * is registered with the {@link org.jboss.jca.core.spi.rar.ResourceAdapterRepository} * <p/> * Subsequent calls to {@link #getRegisteredResourceAdapterIdentifier(String)} with the passed <code>raName</code> return * null * * @param raName The resource adapter name */ public static void unregisterResourceAdapterIdentifier(final String raName) { synchronized (resourceAdapterRepositoryIdentifiers) { resourceAdapterRepositoryIdentifiers.remove(raName); } } }