You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by dk...@apache.org on 2011/11/23 19:10:50 UTC
svn commit: r1205518 - in
/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint:
container/BlueprintContainerImpl.java
services/ExtendedBlueprintContainer.java
Author: dkulp
Date: Wed Nov 23 18:10:50 2011
New Revision: 1205518
URL: http://svn.apache.org/viewvc?rev=1205518&view=rev
Log:
[ARIES-790] Add API specifically for injecting properties into an object
Modified:
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1205518&r1=1205517&r2=1205518&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Wed Nov 23 18:10:50 2011
@@ -53,6 +53,7 @@ import org.apache.aries.blueprint.Extend
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
import org.apache.aries.blueprint.NamespaceHandler;
import org.apache.aries.blueprint.Processor;
+import org.apache.aries.blueprint.di.ExecutionContext;
import org.apache.aries.blueprint.di.Recipe;
import org.apache.aries.blueprint.di.Repository;
import org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl;
@@ -883,4 +884,29 @@ public class BlueprintContainerImpl
destroyComponents();
untrackServiceReferences();
}
+
+ public void injectBeanInstance(BeanMetadata bmd, Object o)
+ throws IllegalArgumentException, ComponentDefinitionException {
+ ExecutionContext origContext
+ = ExecutionContext.Holder.setContext((ExecutionContext)getRepository());
+ try {
+ ComponentMetadata cmd = componentDefinitionRegistry.getComponentDefinition(bmd.getId());
+ if (cmd == null || cmd != bmd) {
+ throw new IllegalArgumentException(bmd.getId() + " not found in blueprint container");
+ }
+ Recipe r = this.getRepository().getRecipe(bmd.getId());
+ if (r instanceof BeanRecipe) {
+ BeanRecipe br = (BeanRecipe)r;
+ if (!br.getType().isInstance(o)) {
+ throw new IllegalArgumentException("Instance class " + o.getClass().getName()
+ + " is not an instance of " + br.getClass());
+ }
+ br.setProperties(o);
+ } else {
+ throw new IllegalArgumentException(bmd.getId() + " does not refer to a BeanRecipe");
+ }
+ } finally {
+ ExecutionContext.Holder.setContext(origContext);
+ }
+ }
}
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java?rev=1205518&r1=1205517&r2=1205518&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java Wed Nov 23 18:10:50 2011
@@ -30,7 +30,9 @@ import org.osgi.framework.ServiceReferen
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.container.BlueprintListener;
+import org.osgi.service.blueprint.container.ComponentDefinitionException;
import org.osgi.service.blueprint.container.Converter;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
/**
* TODO: javadoc
@@ -68,5 +70,15 @@ public interface ExtendedBlueprintContai
void reload();
ProxyManager getProxyManager();
-
+
+
+ /**
+ * Inject (or reinject) an Object instance with the blueprint properties defined by a BeanMetadata
+ *
+ * Throws IllegalArgumentException if the bean metadata does not exist in this blueprint container
+ * Throws ComponentDefinitionException if the injection process fails - this may have rendered the supplied Object unusable by partially completing the injection process
+ */
+ void injectBeanInstance(BeanMetadata bmd, Object o)
+ throws IllegalArgumentException, ComponentDefinitionException;
+
}