[exo-jcr-commits] exo-jcr SVN: r5666 - in kernel/trunk/exo.kernel.container/src: test/java/org/exoplatform/container and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Feb 17 11:49:03 EST 2012
Author: nfilotto
Date: 2012-02-17 11:49:02 -0500 (Fri, 17 Feb 2012)
New Revision: 5666
Modified:
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ConcurrentPicoContainer.java
kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/TestExoContainer.java
kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/test-exo-container.xml
Log:
EXOJCR-1774: StackOverflowError when instantiating external component plugin that has constructor dependency on its target service
Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ConcurrentPicoContainer.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ConcurrentPicoContainer.java 2012-02-17 13:03:02 UTC (rev 5665)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ConcurrentPicoContainer.java 2012-02-17 16:49:02 UTC (rev 5666)
@@ -413,7 +413,7 @@
Map<Object, Object> map = depResolutionCtx.get();
if (map != null)
{
- Object result = map.get(componentType);
+ Object result = map.get(componentAdapter.getComponentKey());
if (result != null)
{
return result;
Modified: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/TestExoContainer.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/TestExoContainer.java 2012-02-17 13:03:02 UTC (rev 5665)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/TestExoContainer.java 2012-02-17 16:49:02 UTC (rev 5666)
@@ -18,6 +18,7 @@
import org.exoplatform.commons.utils.PropertyManager;
import org.exoplatform.container.component.BaseComponentPlugin;
+import org.exoplatform.container.component.ComponentPlugin;
import org.exoplatform.container.configuration.ConfigurationManager;
import org.exoplatform.container.jmx.AbstractTestContainer;
import org.exoplatform.container.support.ContainerBuilder;
@@ -185,6 +186,19 @@
assertEquals(container.getComponentInstanceOfType(SOE1.class), soe2.soe1);
}
+ public void testStackOverFlow4()
+ {
+ final RootContainer container = createRootContainer("test-exo-container.xml", "testStackOverflowError");
+ MyService ms = (MyService)container.getComponentInstanceOfType(MyService.class);
+ assertNotNull(ms);
+ assertTrue(ms instanceof MyServiceImpl);
+ MyServiceImpl msi = (MyServiceImpl)ms;
+ assertNotNull(msi.componentPlugin);
+ assertTrue(msi.componentPlugin instanceof MyPlugin);
+ MyPlugin mp = (MyPlugin) msi.componentPlugin;
+ assertTrue(mp.svc == ms);
+ }
+
public void testCyclicRef()
{
final RootContainer container = createRootContainer("test-exo-container.xml", "testCyclicRef");
@@ -1005,4 +1019,44 @@
this.soe1 = (SOE1)ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(SOE1.class);
}
}
+
+ public static class MyPlugin extends BaseComponentPlugin
+ {
+ MySpecialService svc;
+
+ public MyPlugin(MySpecialService svc)
+ {
+ this.svc = svc;
+ }
+ }
+
+ public static interface MyService
+ {
+ public void addPlugin(ComponentPlugin componentPlugin);
+ }
+
+ public static interface MySpecialService extends MyService
+ {
+ }
+
+ public static class MyServiceImpl implements MySpecialService, Startable
+ {
+ ComponentPlugin componentPlugin;
+ public MyServiceImpl()
+ {
+ }
+
+ public void addPlugin(ComponentPlugin componentPlugin)
+ {
+ this.componentPlugin = componentPlugin;
+ }
+
+ public void stop()
+ {
+ }
+
+ public void start()
+ {
+ }
+ }
}
Modified: kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/test-exo-container.xml
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/test-exo-container.xml 2012-02-17 13:03:02 UTC (rev 5665)
+++ kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/test-exo-container.xml 2012-02-17 16:49:02 UTC (rev 5666)
@@ -87,4 +87,18 @@
<component profiles="testStartOrder">
<type>org.exoplatform.container.TestExoContainer$C2</type>
</component>
+ <component profiles="testStackOverflowError">
+ <key>org.exoplatform.container.TestExoContainer$MyService</key>
+ <type>org.exoplatform.container.TestExoContainer$MyServiceImpl</type>
+ </component>
+
+ <external-component-plugins profiles="testStackOverflowError">
+ <target-component>org.exoplatform.container.TestExoContainer$MyService</target-component>
+ <component-plugin>
+ <name>test.plugin</name>
+ <set-method>addPlugin</set-method>
+ <type>org.exoplatform.container.TestExoContainer$MyPlugin</type>
+ <description>User - Ticket Authenticator</description>
+ </component-plugin>
+ </external-component-plugins>
</configuration>
\ No newline at end of file
More information about the exo-jcr-commits
mailing list