Author: rickhall
Date: Thu Aug 27 14:36:45 2009
New Revision: 808433

URL: http://svn.apache.org/viewvc?rev=808433&view=rev
Log:
Only merge fragments for dynamic imports if necessary. (FELIX-1435)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.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=808433&r1=808432&r2=808433&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 
Thu Aug 27 14:36:45 2009
@@ -3938,14 +3938,19 @@
 
                     // Before trying to resolve, tell the resolver state to
                     // merge all fragments into their hosts.
-                    try
-                    {
-                        m_resolverState.mergeFragments(null);
-                    }
-                    catch (Exception ex)
+// TODO: FRAGMENT - We need to rethink how we do fragment merging...probably 
merging
+//       as bundles are installed would be better.
+                    if (Resolver.isDynamicImportAllowed(importer, pkgName))
                     {
-                        ex.printStackTrace();
-                        throw new ResolveException("Unable to merge 
fragments", importer, null);
+                        try
+                        {
+                            m_resolverState.mergeFragments(null);
+                        }
+                        catch (Exception ex)
+                        {
+                            ex.printStackTrace();
+                            throw new ResolveException("Unable to merge 
fragments", importer, null);
+                        }
                     }
 
                     Object[] result = 
m_resolver.resolveDynamicImport(m_resolverState, importer, pkgName);

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java?rev=808433&r1=808432&r2=808433&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
 Thu Aug 27 14:36:45 2009
@@ -89,8 +89,8 @@
                 }
 
                 // Need to remove any previously attached, but not resolved 
fragments.
-                // TODO: FRAGMENT - Would be better to have the previous 
resolves
-                //       not leave fragments attached.
+// TODO: FRAGMENT - We need to rethink how we do fragment merging...probably 
merging
+//       as bundles are installed would be better.
                 ((ModuleImpl) host).attachFragments(null);
 
                 // Fragments are grouped by symbolic name and descending 
version.

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java?rev=808433&r1=808432&r2=808433&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java
 Thu Aug 27 14:36:45 2009
@@ -196,7 +196,11 @@
         return null;
     }
 
-    private static boolean isDynamicImportAllowed(IModule importer, String 
pkgName)
+// TODO: FRAGMENT - This is only public so we could avoid merging fragments 
when
+//       when it wasn't necessary for dynamic imports. We need to rethink how 
we
+//       do fragment merging...probably merging as bundles are installed would 
be
+//       better.
+    public static boolean isDynamicImportAllowed(IModule importer, String 
pkgName)
     {
         // If any of the module exports this package, then we cannot
         // attempt to dynamically import it.


Reply via email to