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()
     {