You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2022/02/22 08:49:06 UTC
[unomi] 02/02: Attempt to fix issue with release:prepare locking Unomi startup. - Added a dependency to Unomi in Groovy actions feature - Added a check of bundle states at initialization of Lifecycle Manager, in case it gets started after bundles that are required.
This is an automated email from the ASF dual-hosted git repository.
shuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git
commit a0bfe54da42947f8177cba69b94a4746dc51b8a6
Author: Serge Huber <sh...@jahia.com>
AuthorDate: Mon Feb 21 18:18:20 2022 +0100
Attempt to fix issue with release:prepare locking Unomi startup.
- Added a dependency to Unomi in Groovy actions feature
- Added a check of bundle states at initialization of Lifecycle Manager, in case it gets started after bundles that are required.
---
.../karaf-kar/src/main/feature/feature.xml | 2 +-
.../org/apache/unomi/lifecycle/BundleWatcher.java | 29 ++++++++++++++--------
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml b/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml
index ff73575..c3aa72a 100644
--- a/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml
+++ b/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml
@@ -19,7 +19,7 @@
<feature name="unomi-groovy-actions" description="${project.name}" version="${project.version}">
<details>${project.description}</details>
<feature prerequisite="true" dependency="false">wrap</feature>
- <feature>unomi-kar</feature>
+ <feature dependency="true">unomi-kar</feature>
<bundle start-level="85">mvn:org.codehaus.groovy/groovy/3.0.3</bundle>
<bundle start-level="85">mvn:org.codehaus.groovy/groovy-xml/3.0.3</bundle>
<bundle start-level="85" start="false">mvn:org.apache.unomi/unomi-groovy-actions-services/${project.version}</bundle>
diff --git a/lifecycle-watcher/src/main/java/org/apache/unomi/lifecycle/BundleWatcher.java b/lifecycle-watcher/src/main/java/org/apache/unomi/lifecycle/BundleWatcher.java
index 16e3edf..31eec3b 100644
--- a/lifecycle-watcher/src/main/java/org/apache/unomi/lifecycle/BundleWatcher.java
+++ b/lifecycle-watcher/src/main/java/org/apache/unomi/lifecycle/BundleWatcher.java
@@ -16,14 +16,7 @@
*/
package org.apache.unomi.lifecycle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.SynchronousBundleListener;
+import org.osgi.framework.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,7 +42,7 @@ public class BundleWatcher implements SynchronousBundleListener, ServiceListener
private static final Logger logger = LoggerFactory.getLogger(BundleWatcher.class.getName());
private long startupTime;
- private Map<String, Boolean> requiredBundles;
+ private Map<String, Boolean> requiredBundles = new ConcurrentHashMap<>();
private ScheduledExecutorService scheduler;
private ScheduledFuture<?> scheduledFuture;
@@ -92,6 +85,7 @@ public class BundleWatcher implements SynchronousBundleListener, ServiceListener
public void init() {
scheduler = Executors.newSingleThreadScheduledExecutor();
+ checkExistingBundles();
bundleContext.addBundleListener(this);
bundleContext.addServiceListener(this);
loadLogo();
@@ -123,13 +117,26 @@ public class BundleWatcher implements SynchronousBundleListener, ServiceListener
logger.info("Bundle watcher shutdown.");
}
+ public void checkExistingBundles() {
+ for (Bundle bundle : bundleContext.getBundles()) {
+ if (bundle.getSymbolicName().startsWith("org.apache.unomi") && requiredBundles.containsKey(bundle.getSymbolicName())) {
+ if (bundle.getState() == Bundle.ACTIVE) {
+ requiredBundles.put(bundle.getSymbolicName(), true);
+ } else {
+ requiredBundles.put(bundle.getSymbolicName(), false);
+ }
+ }
+ }
+ checkStartupComplete();
+ }
+
@Override
public void bundleChanged(BundleEvent event) {
switch (event.getType()) {
case BundleEvent.STARTING:
break;
case BundleEvent.STARTED:
- if (event.getBundle().getSymbolicName().startsWith("org.apache.unomi")) {
+ if (event.getBundle().getSymbolicName().startsWith("org.apache.unomi") && requiredBundles.containsKey(event.getBundle().getSymbolicName())) {
logger.info("Bundle {} was started.", event.getBundle().getSymbolicName());
requiredBundles.put(event.getBundle().getSymbolicName(), true);
checkStartupComplete();
@@ -138,7 +145,7 @@ public class BundleWatcher implements SynchronousBundleListener, ServiceListener
case BundleEvent.STOPPING:
break;
case BundleEvent.STOPPED:
- if (event.getBundle().getSymbolicName().startsWith("org.apache.unomi")) {
+ if (event.getBundle().getSymbolicName().startsWith("org.apache.unomi") && requiredBundles.containsKey(event.getBundle().getSymbolicName())) {
logger.info("Bundle {} was stopped", event.getBundle().getSymbolicName());
requiredBundles.put(event.getBundle().getSymbolicName(), false);
}