getLog().debug("Running testDependentLifecycle()");
getLog().debug("==================================");
NestedBeanSet beanSet = getNestedBeanSet();
ParentStatefulRemote parent = beanSet.parent;
NestedStateful nested = beanSet.nested;
NestedBeanMonitor monitor = beanSet.monitor;
Assert.assertEquals("Remote counter (via parent): ", 1, parent.increment());
String deepId = monitor.getDeepNestedId();
Assert.assertNotNull("Got a deepId", deepId);
Assert.assertFalse("Got a non-ERROR deepId", "ERROR".equals(deepId));
String localDeepId = monitor.getLocalDeepNestedId();
Assert.assertNotNull("Got a localDeepId", localDeepId);
Assert.assertFalse("Got a non-ERROR localDeepId", "ERROR".equals(localDeepId));
removeBean(parent);
// Confirm parent is dead
Assert.assertEquals("Remote counter (via dead parent): ", -1, monitor.incrementParent());
Assert.assertFalse("parent.remove() fails", monitor.removeParent());
// Confirm nested beans still work following parent remove
Assert.assertEquals("Remote counter (direct):", 2 ,nested.increment());
Assert.assertEquals("Local counter (monitor):", 1 , monitor.incrementLocalNested());
Assert.assertEquals("Deep nested id", deepId, monitor.getDeepNestedId());
Assert.assertEquals("Local deep nested id", localDeepId, monitor.getLocalDeepNestedId());
// Remove the bottom tier
Assert.assertTrue("Local deep nested removed", monitor.removeLocalDeepNested());
// Confirm it is dead
Assert.assertEquals("Local deep nested removed", "ERROR", monitor.getLocalDeepNestedId());
Assert.assertFalse("localDeepNested.remove() fails", monitor.removeLocalDeepNested());
// Confirm other beans still work following parent remove
Assert.assertEquals("Remote counter (direct):", 3 ,nested.increment());
Assert.assertEquals("Local counter (monitor):", 2 , monitor.incrementLocalNested());
Assert.assertEquals("Deep nested id", deepId, monitor.getDeepNestedId());
// Remove the nested bean
removeBean(nested);