You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2007/11/06 22:09:11 UTC

svn commit: r592553 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java

Author: pauls
Date: Tue Nov  6 13:09:10 2007
New Revision: 592553

URL: http://svn.apache.org/viewvc?rev=592553&view=rev
Log:
Added a simple check to detect and work around a bug in J9 (FELIX-416)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java?rev=592553&r1=592552&r2=592553&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java Tue Nov  6 13:09:10 2007
@@ -219,7 +219,7 @@
         // Initialize member variables.
         m_configMutableMap = (configMutableMap == null)
             ? new StringMap(false) : configMutableMap;
-        m_configMap = Collections.unmodifiableMap(m_configMutableMap);
+        m_configMap = createUnmodifiableMap(m_configMutableMap); 
         m_activatorList = activatorList;
 
         // Create logger with appropriate log level. Even though the
@@ -269,6 +269,26 @@
             new ExtensionManager(m_logger, m_configMap, m_systemBundleInfo);
         m_systemBundleInfo.addModule(
             m_factory.createModule("0", m_extensionManager));
+    }
+
+    private Map createUnmodifiableMap(Map mutableMap) 
+    {
+        Map result = Collections.unmodifiableMap(mutableMap);
+
+        // Work around a bug in certain version of J9 where a call to 
+        // Collections.unmodifiableMap().keySet().iterator() throws 
+        // a NoClassDefFoundError. We try to detect this and return 
+        // the given mutableMap instead.
+        try 
+        {
+            result.keySet().iterator();
+        }
+        catch (NoClassDefFoundError ex)
+        {
+            return mutableMap;
+        }
+
+        return result;
     }
 
     //