[picocontainer-scm] [5676] java/2.x/trunk/pico/container/src/test/org/picocontainer: Allow PicoBuilder to be used more than once after it is defined.

rimovm-yCVjj/[email protected]
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <[email protected]>
Revision 5676
Author rimovm
Date 2010-04-14 18:47:17 -0500 (Wed, 14 Apr 2010)

Log Message

Allow PicoBuilder to be used more than once after it is defined. Useful in pooling situations.

Modified Paths

- java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java

Diff

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java (5675 => 5676)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java 2010-04-14 23:46:01 UTC (rev 5675)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java 2010-04-14 23:47:17 UTC (rev 5676)
@@ -176,8 +176,10 @@
} else {
componentFactory = new CompositeInjection(injectors.toArray(new InjectionFactory[injectors.size()]));
}
- while (!behaviors.empty()) {
- componentFactory = buildComponentFactory(tempContainer, componentFactory);
+
+ Stack<Object> clonedBehaviors = (Stack< Object >) behaviors.clone();
+ while (!clonedBehaviors.empty()) {
+ componentFactory = buildComponentFactory(tempContainer, componentFactory, clonedBehaviors);
}

tempContainer.addComponent(ComponentFactory.class, componentFactory);
@@ -222,8 +224,9 @@
}
}

- private ComponentFactory buildComponentFactory(DefaultPicoContainer container, final ComponentFactory lastCaf) {
- Object componentFactory = behaviors.pop();
+ private ComponentFactory buildComponentFactory(DefaultPicoContainer container, final ComponentFactory lastCaf, final Stack<Object> clonedBehaviors) {
+
+ Object componentFactory = clonedBehaviors.pop();
DefaultPicoContainer tmpContainer = new TransientPicoContainer(container);
tmpContainer.addComponent("componentFactory", componentFactory);
if (lastCaf != null) {

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java (5675 => 5676)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java 2010-04-14 23:46:01 UTC (rev 5675)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java 2010-04-14 23:47:17 UTC (rev 5676)
@@ -9,6 +9,10 @@
*****************************************************************************/
package org.picocontainer;

+import org.picocontainer.behaviors.Cached;
+
+import java.util.Map;
+
import com.thoughtworks.xstream.XStream;
import org.junit.Before;
import org.junit.Test;
@@ -39,6 +43,7 @@

import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import static org.picocontainer.behaviors.Behaviors.caching;
import static org.picocontainer.behaviors.Behaviors.implementationHiding;
@@ -328,6 +333,21 @@
Object expected = new TestPicoContainer(ai, ncm, lifecycle, parent);
assertEquals(toXml(expected), toXml(actual));
}
+
+ @Test
+ public void testMultipleUsesAreSupported() {
+ PicoBuilder picoBuilder = new PicoBuilder().withCaching().withLifecycle();
+ MutablePicoContainer pico = picoBuilder.build();
+
+ pico.addComponent(Map.class, HashMap.class);
+ assertNotNull(pico.getComponentAdapter(Map.class).findAdapterOfType(Cached.class));
+
+ pico = picoBuilder.build();
+ pico.addComponent(Map.class, HashMap.class);
+ assertNotNull(pico.getComponentAdapter(Map.class).findAdapterOfType(Cached.class));
+
+
+ }

public static class TestPicoContainer extends DefaultPicoContainer {

----------

To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.