You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2015/12/09 10:03:12 UTC

svn commit: r1718778 - /aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java

Author: gnodet
Date: Wed Dec  9 09:03:12 2015
New Revision: 1718778

URL: http://svn.apache.org/viewvc?rev=1718778&view=rev
Log:
[ARIES-1467] Blueprint creates unnecessary prototype bean instances

Modified:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java?rev=1718778&r1=1718777&r2=1718778&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java Wed Dec  9 09:03:12 2015
@@ -35,6 +35,7 @@ import java.util.concurrent.CopyOnWriteA
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
+import org.apache.aries.blueprint.reflect.MetadataUtil;
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.apache.aries.blueprint.container.BeanRecipe.UnwrapperedBeanHolder;
 import org.apache.aries.blueprint.di.CircularDependencyException;
@@ -47,6 +48,8 @@ import org.apache.aries.blueprint.di.Col
 import org.osgi.service.blueprint.container.ReifiedType;
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.osgi.service.blueprint.container.NoSuchComponentException;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
 
 /**
  * The default repository implementation
@@ -242,9 +245,15 @@ public class BlueprintRepository impleme
         DependencyGraph graph = new DependencyGraph(this);
         HashMap<String, Object> objects = new LinkedHashMap<String, Object>();
         for (Map.Entry<String, Recipe> entry : graph.getSortedRecipes(names).entrySet()) {
-            objects.put(
-                    entry.getKey(), 
-                    entry.getValue().create());
+            String name = entry.getKey();
+            ComponentMetadata component = blueprintContainer.getComponentDefinitionRegistry().getComponentDefinition(name);
+            boolean prototype = (component instanceof BeanMetadata)
+                    && MetadataUtil.isPrototypeScope((BeanMetadata) component);
+            if (!prototype || names.contains(name)) {
+                objects.put(
+                        name,
+                        entry.getValue().create());
+            }
         }
         return objects;
     }