package org.argeo.slc.detached.admin;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
+import java.util.StringTokenizer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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) {
+ MinimalBundlesManager bundlesManager = new MinimalBundlesManager(bundleContext);
+
DetachedSession session = new DetachedSession();
session.setUuid(Long.toString(System.currentTimeMillis()));
String refreshedBundles = props
.getProperty("slc.detached.refreshedBundles");
if (refreshedBundles != null) {
+ List refreshedBundleNames = new ArrayList();
+ StringTokenizer st = new StringTokenizer(refreshedBundles, ",");
+ while (st.hasMoreTokens()) {
+ refreshedBundleNames.add(st.nextElement());
+ }
+
Bundle[] bundles = bundleContext.getBundles();
- Bundle bundle = null;
+
+ List bundlesToRefresh = new ArrayList();
for (int i = 0; i < bundles.length; i++) {
- if (bundles[i].getSymbolicName().equals(refreshedBundles)) {
- bundle = bundles[i];
+ if (refreshedBundleNames.contains(bundles[i].getSymbolicName())) {
+ bundlesToRefresh.add(bundles[i]);
}
}
- if (bundle != null) {
+ for (int i = 0; i < bundlesToRefresh.size(); i++) {
+ Bundle bundle = (Bundle) bundlesToRefresh.get(i);
try {
- bundle.stop();
- bundle.update();
- bundle.start();
+ bundlesManager.upgradeSynchronous(bundle);
+// bundle.stop();
+// bundle.update();
+// bundle.start();
log.info("Refreshed bundle " + bundle.getSymbolicName());
- } catch (BundleException e) {
+
+// try {
+// Thread.sleep(2000);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+
+ } catch (Exception e) {
throw new DetachedException("Could not refresh bundle "
+ bundle.getSymbolicName(), e);
}
- } else {
- log.warn("Did not find bundle to refresh " + refreshedBundles);
}
-
}
return session;