/* * 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.server.deployment; import java.security.PermissionCollection; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.jar.Manifest; import org.jboss.as.controller.ServiceVerificationHandler; import org.jboss.as.controller.capability.CapabilityServiceSupport; import org.jboss.as.controller.services.path.PathManager; import org.jboss.as.server.deployment.annotation.CompositeIndex; import org.jboss.as.server.deployment.module.AdditionalModuleSpecification; import org.jboss.as.server.deployment.module.ExtensionInfo; import org.jboss.as.server.deployment.module.ExtensionListEntry; import org.jboss.as.server.deployment.module.ModuleDependency; import org.jboss.as.server.deployment.module.ModuleSpecification; import org.jboss.as.server.deployment.module.ResourceRoot; import org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex; import org.jboss.as.server.deployment.reflect.ProxyMetadataSource; import org.jboss.as.server.deploymentoverlay.DeploymentOverlayIndex; import org.jboss.as.server.moduleservice.ExternalModuleService; import org.jboss.as.server.moduleservice.ServiceModuleLoader; import org.jboss.as.server.services.security.AbstractVaultReader; import org.jboss.jandex.Index; import org.jboss.modules.Module; import org.jboss.modules.ModuleIdentifier; import org.jboss.msc.service.ServiceName; import org.jboss.vfs.VirtualFile; /** * @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a> */ @SuppressWarnings("deprecation") public final class Attachments { // // GENERAL // /** * A list of service dependencies that must be satisfied before the next deployment phase can begin executing. */ public static final AttachmentKey<AttachmentList<ServiceName>> NEXT_PHASE_DEPS = AttachmentKey.createList(ServiceName.class); /** * A list of service dependencies that must be satisfied before the next deployment phase can begin executing. */ public static final AttachmentKey<AttachmentList<AttachableDependency>> NEXT_PHASE_ATTACHABLE_DEPS = AttachmentKey.createList(AttachableDependency.class); /** * A set of subsystem names that should not be processed. Any subsystem whos name is in this list will not have * its deployment unit processors run. */ public static final AttachmentKey<Set<String>> EXCLUDED_SUBSYSTEMS = AttachmentKey.create(Set.class); /** * The deployments runtime name * * @deprecated use {@link org.jboss.as.server.deployment.DeploymentUnit#getName()} */ @Deprecated public static final AttachmentKey<String> RUNTIME_NAME = AttachmentKey.create(String.class); /** * The name that uniquely identifies the deployment to the management layer across the domain. */ public static final AttachmentKey<String> MANAGEMENT_NAME = AttachmentKey.create(String.class); /** * The deployment contents */ public static final AttachmentKey<VirtualFile> DEPLOYMENT_CONTENTS = AttachmentKey.create(VirtualFile.class); /** * <strong>Deprecated</strong>. The attached object does nothing; this key is only retained for * binary compatiblity. The management layer handles service verification internally, with no need * for involvment by deployment processors. * * @deprecated the object attached under this key does nothing */ @Deprecated public static final AttachmentKey<ServiceVerificationHandler> SERVICE_VERIFICATION_HANDLER = AttachmentKey.create(ServiceVerificationHandler.class); public static final AttachmentKey<Boolean> ALLOW_PHASE_RESTART = AttachmentKey.create(Boolean.class); /** * A builder used to install a deployment phase */ public static final AttachmentKey<DeploymentUnitPhaseBuilder> DEPLOYMENT_UNIT_PHASE_BUILDER = AttachmentKey.create(DeploymentUnitPhaseBuilder.class); // // STRUCTURE // public static final AttachmentKey<PathManager> PATH_MANAGER = AttachmentKey.create(PathManager.class); public static final AttachmentKey<DeploymentOverlayIndex> DEPLOYMENT_OVERLAY_INDEX = AttachmentKey.create(DeploymentOverlayIndex.class); /** * The primary deployment root. */ public static final AttachmentKey<ResourceRoot> DEPLOYMENT_ROOT = AttachmentKey.create(ResourceRoot.class); /** * Information used to build up the deployments Module */ public static final AttachmentKey<ModuleSpecification> MODULE_SPECIFICATION = AttachmentKey.create(ModuleSpecification.class); /** * The additional resource roots of the deployment unit. */ public static final AttachmentKey<AttachmentList<ResourceRoot>> RESOURCE_ROOTS = AttachmentKey.createList(ResourceRoot.class); /** * The MANIFEST.MF of the deployment unit. */ public static final AttachmentKey<Manifest> MANIFEST = AttachmentKey.create(Manifest.class); /** * Available when the deployment contains a valid OSGi manifest */ public static final AttachmentKey<Manifest> OSGI_MANIFEST = AttachmentKey.create(Manifest.class); /** * Module identifiers for Class-Path information */ public static final AttachmentKey<AttachmentList<ModuleIdentifier>> CLASS_PATH_ENTRIES = AttachmentKey.createList(ModuleIdentifier.class); /** * Resource roots for additional modules referenced via Class-Path. * * These are attached to the resource root that actually defined the class path entry, and are used to transitively resolve * the annotation index for class path items. */ public static final AttachmentKey<AttachmentList<ResourceRoot>> CLASS_PATH_RESOURCE_ROOTS = AttachmentKey.createList(ResourceRoot.class); /** * The list of extensions given in the manifest and structure configurations. */ public static final AttachmentKey<AttachmentList<ExtensionListEntry>> EXTENSION_LIST_ENTRIES = AttachmentKey.createList(ExtensionListEntry.class); /** * Information about extensions in a jar library deployment. */ public static final AttachmentKey<ExtensionInfo> EXTENSION_INFORMATION = AttachmentKey.create(ExtensionInfo.class); /** * The server deployment repository */ public static final AttachmentKey<DeploymentMountProvider> SERVER_DEPLOYMENT_REPOSITORY = AttachmentKey.create(DeploymentMountProvider.class); /** * An annotation index for a (@link ResourceRoot). This is attached to the {@link ResourceRoot}s of the deployment that contain * the annotations */ public static final AttachmentKey<Index> ANNOTATION_INDEX = AttachmentKey.create(Index.class); /** * The composite annotation index for this deployment. */ public static final AttachmentKey<CompositeIndex> COMPOSITE_ANNOTATION_INDEX = AttachmentKey.create(CompositeIndex.class); /** * Flag to indicate whether to compute the composite annotation index for this deployment. Absence of this flag will * be cause the composite index to be attached. */ public static final AttachmentKey<Boolean> COMPUTE_COMPOSITE_ANNOTATION_INDEX = AttachmentKey.create(Boolean.class); /** * An attachment that indicates if a {@link ResourceRoot} should be indexed by the {@link org.jboss.as.server.deployment.annotation.AnnotationIndexProcessor}. If this * is not present then the resource root is indexed by default. */ public static final AttachmentKey<Boolean> INDEX_RESOURCE_ROOT = AttachmentKey.create(Boolean.class); /** * A list of paths within a root to ignore when indexing. */ public static final AttachmentKey<AttachmentList<String>> INDEX_IGNORE_PATHS = AttachmentKey.createList(String.class); /** * Sub deployment services */ public static final AttachmentKey<AttachmentList<DeploymentUnit>> SUB_DEPLOYMENTS = AttachmentKey.createList(DeploymentUnit.class); /** * Additional modules attached to the top level deployment */ public static final AttachmentKey<AttachmentList<AdditionalModuleSpecification>> ADDITIONAL_MODULES = AttachmentKey.createList(AdditionalModuleSpecification.class); public static final AttachmentKey<AttachmentList<ModuleIdentifier>> ADDITIONAL_ANNOTATION_INDEXES = AttachmentKey.createList(ModuleIdentifier.class); public static final AttachmentKey<Map<ModuleIdentifier, CompositeIndex>> ADDITIONAL_ANNOTATION_INDEXES_BY_MODULE = AttachmentKey.create(Map.class); public static final AttachmentKey<Map<String, MountedDeploymentOverlay>> DEPLOYMENT_OVERLAY_LOCATIONS = AttachmentKey.create(Map.class); /** * Support for getting and creating resource models on a deployment's resource. */ public static final AttachmentKey<DeploymentResourceSupport> DEPLOYMENT_RESOURCE_SUPPORT = AttachmentKey.create(DeploymentResourceSupport.class); /** * Support for integrating with services and other runtime API provided by managed capabilities. */ public static final AttachmentKey<CapabilityServiceSupport> CAPABILITY_SERVICE_SUPPORT = AttachmentKey.create(CapabilityServiceSupport.class); // // VALIDATE // // // PARSE // public static final AttachmentKey<AbstractVaultReader> VAULT_READER_ATTACHMENT_KEY = AttachmentKey.create(AbstractVaultReader.class); // // REGISTER // public static final AttachmentKey<BundleState> BUNDLE_STATE_KEY = AttachmentKey.create(BundleState.class); // // DEPENDENCIES // public static final AttachmentKey<AttachmentList<ModuleDependency>> MANIFEST_DEPENDENCIES = AttachmentKey.createList(ModuleDependency.class); // // CONFIGURE // /** * The module identifier. */ public static final AttachmentKey<ModuleIdentifier> MODULE_IDENTIFIER = AttachmentKey.create(ModuleIdentifier.class); /** * Flags for deferred module phase handling. */ public static final AttachmentKey<AttachmentList<String>> DEFERRED_MODULES = AttachmentKey.createList(String.class); public static final AttachmentKey<AtomicInteger> DEFERRED_ACTIVATION_COUNT = AttachmentKey.create(AtomicInteger.class); // // MODULARIZE // /** * The module of this deployment unit. */ public static final AttachmentKey<Module> MODULE = AttachmentKey.create(Module.class); /** * The module loader for the deployment */ public static final AttachmentKey<ServiceModuleLoader> SERVICE_MODULE_LOADER = AttachmentKey.create(ServiceModuleLoader.class); /** * The external module service */ public static final AttachmentKey<ExternalModuleService> EXTERNAL_MODULE_SERVICE = AttachmentKey.create(ExternalModuleService.class); /** * An index of {@link java.util.ServiceLoader}-type services in this deployment unit */ public static final AttachmentKey<ServicesAttachment> SERVICES = AttachmentKey.create(ServicesAttachment.class); /** * Sub deployments that are visible from this deployments module loader, in the order they are accessible. * * This list includes the current deployment, which under normal circumstances will be the first item in the list */ public static final AttachmentKey<AttachmentList<DeploymentUnit>> ACCESSIBLE_SUB_DEPLOYMENTS = AttachmentKey.createList(DeploymentUnit.class); /** * The module's permission collection */ public static final AttachmentKey<PermissionCollection> MODULE_PERMISSIONS = AttachmentKey.create(PermissionCollection.class); // // POST_MODULE // // // INSTALL // /** * A list of services that a web deployment should have as dependencies. */ public static final AttachmentKey<AttachmentList<ServiceName>> WEB_DEPENDENCIES = AttachmentKey.createList(ServiceName.class); /** * JNDI dependencies, only attached to the top level deployment */ public static final AttachmentKey<AttachmentList<ServiceName>> JNDI_DEPENDENCIES = AttachmentKey.createList(ServiceName.class); /** * The reflection index for the deployment. */ public static final AttachmentKey<DeploymentReflectionIndex> REFLECTION_INDEX = AttachmentKey.create(DeploymentReflectionIndex.class); /** * The reflection index used to generate jboss-invocation proxies */ public static final AttachmentKey<ProxyMetadataSource> PROXY_REFLECTION_INDEX = AttachmentKey.create(ProxyMetadataSource.class); /** * Setup actions that must be run before running an arquillian test */ public static final AttachmentKey<AttachmentList<SetupAction>> SETUP_ACTIONS = AttachmentKey.createList(SetupAction.class); /** * Attachment key for services that the {@link BundleActivateService} depends on. */ public static final AttachmentKey<AttachmentList<ServiceName>> BUNDLE_ACTIVE_DEPENDENCIES = AttachmentKey.createList(ServiceName.class); /** * List of services that need to be up before we consider this deployment 'done'. This is used to manage initialize-in-order, * and inter deployment dependencies. * * It would better if this could be handled by MSC without needing to add all these into a list manually */ public static final AttachmentKey<AttachmentList<ServiceName>> DEPLOYMENT_COMPLETE_SERVICES = AttachmentKey.createList(ServiceName.class); // // CLEANUP // private Attachments() { } /** * The state of an OSGi bundle deployment */ public static enum BundleState { INSTALLED, RESOLVED, ACTIVE, UNINSTALLED } }