FELIX-2031 : Services should be registered asynchronously
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@905985 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/OptionalFeaturesHandler.java b/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/OptionalFeaturesHandler.java
index bc73c8a..5f2d54d 100644
--- a/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/OptionalFeaturesHandler.java
+++ b/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/OptionalFeaturesHandler.java
@@ -107,22 +107,58 @@
{
if ( event.getType() == ServiceEvent.REGISTERED )
{
- this.bindEventAdmin(event.getServiceReference());
+ new Thread()
+ {
+ public void run()
+ {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException ignore) {}
+ bindEventAdmin(event.getServiceReference());
+ }
+ }.start();
}
else if ( event.getType() == ServiceEvent.UNREGISTERING )
{
- this.unbindEventAdmin(event.getServiceReference());
+ new Thread()
+ {
+ public void run()
+ {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException ignore) {}
+ unbindEventAdmin(event.getServiceReference());
+ }
+ }.start();
}
}
else if ( objectClasses[i].equals(CONFIGURATION_ADMIN_CLASS_NAME) )
{
if ( event.getType() == ServiceEvent.REGISTERED )
{
- this.bindConfigAdmin(event.getServiceReference());
+ new Thread()
+ {
+ public void run()
+ {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException ignore) {}
+ bindConfigAdmin(event.getServiceReference());
+ }
+ }.start();
}
else if ( event.getType() == ServiceEvent.UNREGISTERING )
{
- this.unbindConfigAdmin(event.getServiceReference());
+ new Thread()
+ {
+ public void run()
+ {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException ignore) {}
+ unbindConfigAdmin(event.getServiceReference());
+ }
+ }.start();
}
}
}
@@ -148,7 +184,7 @@
private void unbindEventAdmin(final ServiceReference ref)
{
- if ( this.eventAdminReference == ref )
+ if ( this.eventAdminReference != null && this.eventAdminReference.equals(ref) )
{
this.eventAdminReference = null;
this.plugin.setEventAdminAvailable(false);
diff --git a/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java b/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
index 0cfcc2a..ebdf884 100644
--- a/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
+++ b/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
@@ -39,10 +39,10 @@
private final EventCollector collector;
/** Is the event admin available? */
- private boolean eventAdminAvailable = false;
+ private volatile boolean eventAdminAvailable = false;
/** Is the config admin available? */
- private boolean configAdminAvailable = false;
+ private volatile boolean configAdminAvailable = false;
public PluginServlet()
{