@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { // Check if we already have an OSGi deployment final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); Deployment deployment = OSGiDeploymentAttachment.getDeployment(deploymentUnit); ServiceRegistry serviceRegistry = phaseContext.getServiceRegistry(); String location = DeploymentHolderService.getLocation(serviceRegistry, deploymentUnit.getName()); VirtualFile virtualFile = deploymentUnit.getAttachment(Attachments.DEPLOYMENT_ROOT).getRoot(); // Check for attached BundleInfo BundleInfo info = BundleInfoAttachment.getBundleInfo(deploymentUnit); if (deployment == null && info != null) { deployment = DeploymentFactory.createDeployment(info); deployment.addAttachment(BundleInfo.class, info); OSGiDeploymentAttachment.attachDeployment(deploymentUnit, deployment); } // Check for attached OSGiMetaData OSGiMetaData metadata = OSGiMetaDataAttachment.getOSGiMetaData(deploymentUnit); if (deployment == null && metadata != null) { String symbolicName = metadata.getBundleSymbolicName(); Version version = metadata.getBundleVersion(); deployment = DeploymentFactory.createDeployment( AbstractVFS.adapt(virtualFile), location, symbolicName, version); deployment.addAttachment(OSGiMetaData.class, metadata); OSGiDeploymentAttachment.attachDeployment(deploymentUnit, deployment); } // Check for attached XModule XModule resModule = XModuleAttachment.getXModuleAttachment(deploymentUnit); if (deployment == null && resModule != null) { String symbolicName = resModule.getName(); Version version = resModule.getVersion(); deployment = DeploymentFactory.createDeployment( AbstractVFS.adapt(virtualFile), location, symbolicName, version); deployment.addAttachment(XModule.class, resModule); OSGiDeploymentAttachment.attachDeployment(deploymentUnit, deployment); } // Create the {@link OSGiDeploymentService} if (deployment != null) { // Prevent garbage collection of the MountHandle which will close the file MountHandle mount = deploymentUnit.getAttachment(Attachments.DEPLOYMENT_ROOT).getMountHandle(); deployment.addAttachment(MountHandle.class, mount); // Mark the bundle to start automatically deployment.setAutoStart(true); OSGiDeploymentService.addService(phaseContext); } }
@Override public void undeploy(final DeploymentUnit deploymentUnit) { OSGiDeploymentService.removeService(deploymentUnit); }