[picocontainer-scm] [5784] java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors: improve compositeInjectors getDescritpion, and expose defect around threadlocal

paul-yCVjj/[email protected] Sun, 1 May 2011 11:39:44 -0500 (CDT)
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <[email protected]>
Revision 5784
Author paul
Date 2011-05-01 11:39:44 -0500 (Sun, 01 May 2011)

Log Message

improve compositeInjectors getDescritpion, and expose defect around threadlocal

Modified Paths

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

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

Diff

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/CompositeInjector.java (5783 => 5784)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/CompositeInjector.java 2011-04-30 17:56:34 UTC (rev 5783)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/CompositeInjector.java 2011-05-01 16:39:44 UTC (rev 5784)
@@ -77,6 +77,11 @@

@Override
public String getDescriptor() {
- return "CompositeInjector";
+ StringBuilder sb = new StringBuilder("CompositeInjector(");
+ for (Injector<T> injector : injectors) {
+ sb.append(injector.getDescriptor());
+ }
+ sb.deleteCharAt(sb.length()-1); // remove last dash
+ return sb.toString().replace("-", "+") + ")-";
}
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/ThreadCachingTestCase.java (5783 => 5784)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/ThreadCachingTestCase.java 2011-04-30 17:56:34 UTC (rev 5783)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/ThreadCachingTestCase.java 2011-05-01 16:39:44 UTC (rev 5784)
@@ -19,6 +19,8 @@
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.classname.DefaultClassLoadingPicoContainer;
import org.picocontainer.containers.EmptyPicoContainer;
+import org.picocontainer.injectors.CompositeInjection;
+import org.picocontainer.injectors.ConstructorInjection;
import org.picocontainer.injectors.SetterInjection;
import org.picocontainer.lifecycle.NullLifecycleStrategy;
import org.picocontainer.monitors.NullComponentMonitor;
@@ -32,8 +34,23 @@
}

public static class Baz {
+
+ private static final Object lock = new Object();
+
+ private static int CTR;
+
+ private int inst;
+
+ public Baz(StringBuilder sb) {
+ synchronized (lock) {
+ inst = CTR++;
+ sb.append("!").append(inst).append(" ");
+ }
+ }
public void setStringBuilder(StringBuilder sb) {
- sb.append("<Baz");
+ synchronized (lock) {
+ sb.append("<").append(inst).append(" ");
+ }
}
}

@@ -118,12 +135,14 @@
assertEquals("ThreadCached:ConstructorInjector-class org.picocontainer.behaviors.ThreadCachingTestCase$Foo", child.getComponentAdapter(Foo.class).toString());
}

- @Test public void testThatTwoThreadsHaveSeparatedCacheValuesWithSetterInjection() {
+ @Test public void testThatTwoThreadsHaveSeparatedCacheValuesWithCompositeInjection() {

final Baz[] bazs = new Baz[4];

DefaultPicoContainer parent = new DefaultPicoContainer(new Caching());
- final DefaultPicoContainer child = new DefaultPicoContainer(new ThreadCaching().wrap(new SetterInjection()), new NullLifecycleStrategy(), parent);
+ final DefaultPicoContainer child = new DefaultPicoContainer(new ThreadCaching().wrap(
+ new CompositeInjection(new ConstructorInjection(), new SetterInjection())),
+ new NullLifecycleStrategy(), parent);

parent.addComponent(StringBuilder.class);
child.addComponent(Baz.class);
@@ -151,8 +170,8 @@
assertSame(bazs[0],bazs[2]);
assertEquals(bazs[1],bazs[3]);
assertFalse(bazs[0] == bazs[1]);
- assertEquals("<Baz<Baz", sb.toString());
- assertEquals("ThreadCached:SetterInjector-class org.picocontainer.behaviors.ThreadCachingTestCase$Baz", child.getComponentAdapter(Baz.class).toString());
+ assertEquals("!0 <0 !1 <1", sb.toString().trim());
+ assertEquals("ThreadCached:CompositeInjector(ConstructorInjector+SetterInjector)-class org.picocontainer.behaviors.ThreadCachingTestCase$Baz", child.getComponentAdapter(Baz.class).toString());
}

@Test public void testThatTwoThreadsHaveSeparatedCacheValuesWithInstanceRegistrationAndClassLoadingPicoContainer() {

----------

To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email