Author: dkuleshov
Date: 2011-01-13 05:39:50 -0500 (Thu, 13 Jan 2011)
New Revision: 3803
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
Log:
EXOJCR-1154: fixed unregistration of component to consider lazy initialization, test
added
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 2011-01-13
10:35:21 UTC (rev 3802)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ConcurrentPicoContainer.java 2011-01-13
10:39:50 UTC (rev 3803)
@@ -423,8 +423,19 @@
for (Iterator<ComponentAdapter> iterator = componentAdapters.iterator();
iterator.hasNext();)
{
ComponentAdapter componentAdapter = iterator.next();
- if (getInstance(componentAdapter).equals(componentInstance))
+ Object o;
+ try
{
+ o = getInstance(componentAdapter);
+ }
+ catch (Exception e)
+ {
+ // Ignore me,
+ // may be caused by lazy initialization mechanism
+ continue;
+ }
+ if (componentInstance.equals(o))
+ {
return unregisterComponent(componentAdapter.getComponentKey());
}
}
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 2011-01-13
10:35:21 UTC (rev 3802)
+++
kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/TestExoContainer.java 2011-01-13
10:39:50 UTC (rev 3803)
@@ -64,6 +64,17 @@
assertNotNull(container.getComponentInstanceOfType(CachedComponent.class));
container.unregisterComponent(CachedComponent.class);
assertNull(container.getComponentInstanceOfType(CachedComponent.class));
+
+ container.registerComponent(new DummyAdapter());
+ try
+ {
+ container.unregisterComponentByInstance(new Integer(0));
+ }
+ catch (Exception e)
+ {
+ fail("Component unregistration failed");
+ }
+ container.unregisterComponent("testKey");
}
public void testContainerLifecyclePlugin()
@@ -521,4 +532,32 @@
this.a = plugin.a;
}
}
-}
\ No newline at end of file
+
+ private class DummyAdapter implements ComponentAdapter
+ {
+
+ public void verify(PicoContainer arg0) throws PicoIntrospectionException
+ {
+ }
+
+ public Object getComponentKey()
+ {
+ return "testKey";
+ }
+
+ public Object getComponentInstance(PicoContainer arg0) throws
PicoInitializationException,
+ PicoIntrospectionException
+ {
+ throw (PicoInitializationException)new Exception();
+ }
+
+ public Class getComponentImplementation()
+ {
+ return null;
+ }
+
+ public void accept(PicoVisitor arg0)
+ {
+ }
+ }
+}