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 2009/03/16 23:29:49 UTC
svn commit: r755028 - in
/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer:
DeployedAssembly.java impl/AbstractInstaller.java impl/Deployer.java
impl/ServiceAssemblyInstaller.java
Author: gnodet
Date: Mon Mar 16 22:29:49 2009
New Revision: 755028
URL: http://svn.apache.org/viewvc?rev=755028&view=rev
Log:
SMX4NMR-130: Lifecycle issues when using OSGi package service assemblies
Modified:
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AbstractInstaller.java
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyInstaller.java
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java?rev=755028&r1=755027&r2=755028&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/DeployedAssembly.java Mon Mar 16 22:29:49 2009
@@ -26,8 +26,8 @@
String getName();
- void deploy();
-
Map<String, String> getServiceUnits();
+ void undeploy(boolean restart);
+
}
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AbstractInstaller.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AbstractInstaller.java?rev=755028&r1=755027&r2=755028&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AbstractInstaller.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/AbstractInstaller.java Mon Mar 16 22:29:49 2009
@@ -88,7 +88,7 @@
long lastInstall = prefs.getLong(LAST_INSTALL, 0);
isFirstInstall = lastInstall == 0;
isModified = lastInstall == 0 || getBundle().getLastModified() > lastInstall;
- if (isModified) {
+ if (isModified && installRoot != null) {
extractBundle(installRoot, getBundle(), "/");
lastInstall = getBundle().getLastModified();
prefs.put(AbstractLifecycleJbiArtifact.STATE, isAutoStart()
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java?rev=755028&r1=755027&r2=755028&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/Deployer.java Mon Mar 16 22:29:49 2009
@@ -101,6 +101,8 @@
private final Set<AbstractInstaller> pendingInstallers = new HashSet<AbstractInstaller>();
+ private final Set<ServiceAssemblyImpl> pendingAssemblies = new HashSet<ServiceAssemblyImpl>();
+
private File jbiRootDir;
private PreferencesService preferencesService;
@@ -339,7 +341,7 @@
installer = new ComponentInstaller(this, descriptor, null, true);
} else if (descriptor.getServiceAssembly() != null) {
LOGGER.info("Deploying bundle '" + OsgiStringUtils.nullSafeNameAndSymName(bundle) + "' as a JBI service assembly");
- installer = new ServiceAssemblyInstaller(this, descriptor, null, true);
+ installer = new ServiceAssemblyInstaller(this, descriptor, (File) null, true);
} else {
throw new IllegalStateException("Unrecognized JBI descriptor: " + url);
}
@@ -478,9 +480,13 @@
if (installer != null) {
try {
installer.stop(true);
- unregisterServiceAssembly(sa);
pendingAssemblies.remove(sa);
- pendingInstallers.add(installer);
+ if (installer.getDeployedAssembly() == null) {
+ unregisterServiceAssembly(sa);
+ pendingInstallers.add(installer);
+ } else {
+ installers.remove(bundle);
+ }
} catch (Exception e) {
LOGGER.warn("Error uninstalling service assembly", e);
}
@@ -500,11 +506,11 @@
protected void unregisterServiceAssembly(ServiceAssemblyImpl assembly) {
if (assembly != null) {
serviceAssemblies.remove(assembly.getName());
+ pendingAssemblies.remove(assembly);
unregisterServices(assembly.getBundle());
for (ServiceUnitImpl su : assembly.getServiceUnitsList()) {
su.getComponentImpl().removeServiceUnit(su);
}
- pendingAssemblies.remove(assembly);
}
}
@@ -554,8 +560,6 @@
}
}
- private Set<ServiceAssemblyImpl> pendingAssemblies = new HashSet<ServiceAssemblyImpl>();
-
protected void checkPendingAssemblies() {
List<ServiceAssemblyImpl> sas = new ArrayList<ServiceAssemblyImpl>(pendingAssemblies);
pendingAssemblies.clear();
@@ -665,21 +669,32 @@
public void registerDeployedServiceAssembly(ServiceReference reference, DeployedAssembly assembly) {
try {
- assembly.deploy();
ServiceAssemblyDesc desc = new ServiceAssemblyDesc();
desc.setIdentification(new Identification());
desc.getIdentification().setName(assembly.getName());
- List<ServiceUnitImpl> sus = new ArrayList<ServiceUnitImpl>();
+ List<ServiceUnitDesc> sus = new ArrayList<ServiceUnitDesc>();
for (Map.Entry<String, String> unit : assembly.getServiceUnits().entrySet()) {
ServiceUnitDesc suDesc = new ServiceUnitDesc();
suDesc.setIdentification(new Identification());
suDesc.getIdentification().setName(unit.getKey());
suDesc.setTarget(new Target());
suDesc.getTarget().setComponentName(unit.getValue());
- ServiceUnitImpl su = createServiceUnit(suDesc, null, components.get(unit.getValue()));
- sus.add(su);
+ sus.add(suDesc);
+ }
+ desc.setServiceUnits(sus.toArray(new ServiceUnitDesc[sus.size()]));
+ Descriptor descriptor = new Descriptor();
+ descriptor.setServiceAssembly(desc);
+
+ ServiceAssemblyInstaller installer = new ServiceAssemblyInstaller(this, descriptor, assembly, autoStart);
+ installer.setBundle(reference.getBundle());
+ try {
+ installer.init();
+ installer.install();
+ installers.put(installer.getBundle(), installer);
+ } catch (PendingException e) {
+ pendingInstallers.add(installer);
+ LOGGER.warn("Requirements not met for JBI artifact in bundle " + OsgiStringUtils.nullSafeNameAndSymName(reference.getBundle()) + ". Installation pending. " + e);
}
- registerServiceAssembly(reference.getBundle(), desc, sus);
bundles.add(reference.getBundle());
} catch (Exception e) {
LOGGER.error("Error registering deployed service assembly", e);
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyInstaller.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyInstaller.java?rev=755028&r1=755027&r2=755028&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyInstaller.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ServiceAssemblyInstaller.java Mon Mar 16 22:29:49 2009
@@ -27,6 +27,7 @@
import org.apache.servicemix.jbi.deployer.Component;
import org.apache.servicemix.jbi.deployer.ServiceAssembly;
+import org.apache.servicemix.jbi.deployer.DeployedAssembly;
import org.apache.servicemix.jbi.deployer.artifacts.ComponentImpl;
import org.apache.servicemix.jbi.deployer.artifacts.ServiceAssemblyImpl;
import org.apache.servicemix.jbi.deployer.artifacts.ServiceUnitImpl;
@@ -40,16 +41,27 @@
public class ServiceAssemblyInstaller extends AbstractInstaller {
+ private DeployedAssembly deployedAssembly;
+
public ServiceAssemblyInstaller(Deployer deployer, Descriptor descriptor, File jbiArtifact, boolean autoStart) {
super(deployer, descriptor, jbiArtifact, autoStart);
this.installRoot = new File(System.getProperty("servicemix.base"), "data/jbi/" + getName() + "/install");
this.installRoot.mkdirs();
}
+ public ServiceAssemblyInstaller(Deployer deployer, Descriptor descriptor, DeployedAssembly deployedAssembly, boolean autoStart) {
+ super(deployer, descriptor, null, autoStart);
+ this.deployedAssembly = deployedAssembly;
+ }
+
public String getName() {
return descriptor.getServiceAssembly().getIdentification().getName();
}
+ public DeployedAssembly getDeployedAssembly() {
+ return deployedAssembly;
+ }
+
public void init() throws Exception {
// Check requirements
for (ServiceUnitDesc sud : descriptor.getServiceAssembly().getServiceUnits()) {
@@ -68,7 +80,19 @@
public ObjectName install() throws JBIException {
try {
- List<ServiceUnitImpl> sus = deploySUs();
+ List<ServiceUnitImpl> sus;
+ if (deployedAssembly == null) {
+ sus = deploySUs();
+ } else {
+ sus = new ArrayList<ServiceUnitImpl>();
+ for (ServiceUnitDesc sud : descriptor.getServiceAssembly().getServiceUnits()) {
+ String componentName = sud.getTarget().getComponentName();
+ ComponentImpl component = deployer.getComponent(componentName);
+ // Create service unit object
+ ServiceUnitImpl su = deployer.createServiceUnit(sud, null, component);
+ sus.add(su);
+ }
+ }
postInstall();
ServiceAssembly sa = deployer.registerServiceAssembly(bundle, descriptor.getServiceAssembly(), sus);
return deployer.getNamingStrategy().getObjectName(sa);
@@ -94,9 +118,13 @@
if (LifeCycleMBean.STOPPED.equals(assembly.getCurrentState())) {
assembly.shutDown(false, force);
}
+ }
+ if (deployedAssembly == null) {
for (ServiceUnitImpl su : assembly.getServiceUnitsList()) {
su.getComponentImpl().removeServiceUnit(su);
}
+ } else {
+ deployedAssembly.undeploy(bundle.getState() == Bundle.ACTIVE);
}
}