X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.detached%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fdetached%2Fadmin%2FOpenSession.java;h=11966a97563af5371c5f156e68d92b80d611440f;hb=7a8f034133c1112e187e2a2bfd2c56a8d2452345;hp=2bf37b2f9b343607cd36461bae2a0d065385e52a;hpb=be7ad715ee2abd75be6b0b61682f5fc3b57e0eb6;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/admin/OpenSession.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/admin/OpenSession.java index 2bf37b2f9..11966a975 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/admin/OpenSession.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/admin/OpenSession.java @@ -2,12 +2,18 @@ package org.argeo.slc.detached.admin; import java.util.Properties; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.detached.DetachedAdminCommand; +import org.argeo.slc.detached.DetachedException; import org.argeo.slc.detached.DetachedRequest; import org.argeo.slc.detached.DetachedSession; +import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; public class OpenSession implements DetachedAdminCommand { + private final static Log log = LogFactory.getLog(OpenSession.class); public DetachedSession execute(DetachedRequest request, BundleContext bundleContext) { @@ -18,7 +24,34 @@ public class OpenSession implements DetachedAdminCommand { if (props.containsKey(DetachedSession.PROP_DO_IT_AGAIN_POLICY)) session.setDoItAgainPolicy(props .getProperty(DetachedSession.PROP_DO_IT_AGAIN_POLICY)); - + + String refreshedBundles = props + .getProperty("slc.detached.refreshedBundles"); + if (refreshedBundles != null) { + Bundle[] bundles = bundleContext.getBundles(); + Bundle bundle = null; + for (int i = 0; i < bundles.length; i++) { + if (bundles[i].getSymbolicName().equals(refreshedBundles)) { + bundle = bundles[i]; + } + } + + if (bundle != null) { + try { + bundle.stop(); + bundle.update(); + bundle.start(); + log.info("Refreshed bundle " + bundle.getSymbolicName()); + } catch (BundleException e) { + throw new DetachedException("Could not refresh bundle " + + bundle.getSymbolicName(), e); + } + } else { + log.warn("Did not find bundle to refresh " + refreshedBundles); + } + + } + return session; } }