/*
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.switchyard.as7.extension.deployment;
import java.util.List;
import javax.enterprise.inject.spi.Extension;
import org.apache.log4j.Logger;
import org.jboss.as.server.deployment.Attachments;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
import org.jboss.as.server.deployment.DeploymentUnit;
import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
import org.jboss.as.server.deployment.DeploymentUnitProcessor;
import org.jboss.as.weld.WeldDeploymentMarker;
import org.jboss.as.weld.deployment.WeldAttachments;
import org.jboss.as.weld.deployment.WeldPortableExtensions;
import org.jboss.modules.Module;
import org.jboss.weld.bootstrap.spi.Metadata;
import org.switchyard.as7.extension.ExtensionMessages;
import org.switchyard.as7.extension.SwitchYardDeploymentMarker;
/**
* Deployment processor that installs the SwitchYard CDI extension.
*
* @author Magesh Kumar B <mageshbk@jboss.com> (C) 2011 Red Hat Inc.
*/
public class SwitchYardCdiIntegrationProcessor implements DeploymentUnitProcessor {
private static final String SWITCHYARD_CDI_EXTENSION = "org.switchyard.component.bean.SwitchYardCDIServiceDiscovery";
private static final String DELTASPIKE_CDI_EXTENSION = "org.apache.deltaspike.core.api.provider.BeanManagerProvider";
private static Logger _logger = Logger.getLogger(SwitchYardCdiIntegrationProcessor.class);
/* (non-Javadoc)
* @see org.jboss.as.server.deployment.DeploymentUnitProcessor#deploy(org.jboss.as.server.deployment.DeploymentPhaseContext)
*/
@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
if (!SwitchYardDeploymentMarker.isSwitchYardDeployment(deploymentUnit)) {
return;
}
if (WeldDeploymentMarker.isPartOfWeldDeployment(deploymentUnit)) {
// Add the Weld portable extension
final DeploymentUnit parent = deploymentUnit.getParent() == null ? deploymentUnit : deploymentUnit.getParent();
synchronized (parent) {
checkExtension(SWITCHYARD_CDI_EXTENSION, deploymentUnit, parent);
checkExtension(DELTASPIKE_CDI_EXTENSION, deploymentUnit, parent);
}
} else {
_logger.debug("SwitchYard Application for deployment unit '" + deploymentUnit.getName() + "' does not appear to contain CDI Beans "
+ "(no META-INF/beans.xml file in unit). Not attaching SwitchYard CDI Discovery Extension to deployment.");
}
}
private void checkExtension(final String extensionName, DeploymentUnit deploymentUnit, DeploymentUnit parent) throws DeploymentUnitProcessingException {
final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
Class<?> extensionClass = null;
try {
extensionClass = module.getClassLoader().loadClass(extensionName);
} catch (ClassNotFoundException cnfe) {
throw new DeploymentUnitProcessingException(cnfe);
}
if (extensionClass != null) {
WeldPortableExtensions extensions = WeldPortableExtensions.getPortableExtensions(deploymentUnit);
extensions.tryRegisterExtension(extensionClass, deploymentUnit);
} else {
throw ExtensionMessages.MESSAGES.extensionNotfound(extensionName);
}
}
/* (non-Javadoc)
* @see org.jboss.as.server.deployment.DeploymentUnitProcessor#undeploy(org.jboss.as.server.deployment.DeploymentUnit)
*/
@Override
public void undeploy(DeploymentUnit context) {
}
}