337846 Proposed fix to rescan watched repos before any artifact install or refresh
diff --git a/org.eclipse.virgo.kernel.deployer/src/main/java/org/eclipse/virgo/kernel/deployer/core/internal/PipelinedApplicationDeployer.java b/org.eclipse.virgo.kernel.deployer/src/main/java/org/eclipse/virgo/kernel/deployer/core/internal/PipelinedApplicationDeployer.java index b349822..748f6c0 100644 --- a/org.eclipse.virgo.kernel.deployer/src/main/java/org/eclipse/virgo/kernel/deployer/core/internal/PipelinedApplicationDeployer.java +++ b/org.eclipse.virgo.kernel.deployer/src/main/java/org/eclipse/virgo/kernel/deployer/core/internal/PipelinedApplicationDeployer.java
@@ -12,9 +12,19 @@ package org.eclipse.virgo.kernel.deployer.core.internal; import java.io.File; +import java.lang.management.ManagementFactory; import java.net.URI; import java.util.HashMap; import java.util.Map; +import java.util.Set; + +import javax.management.InstanceNotFoundException; +import javax.management.JMX; +import javax.management.MBeanException; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; import org.osgi.framework.Version; @@ -42,6 +52,7 @@ import org.eclipse.virgo.kernel.install.environment.InstallEnvironmentFactory; import org.eclipse.virgo.kernel.install.pipeline.Pipeline; import org.eclipse.virgo.medic.eventlog.EventLogger; +import org.eclipse.virgo.repository.management.Repository; import org.eclipse.virgo.util.common.Tree; import org.eclipse.virgo.util.io.PathReference; @@ -133,6 +144,7 @@ } private DeploymentIdentity doInstall(URI normalisedUri, DeploymentOptions deploymentOptions) throws DeploymentException { + updateWatchedRepositories(); synchronized (this.monitor) { InstallArtifact existingArtifact = this.ram.get(normalisedUri); @@ -549,13 +561,41 @@ } private void stopArtifact(InstallArtifact installArtifact) throws DeploymentException { - installArtifact.stop(); - } private void uninstallArtifact(InstallArtifact installArtifact) throws DeploymentException { installArtifact.uninstall(); } + + private void updateWatchedRepositories(){ + MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); + try { + Set<ObjectName> objectNames = mBeanServer.queryNames(new ObjectName("org.eclipse.virgo.kernel:type=Repository,*"), null); + for (ObjectName objectName : objectNames) { + Repository repo = JMX.newMXBeanProxy(mBeanServer, objectName, Repository.class); + if(repo != null && "Watched".equals(repo.type())){ + try { + mBeanServer.invoke(objectName, "forceCheck", new Object[0], new String[0]); + } catch (InstanceNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ReflectionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (MBeanException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } catch (MalformedObjectNameException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (NullPointerException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } }