You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/03/11 14:45:28 UTC
svn commit: r921845 - in
/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint:
container/ di/
Author: mahrwald
Date: Thu Mar 11 13:45:28 2010
New Revision: 921845
URL: http://svn.apache.org/viewvc?rev=921845&view=rev
Log:
ARIES-246: Fix duplicate anon component recipe problem with CompDefRegProcessors
Added:
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java
Modified:
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=921845&r1=921844&r2=921845&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Thu Mar 11 13:45:28 2010
@@ -138,7 +138,8 @@ public class BlueprintContainerImpl impl
private final AtomicBoolean running = new AtomicBoolean();
private List<ServiceRecipe> services;
private AccessControlContext accessControlContext;
-
+ private final IdSpace tempRecipeIdSpace = new IdSpace();
+
public BlueprintContainerImpl(BundleContext bundleContext, Bundle extenderBundle, BlueprintListener eventDispatcher, NamespaceHandlerRegistry handlers, ScheduledExecutorService executors, List<Object> pathList) {
this.bundleContext = bundleContext;
this.extenderBundle = extenderBundle;
@@ -427,7 +428,7 @@ public class BlueprintContainerImpl impl
public BlueprintRepository getRepository() {
if (repository == null) {
- repository = new RecipeBuilder(this).createRepository();
+ repository = new RecipeBuilder(this, tempRecipeIdSpace).createRepository();
}
return repository;
}
@@ -484,15 +485,31 @@ public class BlueprintContainerImpl impl
}
// Update repository with recipes processed by the processors
untrackServiceReferences();
- Repository tmpRepo = new RecipeBuilder(this).createRepository();
+ Repository tmpRepo = new RecipeBuilder(this, tempRecipeIdSpace).createRepository();
+
+ LOGGER.debug("Updating blueprint repository");
+
+ for (String name : repository.getNames()) {
+ if (repository.getInstance(name) == null) {
+ LOGGER.debug("Removing uninstantiated recipe {}", new Object[] { name });
+ repository.removeRecipe(name);
+ } else {
+ LOGGER.debug("Recipe {} is already instantiated", new Object[] { name });
+ }
+ }
+
for (String name : tmpRepo.getNames()) {
if (repository.getInstance(name) == null) {
+ LOGGER.debug("Adding new recipe {}", new Object[] { name });
Recipe r = tmpRepo.getRecipe(name);
if (r != null) {
repository.putRecipe(name, r);
}
+ } else {
+ LOGGER.debug("Recipe {} is already instantiated and cannot be updated", new Object[] { name });
}
}
+
getSatisfiableDependenciesMap(true);
trackServiceReferences();
}
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java?rev=921845&r1=921844&r2=921845&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java Thu Mar 11 13:45:28 2010
@@ -114,6 +114,13 @@ public class BlueprintRepository impleme
}
recipes.put(name, recipe);
}
+
+ public void removeRecipe(String name) {
+ if (instances.get(name) != null)
+ throw new ComponentDefinitionException("Name " + name + " is already instanciated as " + instances.get(name) + " and cannot be removed.");
+
+ recipes.remove(name);
+ }
private Object convert(String name, Object instance) throws ComponentDefinitionException {
try {
Added: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java?rev=921845&view=auto
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java (added)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java Thu Mar 11 13:45:28 2010
@@ -0,0 +1,11 @@
+package org.apache.aries.blueprint.container;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class IdSpace {
+ private AtomicLong currentId = new AtomicLong(0);
+
+ public long nextId() {
+ return currentId.getAndIncrement();
+ }
+}
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java?rev=921845&r1=921844&r2=921845&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java Thu Mar 11 13:45:28 2010
@@ -70,12 +70,13 @@ import org.osgi.service.blueprint.reflec
*/
public class RecipeBuilder {
- private Set<String> names = new HashSet<String>();
- private int nameCounter;
- private ExtendedBlueprintContainer blueprintContainer;
- private ComponentDefinitionRegistry registry;
+ private final Set<String> names = new HashSet<String>();
+ private final ExtendedBlueprintContainer blueprintContainer;
+ private final ComponentDefinitionRegistry registry;
+ private final IdSpace recipeIdSpace;
- public RecipeBuilder(ExtendedBlueprintContainer blueprintContainer) {
+ public RecipeBuilder(ExtendedBlueprintContainer blueprintContainer, IdSpace recipeIdSpace) {
+ this.recipeIdSpace = recipeIdSpace;
this.blueprintContainer = blueprintContainer;
this.registry = blueprintContainer.getComponentDefinitionRegistry();
}
@@ -349,7 +350,7 @@ public class RecipeBuilder {
private String getName(String name) {
if (name == null) {
do {
- name = "#recipe-" + ++nameCounter;
+ name = "#recipe-" + recipeIdSpace.nextId();
} while (names.contains(name) || registry.containsComponentDefinition(name));
}
names.add(name);
Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java?rev=921845&r1=921844&r2=921845&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java Thu Mar 11 13:45:28 2010
@@ -50,6 +50,13 @@ public interface Repository {
Recipe getRecipe(String name);
void putRecipe(String name, Recipe recipe);
+
+ /**
+ * Remove an uninstantiated recipe
+ * @param name
+ * @throws ComponentDefinitionException if the recipe is already instantiated
+ */
+ void removeRecipe(String name);
Object create(String name) throws ComponentDefinitionException;
Re: svn commit: r921845 - in /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint: container/ di/
Posted by Valentin Mahrwald <vm...@googlemail.com>.
Oops, new Eclipse workspace -> settings gone.
Thanks for your watchful eye :)
Valentin
On 13 Mar 2010, at 03:39, Donald Woods wrote:
> Looks like a file was added without the required license header, which
> will cause mvn rat:check to fail at release time....
>
> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/
> apache/aries/blueprint/container/IdSpace.java
>
>
> -Donald
>
>
> On 3/11/10 8:45 AM, mahrwald@apache.org wrote:
>> Author: mahrwald
>> Date: Thu Mar 11 13:45:28 2010
>> New Revision: 921845
>>
>> URL: http://svn.apache.org/viewvc?rev=921845&view=rev
>> Log:
>> ARIES-246: Fix duplicate anon component recipe problem with
>> CompDefRegProcessors
>>
>> Added:
>> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/
>> apache/aries/blueprint/container/IdSpace.java
>> Modified:
>> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/
>> apache/aries/blueprint/container/BlueprintContainerImpl.java
>> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/
>> apache/aries/blueprint/container/BlueprintRepository.java
>> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/
>> apache/aries/blueprint/container/RecipeBuilder.java
>> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/
>> apache/aries/blueprint/di/Repository.java
>>
>> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/
>> java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
>> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=921845&r1=921844&r2=921845&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/BlueprintContainerImpl.java
>> (original)
>> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/BlueprintContainerImpl.java
>> Thu Mar 11 13:45:28 2010
>> @@ -138,7 +138,8 @@ public class BlueprintContainerImpl impl
>> private final AtomicBoolean running = new AtomicBoolean();
>> private List<ServiceRecipe> services;
>> private AccessControlContext accessControlContext;
>> -
>> + private final IdSpace tempRecipeIdSpace = new IdSpace();
>> +
>> public BlueprintContainerImpl(BundleContext bundleContext,
>> Bundle extenderBundle, BlueprintListener eventDispatcher,
>> NamespaceHandlerRegistry handlers, ScheduledExecutorService
>> executors, List<Object> pathList) {
>> this.bundleContext = bundleContext;
>> this.extenderBundle = extenderBundle;
>> @@ -427,7 +428,7 @@ public class BlueprintContainerImpl impl
>>
>> public BlueprintRepository getRepository() {
>> if (repository == null) {
>> - repository = new RecipeBuilder(this).createRepository();
>> + repository = new RecipeBuilder(this,
>> tempRecipeIdSpace).createRepository();
>> }
>> return repository;
>> }
>> @@ -484,15 +485,31 @@ public class BlueprintContainerImpl impl
>> }
>> // Update repository with recipes processed by the
>> processors
>> untrackServiceReferences();
>> - Repository tmpRepo = new
>> RecipeBuilder(this).createRepository();
>> + Repository tmpRepo = new RecipeBuilder(this,
>> tempRecipeIdSpace).createRepository();
>> +
>> + LOGGER.debug("Updating blueprint repository");
>> +
>> + for (String name : repository.getNames()) {
>> + if (repository.getInstance(name) == null) {
>> + LOGGER.debug("Removing uninstantiated recipe
>> {}", new Object[] { name });
>> + repository.removeRecipe(name);
>> + } else {
>> + LOGGER.debug("Recipe {} is already
>> instantiated", new Object[] { name });
>> + }
>> + }
>> +
>> for (String name : tmpRepo.getNames()) {
>> if (repository.getInstance(name) == null) {
>> + LOGGER.debug("Adding new recipe {}", new
>> Object[] { name });
>> Recipe r = tmpRepo.getRecipe(name);
>> if (r != null) {
>> repository.putRecipe(name, r);
>> }
>> + } else {
>> + LOGGER.debug("Recipe {} is already
>> instantiated and cannot be updated", new Object[] { name });
>> }
>> }
>> +
>> getSatisfiableDependenciesMap(true);
>> trackServiceReferences();
>> }
>>
>> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/
>> java/org/apache/aries/blueprint/container/BlueprintRepository.java
>> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java?rev=921845&r1=921844&r2=921845&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/BlueprintRepository.java
>> (original)
>> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/BlueprintRepository.java Thu
>> Mar 11 13:45:28 2010
>> @@ -114,6 +114,13 @@ public class BlueprintRepository impleme
>> }
>> recipes.put(name, recipe);
>> }
>> +
>> + public void removeRecipe(String name) {
>> + if (instances.get(name) != null)
>> + throw new ComponentDefinitionException("Name " + name
>> + " is already instanciated as " + instances.get(name) + " and
>> cannot be removed.");
>> +
>> + recipes.remove(name);
>> + }
>>
>> private Object convert(String name, Object instance) throws
>> ComponentDefinitionException {
>> try {
>>
>> Added: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/IdSpace.java
>> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java?rev=921845&view=auto
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/IdSpace.java (added)
>> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/IdSpace.java Thu Mar 11
>> 13:45:28 2010
>> @@ -0,0 +1,11 @@
>> +package org.apache.aries.blueprint.container;
>> +
>> +import java.util.concurrent.atomic.AtomicLong;
>> +
>> +public class IdSpace {
>> + private AtomicLong currentId = new AtomicLong(0);
>> +
>> + public long nextId() {
>> + return currentId.getAndIncrement();
>> + }
>> +}
>>
>> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/
>> java/org/apache/aries/blueprint/container/RecipeBuilder.java
>> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java?rev=921845&r1=921844&r2=921845&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/RecipeBuilder.java (original)
>> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/container/RecipeBuilder.java Thu Mar 11
>> 13:45:28 2010
>> @@ -70,12 +70,13 @@ import org.osgi.service.blueprint.reflec
>> */
>> public class RecipeBuilder {
>>
>> - private Set<String> names = new HashSet<String>();
>> - private int nameCounter;
>> - private ExtendedBlueprintContainer blueprintContainer;
>> - private ComponentDefinitionRegistry registry;
>> + private final Set<String> names = new HashSet<String>();
>> + private final ExtendedBlueprintContainer blueprintContainer;
>> + private final ComponentDefinitionRegistry registry;
>> + private final IdSpace recipeIdSpace;
>>
>> - public RecipeBuilder(ExtendedBlueprintContainer
>> blueprintContainer) {
>> + public RecipeBuilder(ExtendedBlueprintContainer
>> blueprintContainer, IdSpace recipeIdSpace) {
>> + this.recipeIdSpace = recipeIdSpace;
>> this.blueprintContainer = blueprintContainer;
>> this.registry =
>> blueprintContainer.getComponentDefinitionRegistry();
>> }
>> @@ -349,7 +350,7 @@ public class RecipeBuilder {
>> private String getName(String name) {
>> if (name == null) {
>> do {
>> - name = "#recipe-" + ++nameCounter;
>> + name = "#recipe-" + recipeIdSpace.nextId();
>> } while (names.contains(name) ||
>> registry.containsComponentDefinition(name));
>> }
>> names.add(name);
>>
>> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/
>> java/org/apache/aries/blueprint/di/Repository.java
>> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java?rev=921845&r1=921844&r2=921845&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/di/Repository.java (original)
>> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/
>> org/apache/aries/blueprint/di/Repository.java Thu Mar 11 13:45:28
>> 2010
>> @@ -50,6 +50,13 @@ public interface Repository {
>> Recipe getRecipe(String name);
>>
>> void putRecipe(String name, Recipe recipe);
>> +
>> + /**
>> + * Remove an uninstantiated recipe
>> + * @param name
>> + * @throws ComponentDefinitionException if the recipe is
>> already instantiated
>> + */
>> + void removeRecipe(String name);
>>
>> Object create(String name) throws ComponentDefinitionException;
>>
>>
>>
>>
Re: svn commit: r921845 - in /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint:
container/ di/
Posted by Donald Woods <dw...@apache.org>.
Looks like a file was added without the required license header, which
will cause mvn rat:check to fail at release time....
incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java
-Donald
On 3/11/10 8:45 AM, mahrwald@apache.org wrote:
> Author: mahrwald
> Date: Thu Mar 11 13:45:28 2010
> New Revision: 921845
>
> URL: http://svn.apache.org/viewvc?rev=921845&view=rev
> Log:
> ARIES-246: Fix duplicate anon component recipe problem with CompDefRegProcessors
>
> Added:
> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java
> Modified:
> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java
> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
> incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java
>
> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=921845&r1=921844&r2=921845&view=diff
> ==============================================================================
> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Thu Mar 11 13:45:28 2010
> @@ -138,7 +138,8 @@ public class BlueprintContainerImpl impl
> private final AtomicBoolean running = new AtomicBoolean();
> private List<ServiceRecipe> services;
> private AccessControlContext accessControlContext;
> -
> + private final IdSpace tempRecipeIdSpace = new IdSpace();
> +
> public BlueprintContainerImpl(BundleContext bundleContext, Bundle extenderBundle, BlueprintListener eventDispatcher, NamespaceHandlerRegistry handlers, ScheduledExecutorService executors, List<Object> pathList) {
> this.bundleContext = bundleContext;
> this.extenderBundle = extenderBundle;
> @@ -427,7 +428,7 @@ public class BlueprintContainerImpl impl
>
> public BlueprintRepository getRepository() {
> if (repository == null) {
> - repository = new RecipeBuilder(this).createRepository();
> + repository = new RecipeBuilder(this, tempRecipeIdSpace).createRepository();
> }
> return repository;
> }
> @@ -484,15 +485,31 @@ public class BlueprintContainerImpl impl
> }
> // Update repository with recipes processed by the processors
> untrackServiceReferences();
> - Repository tmpRepo = new RecipeBuilder(this).createRepository();
> + Repository tmpRepo = new RecipeBuilder(this, tempRecipeIdSpace).createRepository();
> +
> + LOGGER.debug("Updating blueprint repository");
> +
> + for (String name : repository.getNames()) {
> + if (repository.getInstance(name) == null) {
> + LOGGER.debug("Removing uninstantiated recipe {}", new Object[] { name });
> + repository.removeRecipe(name);
> + } else {
> + LOGGER.debug("Recipe {} is already instantiated", new Object[] { name });
> + }
> + }
> +
> for (String name : tmpRepo.getNames()) {
> if (repository.getInstance(name) == null) {
> + LOGGER.debug("Adding new recipe {}", new Object[] { name });
> Recipe r = tmpRepo.getRecipe(name);
> if (r != null) {
> repository.putRecipe(name, r);
> }
> + } else {
> + LOGGER.debug("Recipe {} is already instantiated and cannot be updated", new Object[] { name });
> }
> }
> +
> getSatisfiableDependenciesMap(true);
> trackServiceReferences();
> }
>
> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java
> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java?rev=921845&r1=921844&r2=921845&view=diff
> ==============================================================================
> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java (original)
> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintRepository.java Thu Mar 11 13:45:28 2010
> @@ -114,6 +114,13 @@ public class BlueprintRepository impleme
> }
> recipes.put(name, recipe);
> }
> +
> + public void removeRecipe(String name) {
> + if (instances.get(name) != null)
> + throw new ComponentDefinitionException("Name " + name + " is already instanciated as " + instances.get(name) + " and cannot be removed.");
> +
> + recipes.remove(name);
> + }
>
> private Object convert(String name, Object instance) throws ComponentDefinitionException {
> try {
>
> Added: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java
> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java?rev=921845&view=auto
> ==============================================================================
> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java (added)
> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/IdSpace.java Thu Mar 11 13:45:28 2010
> @@ -0,0 +1,11 @@
> +package org.apache.aries.blueprint.container;
> +
> +import java.util.concurrent.atomic.AtomicLong;
> +
> +public class IdSpace {
> + private AtomicLong currentId = new AtomicLong(0);
> +
> + public long nextId() {
> + return currentId.getAndIncrement();
> + }
> +}
>
> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java?rev=921845&r1=921844&r2=921845&view=diff
> ==============================================================================
> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java (original)
> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java Thu Mar 11 13:45:28 2010
> @@ -70,12 +70,13 @@ import org.osgi.service.blueprint.reflec
> */
> public class RecipeBuilder {
>
> - private Set<String> names = new HashSet<String>();
> - private int nameCounter;
> - private ExtendedBlueprintContainer blueprintContainer;
> - private ComponentDefinitionRegistry registry;
> + private final Set<String> names = new HashSet<String>();
> + private final ExtendedBlueprintContainer blueprintContainer;
> + private final ComponentDefinitionRegistry registry;
> + private final IdSpace recipeIdSpace;
>
> - public RecipeBuilder(ExtendedBlueprintContainer blueprintContainer) {
> + public RecipeBuilder(ExtendedBlueprintContainer blueprintContainer, IdSpace recipeIdSpace) {
> + this.recipeIdSpace = recipeIdSpace;
> this.blueprintContainer = blueprintContainer;
> this.registry = blueprintContainer.getComponentDefinitionRegistry();
> }
> @@ -349,7 +350,7 @@ public class RecipeBuilder {
> private String getName(String name) {
> if (name == null) {
> do {
> - name = "#recipe-" + ++nameCounter;
> + name = "#recipe-" + recipeIdSpace.nextId();
> } while (names.contains(name) || registry.containsComponentDefinition(name));
> }
> names.add(name);
>
> Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java
> URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java?rev=921845&r1=921844&r2=921845&view=diff
> ==============================================================================
> --- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java (original)
> +++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/Repository.java Thu Mar 11 13:45:28 2010
> @@ -50,6 +50,13 @@ public interface Repository {
> Recipe getRecipe(String name);
>
> void putRecipe(String name, Recipe recipe);
> +
> + /**
> + * Remove an uninstantiated recipe
> + * @param name
> + * @throws ComponentDefinitionException if the recipe is already instantiated
> + */
> + void removeRecipe(String name);
>
> Object create(String name) throws ComponentDefinitionException;
>
>
>
>