package org.servicemix.components.servicemix;
import org.servicemix.jbi.container.JBIContainer;
import org.servicemix.jbi.container.SpringServiceUnitContainer;
import org.servicemix.jbi.framework.ComponentContextImpl;
import org.servicemix.jbi.management.BaseLifeCycle;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import javax.jbi.JBIException;
import javax.jbi.component.Component;
import javax.jbi.component.ComponentContext;
import javax.jbi.component.ComponentLifeCycle;
import javax.jbi.component.ServiceUnitManager;
import javax.jbi.management.DeploymentException;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.management.ObjectName;
import java.util.Map;
/**
* @version $Revision$
*/
public class ServiceMixComponent extends BaseLifeCycle implements ComponentLifeCycle, Component, ServiceUnitManager {
private ComponentContext context;
public String getDescription() {
return "ServiceMix Component";
}
// /////////////////////////////////////////////////////////////////
// ComponentLifeCycle implementation
// /////////////////////////////////////////////////////////////////
public void init(ComponentContext context) throws JBIException {
System.out.println("ServiceMixComponent: init");
this.context = context;
}
public ObjectName getExtensionMBeanName() {
System.out.println("ServiceMixComponent: getExtensionMBeanName");
return null;
}
// /////////////////////////////////////////////////////////////////
// Component implementation
// /////////////////////////////////////////////////////////////////
public ComponentLifeCycle getLifeCycle() {
return this;
}
public ServiceUnitManager getServiceUnitManager() {
return this;
}
public Document getServiceDescription(ServiceEndpoint endpoint) {
System.out.println("ServiceMixComponent: getServiceDescription");
// TODO Auto-generated method stub
return null;
}
public boolean isExchangeWithConsumerOkay(ServiceEndpoint endpoint, MessageExchange exchange) {
System.out.println("ServiceMixComponent: isExchangeWithConsumerOkay");
return false;
}
public boolean isExchangeWithProviderOkay(ServiceEndpoint endpoint, MessageExchange exchange) {
System.out.println("ServiceMixComponent: isExchangeWithProviderOkay");
return false;
}
public ServiceEndpoint resolveEndpointReference(DocumentFragment epr) {
System.out.println("ServiceMixComponent: resolveEndpointReference");
return null;
}
// /////////////////////////////////////////////////////////////////
// ServiceUnitManager implementation
// /////////////////////////////////////////////////////////////////
Map serviceUnitRegistry = new edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap();
public String deploy(String serviceUnitName, String serviceUnitRootPath) throws DeploymentException {
System.out.println("ServiceMixComponent: deploy");
return null;
}
public void init(String serviceUnitName, String serviceUnitRootPath) throws DeploymentException {
System.out.println("ServiceMixComponent: init: " + serviceUnitName + " path: " + serviceUnitRootPath);
FileSystemXmlApplicationContext springContext = new FileSystemXmlApplicationContext("file:"+ serviceUnitRootPath +"/servicemix.xml" );
SpringServiceUnitContainer ssuc = (SpringServiceUnitContainer) springContext.getBean("jbi");
ServiceMixServiceUnit suc = new ServiceMixServiceUnit(this, serviceUnitName, serviceUnitRootPath, springContext, ssuc);
serviceUnitRegistry.put(serviceUnitName, suc);
}
public void start(String serviceUnitName) throws DeploymentException {
System.out.println("ServiceMixComponent: start: " + serviceUnitName);
ServiceMixServiceUnit unit = (ServiceMixServiceUnit) serviceUnitRegistry.get(serviceUnitName);
if( unit == null )
throw new DeploymentException("Service Unit not registered: "+serviceUnitName);
try {
unit.start();
} catch (Exception e) {
throw new DeploymentException(e.getMessage(), e);
}
}
public void stop(String serviceUnitName) throws DeploymentException {
System.out.println("ServiceMixComponent: stop: " + serviceUnitName);
ServiceMixServiceUnit unit = (ServiceMixServiceUnit) serviceUnitRegistry.get(serviceUnitName);
if( unit == null )
throw new DeploymentException("Service Unit not registered: "+serviceUnitName);
try {
unit.stop();
} catch (JBIException e) {
throw new DeploymentException(e.getMessage(), e);
}
}
public void shutDown(String serviceUnitName) throws DeploymentException {
System.out.println("ServiceMixComponent: shutDown: " + serviceUnitName);
ServiceMixServiceUnit unit = (ServiceMixServiceUnit) serviceUnitRegistry.remove(serviceUnitName);
if( unit == null )
throw new DeploymentException("Service Unit not registered: "+serviceUnitName);
unit.shutdown();
}
public String undeploy(String serviceUnitName, String serviceUnitRootPath) throws DeploymentException {
System.out.println("ServiceMixComponent: undeploy: " + serviceUnitName);
ServiceMixServiceUnit unit = (ServiceMixServiceUnit) serviceUnitRegistry.remove(serviceUnitName);
if( unit == null )
throw new DeploymentException("Service Unit not registered: "+serviceUnitName);
unit.undeploy();
return null;
}
public ComponentContext getContext() {
return context;
}
public void setContext(ComponentContext context) {
this.context = context;
}
public JBIContainer getContainer() {
if( context instanceof ComponentContextImpl ) {
return ((ComponentContextImpl)context).getContainer();
}
return null;
}
}