Fix issue Felix-1533:
avoid the potential deadlock when the OSGi frameowrk is stopping

Fix issue Felix-1532:
Add a new property to set the log level (beginning by an upper case)

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@808377 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java
index 517b888..14345b7 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java
@@ -116,7 +116,7 @@
      * @param event the bundle event.

      * @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)

      */

-    public synchronized void bundleChanged(final BundleEvent event) {

+    public void bundleChanged(final BundleEvent event) {

         if (event.getBundle() == m_bundle) { return; }

 

         switch (event.getType()) {

@@ -304,6 +304,8 @@
                 }

             }

         }

+        

+        m_logger.log(Logger.INFO, "iPOJO Runtime started");

     }

 

     /**

@@ -338,6 +340,8 @@
 

         m_factoryTypes = null;

         m_creator = null;

+        

+        m_logger.log(Logger.INFO, "iPOJO Runtime stopped");

     }

     

     /**

diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java
index db0d71f..6c4956c 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java
@@ -165,6 +165,8 @@
         }

 

         m_requiredHandlers = getRequiredHandlerList(); // Call sub-class to get the list of required handlers.

+        

+        m_logger.log(Logger.INFO, "New factory created : " + m_factoryName);

     }

 

     /**

@@ -298,11 +300,14 @@
             ComponentInstance instance = createInstance(configuration, context, handlers); // This method is called with the lock.

             INSTANCE_NAME.add(name);

             m_componentInstances.put(name, instance);

+            m_logger.log(Logger.INFO, "Instance " + name + " from factory " + m_factoryName + " created");

             return instance;

         } catch (ConfigurationException e) {

             m_logger.log(Logger.ERROR, e.getMessage());

             throw new ConfigurationException(e.getMessage(), m_factoryName);

         }

+        

+

     }

 

     /**

@@ -539,6 +544,9 @@
         m_described = false;

         m_componentDesc = null;

         m_componentInstances.clear();

+        

+        m_logger.log(Logger.INFO, "Factory " + m_factoryName + " stopped");

+

     }

 

     /**

@@ -581,6 +589,9 @@
                     m_context.registerService(m_componentDesc.getFactoryInterfacesToPublish(), this, m_componentDesc

                             .getPropertiesToPublish());

         }

+        

+        m_logger.log(Logger.INFO, "Factory " + m_factoryName + " started");

+

     }

 

     /**

diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Logger.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Logger.java
index ea44b1e..2cb6728 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Logger.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Logger.java
@@ -34,7 +34,13 @@
     /**
      * The iPOJO default log level property.
      */
-    public static final String IPOJO_LOG_LEVEL = "ipojo.log.level";
+    public static final String IPOJO_LOG_LEVEL_PROP = "ipojo.log.level";
+    
+    /**
+     * iPOJO log level manifest header.
+     * Use an upper case to support bnd.
+     */
+    public static final String IPOJO_LOG_LEVEL_HEADER = "IPOJO-log-level";
 
     /**
      * The Log Level ERROR.
@@ -257,14 +263,19 @@
      */
     private static int getDefaultLevel(BundleContext context) {
         // First check in the framework and in the system properties
-        String level = context.getProperty(IPOJO_LOG_LEVEL);
+        String level = context.getProperty(IPOJO_LOG_LEVEL_PROP);
         
-        // If null, look in bundle manifest
+        // If null, look in the bundle manifest
         if (level == null) {
-            String key = IPOJO_LOG_LEVEL.replace('.', '-');
+            String key = IPOJO_LOG_LEVEL_PROP.replace('.', '-');
             level = (String) context.getBundle().getHeaders().get(key);
         }
         
+        // if still null try the second header
+        if (level == null) {
+            level = (String) context.getBundle().getHeaders().get(IPOJO_LOG_LEVEL_HEADER);
+        }
+                
         if (level != null) {
             if (level.equalsIgnoreCase("info")) {
                 return INFO;
diff --git a/ipojo/tests/integration-tests/pom.xml b/ipojo/tests/integration-tests/pom.xml
index 0e99360..122b21c 100644
--- a/ipojo/tests/integration-tests/pom.xml
+++ b/ipojo/tests/integration-tests/pom.xml
@@ -242,7 +242,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.configadmin</artifactId>
-      <version>1.0.10</version>
+      <version>1.2.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/ipojo/tests/pom.xml b/ipojo/tests/pom.xml
index b4a24db..c46dd4e 100644
--- a/ipojo/tests/pom.xml
+++ b/ipojo/tests/pom.xml
@@ -42,6 +42,7 @@
   <module>core/handler</module>

   <module>core/external-handlers</module>

   <module>core/bad-configurations</module>

+  <module>core/logger</module>

   <module>composite/composite-runtime</module>

   <module>composite/import-export</module>

   <module>composite/service-instance</module>