[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