private boolean hasValidInjectionPoint(DeploymentUnit depUnit) { return hasInjectionPoint(depUnit, "javax.inject.Inject") || hasInjectionPoint(depUnit, "javax.annotation.Resource"); }
private AnnotationInstance getAnnotation(DeploymentUnit depUnit, String className) { List<AnnotationInstance> annotations = getAnnotations(depUnit, className); return annotations.size() == 1 ? annotations.get(0) : null; }
@Override protected void execute(DeploymentProcessorTarget processorTarget) { processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_OSGI_MANIFEST, new OSGiManifestStructureProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_BUNDLE_SUB_DEPLOYMENT, new BundleSubDeploymentMarkingProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_BUNDLE_INFO, new OSGiBundleInfoParseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_PROPERTIES, new OSGiXServiceParseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_DEPLOYMENT, new BundleDeploymentProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_COMPONENTS, new OSGiComponentParseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_SUBSYSTEM_ACTIVATOR, new FrameworkActivateProcessor(deploymentTracker)); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.REGISTER, Phase.REGISTER_BUNDLE_INSTALL, new BundleInstallProcessor(deploymentTracker)); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.DEPENDENCIES, Phase.DEPENDENCIES_BUNDLE, new BundleDependenciesProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.CONFIGURE_MODULE, Phase.CONFIGURE_RESOLVE_BUNDLE, new BundleResolveProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.CONFIGURE_MODULE, Phase.CONFIGURE_DEFERRED_PHASE, new DeferredPhaseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_RESOLVER_MODULE, new ModuleRegisterProcessor(registrationTracker)); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_BUNDLE_ACTIVATE, new BundleActivateProcessor()); } }, OperationContext.Stage.RUNTIME);
private boolean allowAdditionalModuleDependencies(final DeploymentUnit depUnit) { boolean isWar = DeploymentTypeMarker.isType(DeploymentType.WAR, depUnit); boolean isEjb = EjbDeploymentMarker.isEjbDeployment(depUnit); boolean isCDI = getAnnotation(depUnit, ManagedBean.class.getName()) != null; boolean isJPA = JPADeploymentMarker.isJPADeployment(depUnit); return isWar || isEjb || isCDI || isJPA; }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); Deployment deployment = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); XBundle bundle = depUnit.getAttachment(OSGiConstants.BUNDLE_KEY); if (bundle == null || !deployment.isAutoStart() || bundle.isResolved()) return; resolveBundle(phaseContext, depUnit, bundle); }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); XBundle bundle = depUnit.getAttachment(OSGiConstants.BUNDLE_KEY); if (bundle == null || bundle.isFragment()) return; ServiceController<XBundle> controller = BundleActivateService.addService(phaseContext.getServiceTarget(), depUnit, bundle); phaseContext.addDependency(controller.getName(), AttachmentKey.create(XBundle.class)); }
private void resolveBundle(DeploymentPhaseContext phaseContext, DeploymentUnit depUnit, XBundle bundle) { XBundleRevision brev = bundle.getBundleRevision(); XEnvironment env = depUnit.getAttachment(OSGiConstants.ENVIRONMENT_KEY); XResolver resolver = depUnit.getAttachment(OSGiConstants.RESOLVER_KEY); BundleManager bundleManager = depUnit.getAttachment(OSGiConstants.BUNDLE_MANAGER_KEY); Set<XBundleRevision> mandatoryResources = Collections.singleton(brev); Set<XBundleRevision> optionalResources = getOptionalResources(bundleManager, brev); XResolveContext context = resolver.createResolveContext(env, mandatoryResources, optionalResources); try { LOGGER.debugf("Resolve: %s", depUnit.getName()); resolver.resolveAndApply(context); depUnit.putAttachment(Attachments.BUNDLE_STATE_KEY, BundleState.RESOLVED); } catch (ResolutionException ex) { LOGGER.warnCannotResolve(ex.getUnresolvedRequirements()); } }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); final Deployment deployment = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); if (deployment == null) return; try { BundleManager bundleManager = depUnit.getAttachment(OSGiConstants.BUNDLE_MANAGER_KEY); BundleContext syscontext = depUnit.getAttachment(OSGiConstants.SYSTEM_CONTEXT_KEY); if (deploymentTracker.hasDeploymentName(depUnit.getName())) { restoreStorageState(phaseContext, deployment); } XBundleRevision brev = bundleManager.createBundleRevision(syscontext, deployment, phaseContext.getServiceTarget()); depUnit.putAttachment(OSGiConstants.BUNDLE_REVISION_KEY, brev); depUnit.putAttachment(BUNDLE_STATE_KEY, BundleState.INSTALLED); } catch (BundleException ex) { throw new DeploymentUnitProcessingException(ex); } }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { // Check whether this is an OSGi deployment or whether it wants to have an OSGi type injected DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); Deployment deployment = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); boolean hasInjectionPoint = hasValidInjectionPoint(depUnit); if (deployment == null && hasInjectionPoint == false) return; // Activate the framework if not done so already FrameworkActivator.activate(depUnit.getAttachment(Attachments.SERVICE_VERIFICATION_HANDLER)); // Setup a dependency on the the next phase. Persistent bundles have a dependency on the bootstrap bundles if (deploymentTracker.isComplete()) { phaseContext.addDeploymentDependency(Services.FRAMEWORK_ACTIVE, AttachmentKey.create(Object.class)); } else { phaseContext.addDeploymentDependency(MODULE_REGISTRATION_COMPLETE, AttachmentKey.create(Object.class)); } // Make these services available for a bundle deployment only phaseContext.addDeploymentDependency(Services.FRAMEWORK_CREATE, OSGiConstants.SYSTEM_CONTEXT_KEY); phaseContext.addDeploymentDependency(Services.BUNDLE_MANAGER, OSGiConstants.BUNDLE_MANAGER_KEY); phaseContext.addDeploymentDependency(Services.RESOLVER, OSGiConstants.RESOLVER_KEY); phaseContext.addDeploymentDependency(Services.ENVIRONMENT, OSGiConstants.ENVIRONMENT_KEY); }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { ArquillianConfig arqConfig = phaseContext.getDeploymentUnit().getAttachment(ArquillianConfig.KEY); if (arqConfig == null) return; ServiceTarget serviceTarget = phaseContext.getServiceTarget(); DeploymentTrackerService tracker = new DeploymentTrackerService(arqConfig); ServiceBuilder<Object> serviceBuilder = serviceTarget.addService(SERVICE_NAME_BASE.append(phaseContext.getDeploymentUnit().getName()), tracker); serviceBuilder.addDependency(ArquillianService.SERVICE_NAME, ArquillianService.class, tracker.injectedArquillianService); // If this is an OSGi deployment, add a dependency on the associated service Deployment osgiDeployment = OSGiDeploymentAttachment.getDeployment(phaseContext.getDeploymentUnit()); if (osgiDeployment != null) { ServiceName serviceName = BundleInstallService.getServiceName(phaseContext.getDeploymentUnit().getName()); serviceBuilder.addDependency(serviceName); osgiDeployment.setAutoStart(false); } serviceBuilder.install(); }
@Override public void undeploy(final DeploymentUnit depUnit) { XBundleRevision brev = depUnit.getAttachment(OSGiConstants.BUNDLE_REVISION_KEY); if (brev == null) return; XBundle bundle = brev.getBundle(); BundleManager bundleManager = depUnit.getAttachment(OSGiConstants.BUNDLE_MANAGER_KEY); if (uninstallRequired(depUnit, brev)) { try { int options = getUninstallOptions(bundleManager); bundleManager.uninstallBundle(bundle, options); } catch (BundleException ex) { Deployment dep = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); LOGGER.errorFailedToUninstallDeployment(ex, dep); } } else { BundleWiring wiring = brev.getWiringSupport().getWiring(false); if (wiring == null || !wiring.isInUse()) { bundleManager.removeRevision(brev, 0); } } }
@Override protected void execute(DeploymentProcessorTarget processorTarget) { processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_OSGI_MANIFEST, new OSGiManifestStructureProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_OSGI_PROPERTIES, new OSGiXServiceParseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_OSGI_METADATA, new OSGiMetaDataStructureProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.STRUCTURE, Phase.STRUCTURE_BUNDLE_SUB_DEPLOYMENT, new BundleSubDeploymentMarkingProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_BUNDLE_INFO, new OSGiBundleInfoParseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_DEPLOYMENT, new BundleDeploymentProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_COMPONENTS, new OSGiComponentParseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.PARSE, Phase.PARSE_OSGI_SUBSYSTEM_ACTIVATOR, new FrameworkActivateProcessor(deploymentTracker)); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.REGISTER, Phase.REGISTER_BUNDLE_INSTALL, new BundleInstallProcessor(deploymentTracker)); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.DEPENDENCIES, Phase.DEPENDENCIES_BUNDLE, new BundleDependenciesProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.CONFIGURE_MODULE, Phase.CONFIGURE_RESOLVE_BUNDLE, new BundleResolveProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.CONFIGURE_MODULE, Phase.CONFIGURE_DEFERRED_PHASE, new DeferredPhaseProcessor()); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_RESOLVER_MODULE, new ModuleRegisterProcessor(registrationTracker)); processorTarget.addDeploymentProcessor(OSGiExtension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_BUNDLE_ACTIVATE, new BundleActivateProcessor()); } }, OperationContext.Stage.RUNTIME);
private boolean hasValidInjectionPoint(DeploymentUnit depUnit) { return hasInjectionPoint(depUnit, "javax.inject.Inject") || hasInjectionPoint(depUnit, "javax.annotation.Resource"); }
private AnnotationInstance getAnnotation(DeploymentUnit depUnit, String className) { List<AnnotationInstance> annotations = getAnnotations(depUnit, className); return annotations.size() == 1 ? annotations.get(0) : null; }
private boolean allowAdditionalModuleDependencies(final DeploymentUnit depUnit) { boolean isWar = DeploymentTypeMarker.isType(DeploymentType.WAR, depUnit); boolean isEjb = EjbDeploymentMarker.isEjbDeployment(depUnit); boolean isCDI = getAnnotation(depUnit, ManagedBean.class.getName()) != null; boolean isJPA = JPADeploymentMarker.isJPADeployment(depUnit); return isWar || isEjb || isCDI || isJPA; }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); Deployment deployment = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); XBundleRevision brev = depUnit.getAttachment(OSGiConstants.BUNDLE_REVISION_KEY); if (brev == null || !deployment.isAutoStart() || brev.getBundle().isResolved()) return; resolveBundle(phaseContext, depUnit, brev.getBundle()); }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); XBundleRevision brev = depUnit.getAttachment(OSGiConstants.BUNDLE_REVISION_KEY); if (brev == null || brev.isFragment()) return; ServiceController<XBundle> controller = BundleActivateService.addService(phaseContext.getServiceTarget(), depUnit, brev.getBundle()); phaseContext.addDependency(controller.getName(), AttachmentKey.create(XBundle.class)); }
private void resolveBundle(DeploymentPhaseContext phaseContext, DeploymentUnit depUnit, XBundle bundle) { XBundleRevision brev = bundle.getBundleRevision(); XEnvironment env = depUnit.getAttachment(OSGiConstants.ENVIRONMENT_KEY); XResolver resolver = depUnit.getAttachment(OSGiConstants.RESOLVER_KEY); BundleManager bundleManager = depUnit.getAttachment(OSGiConstants.BUNDLE_MANAGER_KEY); Set<XBundleRevision> mandatoryResources = Collections.singleton(brev); Set<XBundleRevision> optionalResources = getOptionalResources(bundleManager, brev); XResolveContext context = resolver.createResolveContext(env, mandatoryResources, optionalResources); try { LOGGER.debugf("Resolve: %s", depUnit.getName()); resolver.resolveAndApply(context); depUnit.putAttachment(Attachments.BUNDLE_STATE_KEY, BundleState.RESOLVED); } catch (ResolutionException ex) { LOGGER.warnCannotResolve(ex.getUnresolvedRequirements()); } }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); final Deployment deployment = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); if (deployment == null) return; ServiceName serviceName; try { final BundleManager bundleManager = depUnit.getAttachment(OSGiConstants.BUNDLE_MANAGER_KEY); if (deploymentTracker.hasDeploymentName(depUnit.getName())) { restoreStorageState(phaseContext, deployment); } serviceName = bundleManager.installBundle(deployment, phaseContext.getServiceTarget(), null); } catch (BundleException ex) { throw new DeploymentUnitProcessingException(ex); } // Add a dependency on the next phase for this bundle to be installed phaseContext.addDeploymentDependency(serviceName, OSGiConstants.BUNDLE_KEY); depUnit.putAttachment(BUNDLE_STATE_KEY, BundleState.INSTALLED); depUnit.putAttachment(BUNDLE_INSTALL_SERVICE, serviceName); }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { // Check whether this is an OSGi deployment or whether it wants to have an OSGi type injected DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); Deployment deployment = depUnit.getAttachment(OSGiConstants.DEPLOYMENT_KEY); boolean hasInjectionPoint = hasValidInjectionPoint(depUnit); if (deployment == null && hasInjectionPoint == false) return; // Activate the framework if not done so already FrameworkActivator.activate(depUnit.getAttachment(Attachments.SERVICE_VERIFICATION_HANDLER)); // Setup a dependency on the the next phase. Persistent bundles have a dependency on the bootstrap bundles if (deploymentTracker.isComplete()) { phaseContext.addDeploymentDependency(Services.FRAMEWORK_ACTIVE, AttachmentKey.create(Object.class)); } else { phaseContext.addDeploymentDependency(MODULE_REGISTRATION_COMPLETE, AttachmentKey.create(Object.class)); phaseContext.addDeploymentDependency(Services.FRAMEWORK_CREATE, OSGiConstants.SYSTEM_CONTEXT_KEY); } // Make these services available for a bundle deployment only phaseContext.addDeploymentDependency(Services.BUNDLE_MANAGER, OSGiConstants.BUNDLE_MANAGER_KEY); phaseContext.addDeploymentDependency(Services.RESOLVER, OSGiConstants.RESOLVER_KEY); phaseContext.addDeploymentDependency(Services.ENVIRONMENT, OSGiConstants.ENVIRONMENT_KEY); }