You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by fm...@apache.org on 2007/08/22 10:46:35 UTC

svn commit: r568514 - /felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java

Author: fmeschbe
Date: Wed Aug 22 01:46:34 2007
New Revision: 568514

URL: http://svn.apache.org/viewvc?rev=568514&view=rev
Log:
FELIX-342 NullPointerException after updating a ManagedService when no Configuration exists

Modified:
    felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java

Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java?rev=568514&r1=568513&r2=568514&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java Wed Aug 22 01:46:34 2007
@@ -459,10 +459,10 @@
     }
 
 
-    void fireConfigurationEvent( int type, ConfigurationImpl config )
+    void fireConfigurationEvent( int type, String pid, String factoryPid )
     {
 
-        updateThread.schedule( new FireConfigurationEvent( type, config ) );
+        updateThread.schedule( new FireConfigurationEvent( type, pid, factoryPid) );
     }
 
 
@@ -895,7 +895,7 @@
 
             // 104.5.3 CM_UPDATED is sent asynchronously to all
             // ConfigurationListeners
-            fireConfigurationEvent( ConfigurationEvent.CM_UPDATED, cfg );
+            fireConfigurationEvent( ConfigurationEvent.CM_UPDATED, pid, null );
         }
     }
 
@@ -1154,18 +1154,21 @@
                 log( LogService.LOG_ERROR, "Unexpected problem updating configuration", t );
             }
 
-            fireConfigurationEvent( ConfigurationEvent.CM_UPDATED, config );
+            fireConfigurationEvent( ConfigurationEvent.CM_UPDATED, config.getPid(), config.getFactoryPid() );
         }
     }
 
     private class DeleteConfiguration implements Runnable
     {
-        private ConfigurationImpl config;
+
+        private String pid;
+        private String factoryPid;
 
 
         DeleteConfiguration( ConfigurationImpl config )
         {
-            this.config = config;
+            this.pid = config.getPid();
+            this.factoryPid = config.getFactoryPid();
         }
 
 
@@ -1173,10 +1176,10 @@
         {
             try
             {
-                if ( config.getFactoryPid() == null )
+                if ( factoryPid == null )
                 {
                     ServiceReference[] sr = bundleContext.getServiceReferences( ManagedService.class.getName(), "("
-                        + Constants.SERVICE_PID + "=" + config.getPid() + ")" );
+                        + Constants.SERVICE_PID + "=" + pid + ")" );
                     if ( sr != null && sr.length > 0 )
                     {
                         ManagedService srv = ( ManagedService ) bundleContext.getService( sr[0] );
@@ -1193,18 +1196,18 @@
                 else
                 {
                     // remove the pid from the factory
-                    Factory factory = getFactory( config.getFactoryPid() );
-                    factory.removePID( config.getPid() );
+                    Factory factory = getFactory( factoryPid );
+                    factory.removePID( pid );
                     factory.store();
 
                     ServiceReference[] sr = bundleContext.getServiceReferences( ManagedServiceFactory.class.getName(),
-                        "(" + Constants.SERVICE_PID + "=" + config.getFactoryPid() + ")" );
+                        "(" + Constants.SERVICE_PID + "=" + factoryPid + ")" );
                     if ( sr != null && sr.length > 0 )
                     {
                         ManagedServiceFactory srv = ( ManagedServiceFactory ) bundleContext.getService( sr[0] );
                         try
                         {
-                            srv.deleted( config.getPid() );
+                            srv.deleted( pid );
                         }
                         finally
                         {
@@ -1231,7 +1234,7 @@
                 log( LogService.LOG_ERROR, "Unexpected problem updating configuration", t );
             }
 
-            fireConfigurationEvent( ConfigurationEvent.CM_DELETED, config );
+            fireConfigurationEvent( ConfigurationEvent.CM_DELETED, pid, factoryPid );
         }
     }
 
@@ -1239,13 +1242,16 @@
     {
         private int type;
 
-        private ConfigurationImpl config;
+        private String pid;
+        
+        private String factoryPid;
 
 
-        FireConfigurationEvent( int type, ConfigurationImpl config )
+        FireConfigurationEvent( int type, String pid, String factoryPid )
         {
             this.type = type;
-            this.config = config;
+            this.pid = pid;
+            this.factoryPid = factoryPid;
         }
 
 
@@ -1258,8 +1264,7 @@
                 return;
             }
 
-            ConfigurationEvent event = new ConfigurationEvent( configurationAdminReference, type, config
-                .getFactoryPid(), config.getPid() );
+            ConfigurationEvent event = new ConfigurationEvent( configurationAdminReference, type, factoryPid, pid);
 
             for ( int i = 0; i < srs.length; i++ )
             {