You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/11/22 09:38:21 UTC
svn commit: r597333 - in
/servicemix/branches/servicemix-3.2/platforms/geronimo:
deployer-service/src/main/java/org/apache/servicemix/geronimo/
servicemix-service/src/main/java/org/apache/servicemix/geronimo/
Author: gnodet
Date: Thu Nov 22 00:38:19 2007
New Revision: 597333
URL: http://svn.apache.org/viewvc?rev=597333&view=rev
Log:
SM-1131: Redeployment fails for Geronimo integration
Added:
servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceUnitReference.java
- copied unchanged from r597332, servicemix/trunk/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceUnitReference.java
Modified:
servicemix/branches/servicemix-3.2/platforms/geronimo/deployer-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixConfigBuilder.java
servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Component.java
servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Container.java
servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceAssembly.java
servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixGBean.java
Modified: servicemix/branches/servicemix-3.2/platforms/geronimo/deployer-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixConfigBuilder.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-3.2/platforms/geronimo/deployer-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixConfigBuilder.java?rev=597333&r1=597332&r2=597333&view=diff
==============================================================================
--- servicemix/branches/servicemix-3.2/platforms/geronimo/deployer-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixConfigBuilder.java (original)
+++ servicemix/branches/servicemix-3.2/platforms/geronimo/deployer-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixConfigBuilder.java Thu Nov 22 00:38:19 2007
@@ -23,6 +23,8 @@
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.jar.JarFile;
@@ -335,6 +337,8 @@
unzip(context, module, new URI("install/"));
// Unzip SUs
ServiceUnit[] sus = descriptor.getServiceAssembly().getServiceUnits();
+ List<ServiceUnitReference> serviceUnitReferences = new LinkedList<ServiceUnitReference>();
+
for (int i = 0; i < sus.length; i++) {
String name = sus[i].getIdentification().getName();
String zip = sus[i].getTarget().getArtifactsZip();
@@ -355,6 +359,7 @@
ServiceUnitManager serviceUnitManager = jbiServiceUnit.getServiceUnitManager();
File installDir = new File(context.getBaseDir(), installUri.toString());
String deploy = serviceUnitManager.deploy(name, installDir.getAbsolutePath());
+ serviceUnitReferences.add(new ServiceUnitReference(sl, name, installDir.getAbsolutePath()));
log.debug(deploy);
}
// Create the JBI deployment managed object
@@ -364,6 +369,7 @@
AbstractName name = new AbstractName(environment.getConfigId(), props);
GBeanData gbeanData = new GBeanData(name, ServiceAssembly.GBEAN_INFO);
gbeanData.setAttribute("name", descriptor.getServiceAssembly().getIdentification().getName());
+ gbeanData.setAttribute("serviceUnitReferences", serviceUnitReferences);
gbeanData.setReferencePattern("container", containerName);
for (int i = 0; i < sus.length; i++) {
String comp = sus[i].getTarget().getComponentName();
@@ -382,13 +388,29 @@
* @throws GBeanNotFoundException if the ServiceUnit cannot be found
*/
private Component getAssociatedJbiServiceUnit(String compName, Artifact artifactName) throws GBeanNotFoundException {
- Properties props = new Properties();
+ org.apache.servicemix.geronimo.Component serviceUnit = getComponentGBean(
+ compName, artifactName);
+ Component jbiServiceUnit = serviceUnit.getComponent();
+ return jbiServiceUnit;
+ }
+
+ /**
+ * Returns the sm.ger.Component with the given name
+ *
+ * @param compName
+ * @param artifactName
+ * @return
+ * @throws GBeanNotFoundException
+ */
+ private org.apache.servicemix.geronimo.Component getComponentGBean(
+ String compName, Artifact artifactName)
+ throws GBeanNotFoundException {
+ Properties props = new Properties();
props.put("jbiType", "JBIComponent");
props.put("name", compName);
- org.apache.servicemix.geronimo.Component serviceUnit =
+ org.apache.servicemix.geronimo.Component component =
(org.apache.servicemix.geronimo.Component) kernel.getGBean(new AbstractName(artifactName, props));
- Component jbiServiceUnit = serviceUnit.getComponent();
- return jbiServiceUnit;
+ return component;
}
protected void buildSharedLibrary(Descriptor descriptor, DeploymentContext context, JarFile module)
Modified: servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Component.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Component.java?rev=597333&r1=597332&r2=597333&view=diff
==============================================================================
--- servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Component.java (original)
+++ servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Component.java Thu Nov 22 00:38:19 2007
@@ -65,27 +65,28 @@
this.installDir = rootDir.resolve("install/");
this.workDir = rootDir.resolve("workspace/");
this.classLoader = classLoader;
- log.info("Created JBI component: " + name);
+ log.debug("Created JBI component: " + name);
}
public void doStart() throws Exception {
- log.info("doStart called for JBI component: " + name);
+ log.debug("doStart called for JBI component: " + name);
try {
component = (javax.jbi.component.Component) classLoader.loadClass(className).newInstance();
container.register(this);
} catch (ClassNotFoundException e) {
log.error(classLoader);
}
+ log.info("Started servicemix JBI component: " + name);
}
public void doStop() throws Exception {
- log.info("doStop called for JBI component: " + name);
+ log.debug("doStop called for JBI component: " + name);
container.unregister(this);
component = null;
}
public void doFail() {
- log.info("doFail called for JBI component: " + name);
+ log.debug("doFail called for JBI component: " + name);
component = null;
}
Modified: servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Container.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Container.java?rev=597333&r1=597332&r2=597333&view=diff
==============================================================================
--- servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Container.java (original)
+++ servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/Container.java Thu Nov 22 00:38:19 2007
@@ -16,6 +16,7 @@
*/
package org.apache.servicemix.geronimo;
+import org.apache.servicemix.jbi.container.JBIContainer;
public interface Container {
@@ -27,4 +28,5 @@
public void unregister(ServiceAssembly assembly) throws Exception;
+ public JBIContainer getJBIContainer();
}
Modified: servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceAssembly.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceAssembly.java?rev=597333&r1=597332&r2=597333&view=diff
==============================================================================
--- servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceAssembly.java (original)
+++ servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceAssembly.java Thu Nov 22 00:38:19 2007
@@ -19,12 +19,20 @@
import java.io.File;
import java.net.URI;
import java.net.URL;
+import java.util.List;
+import java.util.Properties;
+
+import javax.jbi.component.ServiceUnitManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gbean.AbstractName;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.kernel.GBeanNotFoundException;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.repository.Artifact;
import org.apache.servicemix.jbi.deployment.Descriptor;
import org.apache.servicemix.jbi.deployment.DescriptorFactory;
@@ -33,47 +41,85 @@
private static final Log log = LogFactory.getLog(ServiceAssembly.class);
private String name;
- private Container container;
- private URI rootDir;
+ private Container container;
+ private URI rootDir;
+ private List<ServiceUnitReference> serviceUnitReferences;
+ private Kernel kernel;
public ServiceAssembly(String name,
Container container,
- URL configurationBaseUrl) throws Exception {
+ URL configurationBaseUrl,
+ List<ServiceUnitReference> serviceUnitReferences,
+ Kernel kernel) throws Exception {
this.name = name;
this.container = container;
+ this.serviceUnitReferences = serviceUnitReferences;
+ this.kernel = kernel;
//TODO is there a simpler way to do this?
if (configurationBaseUrl.getProtocol().equalsIgnoreCase("file")) {
- this.rootDir = new URI("file", configurationBaseUrl.getPath(), null);
+ this.rootDir = new URI("file", configurationBaseUrl.getPath(), null);
} else {
- this.rootDir = URI.create(configurationBaseUrl.toString());
+ this.rootDir = URI.create(configurationBaseUrl.toString());
}
log.info("Created JBI service assembly: " + name);
}
- public void doStart() throws Exception {
+ public void doStart() throws Exception {
log.info("doStart called for JBI service assembly: " + name);
container.register(this);
- }
+ }
- public void doStop() throws Exception {
+ public void doStop() throws Exception {
log.info("doStop called for JBI service assembly: " + name);
container.unregister(this);
- }
+ }
- public void doFail() {
+ public void doFail() {
log.info("doFail called for JBI service assembly: " + name);
- }
+ }
- public URI getRootDir() {
- return rootDir;
- }
+ public URI getRootDir() {
+ return rootDir;
+ }
- public String getName() {
- return name;
- }
+ public String getName() {
+ return name;
+ }
- public Descriptor getDescriptor() throws Exception {
- return DescriptorFactory.buildDescriptor(new File(new File(rootDir), "install"));
+ public void undeploySus() {
+ for (ServiceUnitReference reference: serviceUnitReferences) {
+ undeploy(reference);
+ }
+ }
+
+ private void undeploy(ServiceUnitReference reference) {
+ try {
+ Component componentGBean = getComponentGBean(
+ reference.getAssocialtedServiceUnitName().getArtifactId(),
+ reference.getAssocialtedServiceUnitName());
+ ServiceUnitManager serviceUnitManager =
+ componentGBean.getComponent().getServiceUnitManager();
+ serviceUnitManager.undeploy(reference.getServiceUnitName(),
+ reference.getServiceUnitPath());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private org.apache.servicemix.geronimo.Component getComponentGBean(
+ String compName, Artifact artifactName)
+ throws GBeanNotFoundException {
+ Properties props = new Properties();
+ props.put("jbiType", "JBIComponent");
+ props.put("name", compName);
+ org.apache.servicemix.geronimo.Component serviceUnit =
+ (org.apache.servicemix.geronimo.Component)
+ kernel.getGBean(new AbstractName(artifactName, props));
+ return serviceUnit;
+ }
+
+ public Descriptor getDescriptor() throws Exception {
+ return DescriptorFactory.buildDescriptor(new File(new File(rootDir), "install"));
}
public static final GBeanInfo GBEAN_INFO;
@@ -81,9 +127,11 @@
static {
GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("JBIServiceAssembly", ServiceAssembly.class, "JBIServiceAssembly");
infoFactory.addAttribute("name", String.class, true);
+ infoFactory.addAttribute("kernel", Kernel.class, false);
+ infoFactory.addAttribute("serviceUnitReferences", List.class, true);
infoFactory.addReference("container", Container.class);
infoFactory.addAttribute("configurationBaseUrl", URL.class, true);
- infoFactory.setConstructor(new String[] {"name", "container", "configurationBaseUrl" });
+ infoFactory.setConstructor(new String[] {"name", "container", "configurationBaseUrl", "serviceUnitReferences" , "kernel"});
GBEAN_INFO = infoFactory.getBeanInfo();
}
Modified: servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixGBean.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixGBean.java?rev=597333&r1=597332&r2=597333&view=diff
==============================================================================
--- servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixGBean.java (original)
+++ servicemix/branches/servicemix-3.2/platforms/geronimo/servicemix-service/src/main/java/org/apache/servicemix/geronimo/ServiceMixGBean.java Thu Nov 22 00:38:19 2007
@@ -30,7 +30,6 @@
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.kernel.GBeanNotFoundException;
-import org.apache.geronimo.kernel.InternalKernelException;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.naming.java.RootContext;
import org.apache.servicemix.jbi.container.ComponentEnvironment;
@@ -69,9 +68,9 @@
}
public ServiceMixGBean(String name,
- String directory,
- AbstractNameQuery transactionManagerName,
- Kernel kernel) {
+ String directory,
+ AbstractNameQuery transactionManagerName,
+ Kernel kernel) {
this.name = name;
this.directory = directory;
this.transactionManagerName = transactionManagerName;
@@ -145,8 +144,10 @@
private JBIContainer createContainer() throws GBeanNotFoundException {
JBIContainer container = new JBIContainer();
+ container.setUseShutdownHook(false);
container.setName(name);
container.setRootDir(directory);
+ container.setUseMBeanServer(true);
TransactionManager tm = getTransactionManager();
container.setTransactionManager(tm);
container.setMonitorInstallationDirectory(false);
@@ -167,6 +168,15 @@
return tm;
}
+ /**
+ * Returns the JBIContainer
+ *
+ * @return JBIContainer
+ */
+ public JBIContainer getJBIContainer() {
+ return container;
+ }
+
public void register(Component component) throws Exception {
ComponentNameSpace cns = new ComponentNameSpace(container.getName(), component.getName());
ComponentContextImpl context = new ComponentContextImpl(container, cns);
@@ -177,44 +187,45 @@
context.setEnvironment(env);
container.activateComponent(null,
- component.getComponent(),
- component.getDescription(),
- context,
- component.getType().equals("binding-component"),
- component.getType().equals("service-engine"),
+ component.getComponent(),
+ component.getDescription(),
+ context,
+ component.getType().equals("binding-component"),
+ component.getType().equals("service-engine"),
null);
ComponentMBeanImpl cmb = container.getComponent(component.getName());
File stateFile = cmb.getContext().getEnvironment().getStateFile();
if (stateFile.isFile()) {
- cmb.setInitialRunningState();
+ cmb.setInitialRunningState();
} else {
- cmb.start();
+ cmb.start();
}
}
public void unregister(Component component) throws Exception {
- container.deactivateComponent(component.getName());
+ container.deactivateComponent(component.getName());
}
public void register(ServiceAssembly assembly) throws Exception {
- File rootDir = new File(assembly.getRootDir());
- ServiceAssemblyEnvironment env = new ServiceAssemblyEnvironment();
- env.setRootDir(rootDir);
- env.setInstallDir(new File(rootDir, "install"));
- env.setSusDir(new File(rootDir, "sus"));
- env.setStateFile(new File(rootDir, "state.xml"));
- ServiceAssemblyLifeCycle salc = container.getRegistry().registerServiceAssembly(assembly.getDescriptor().getServiceAssembly(), env);
- if (env.getStateFile().isFile()) {
- salc.restore();
- } else {
- salc.start();
- }
+ File rootDir = new File(assembly.getRootDir());
+ ServiceAssemblyEnvironment env = new ServiceAssemblyEnvironment();
+ env.setRootDir(rootDir);
+ env.setInstallDir(new File(rootDir, "install"));
+ env.setSusDir(new File(rootDir, "sus"));
+ env.setStateFile(new File(rootDir, "state.xml"));
+ ServiceAssemblyLifeCycle salc = container.getRegistry().registerServiceAssembly(assembly.getDescriptor().getServiceAssembly(), env);
+ if (env.getStateFile().isFile()) {
+ salc.restore();
+ } else {
+ salc.start();
+ }
}
public void unregister(ServiceAssembly assembly) throws Exception {
- ServiceAssemblyLifeCycle salc = container.getRegistry().getServiceAssembly(assembly.getName());
- salc.shutDown(false);
- container.getRegistry().unregisterServiceAssembly(assembly.getName());
+ ServiceAssemblyLifeCycle salc = container.getRegistry().getServiceAssembly(assembly.getName());
+ salc.shutDown(false);
+ assembly.undeploySus();
+ container.getRegistry().unregisterServiceAssembly(assembly.getName());
}
}