Discussion:
[mule-scm] [mule][23762] branches/mule-3.2.x/core/src: MMC-885
Daniel Feist
2012-01-31 13:17:51 UTC
Permalink
Does this affect 3.1.x? If so it should be fixed there too..

Can the test case be broken out into cases, rather than a single method that tests multiple cases. This way is much much easier to see what the issue is if there is a failure as well as to understand whats being tested.

Dan
Revision
23762
Author
mike.schilling
Date
2012-01-30 23:30:23 -0600 (Mon, 30 Jan 2012)
Log Message
MMC-885
Fix Lifecycle manager to honor the second stop in start-stop-start-stop
Modified Paths
branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
Added Paths
branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
Diff
Modified: branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java (23761 => 23762)
--- branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-01-31 04:57:13 UTC (rev 23761)
+++ branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-01-31 05:30:23 UTC (rev 23762)
@@ -187,6 +187,10 @@
{
completedPhases.remove(Startable.PHASE_NAME);
}
+ else if (currentPhase.equals(Startable.PHASE_NAME))
+ {
+ completedPhases.remove(Stoppable.PHASE_NAME);
+ }
else if (currentPhase.equals(Disposable.PHASE_NAME))
{
completedPhases.remove(Initialisable.PHASE_NAME);
Added: branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java (0 => 23762)
--- branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java (rev 0)
+++ branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java 2012-01-31 05:30:23 UTC (rev 23762)
@@ -0,0 +1,226 @@
+/*
+ * $Id: URIBuilder.java 23505 2011-12-20 08:20:49Z mike.schilling $
+ * --------------------------------------------------------------------------------------
+ * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
+ *
+ * The software in this package is published under the terms of the CPAL v1.0
+ * license, a copy of which has been included with this distribution in the
+ * LICENSE.txt file.
+ */
+package org.mule.lifecycle;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import org.mule.api.MuleException;
+import org.mule.api.lifecycle.Disposable;
+import org.mule.api.lifecycle.Initialisable;
+import org.mule.api.lifecycle.InitialisationException;
+import org.mule.api.lifecycle.Lifecycle;
+import org.mule.api.lifecycle.LifecycleCallback;
+import org.mule.api.lifecycle.LifecycleException;
+import org.mule.api.lifecycle.LifecycleManager;
+import org.mule.api.lifecycle.Startable;
+import org.mule.api.lifecycle.Stoppable;
+import org.mule.lifecycle.phases.NotInLifecyclePhase;
+
+import org.junit.Test;
+
+public class LifecycleTransitionTestCase
+{
+ public void testTransitions() throws MuleException
+ {
+ ObjectWithLifecycle o = new ObjectWithLifecycle();
+ int transitions = 0;
+ assertEquals(transitions, o.numTransitions());
+
+ o.initialise();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.INIT, o.lastTransition());
+ o.start();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.START, o.lastTransition());
+ try
+ {
+ // Can't start again
+ o.start();
+ fail();
+ }
+ catch (Exception ex)
+ {
+ ;
+ }
+ for (int i = 0; i < 5; i++)
+ {
+ o.stop();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.STOP, o.lastTransition());
+ o.start();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.START, o.lastTransition());
+ }
+ o.stop();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.STOP, o.lastTransition());
+ try
+ {
+ // Can't stop again
+ o.stop();
+ fail();
+ }
+ catch (Exception ex)
+ {
+ ;
+ }
+ o.dispose();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.DISPOSE, o.lastTransition());
+ }
+
+ public static class MyLifecycleManager extends AbstractLifecycleManager
+ {
+
+ public MyLifecycleManager(String id, Object object)
+ {
+ super(id, object);
+ }
+
+ protected void registerTransitions()
+ {
+ //init dispose
+ addDirectTransition(NotInLifecyclePhase.PHASE_NAME, Initialisable.PHASE_NAME);
+ addDirectTransition(NotInLifecyclePhase.PHASE_NAME, Disposable.PHASE_NAME);
+ addDirectTransition(Initialisable.PHASE_NAME, Startable.PHASE_NAME);
+ addDirectTransition(Initialisable.PHASE_NAME, Disposable.PHASE_NAME);
+
+ //start stop
+ addDirectTransition(Startable.PHASE_NAME, Stoppable.PHASE_NAME);
+ addDirectTransition(Stoppable.PHASE_NAME, Startable.PHASE_NAME);
+ addDirectTransition(Stoppable.PHASE_NAME, Disposable.PHASE_NAME);
+
+
+ registerLifecycleCallback(Initialisable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doInit();
+ }
+ });
+ registerLifecycleCallback(Disposable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doDispose();
+ }
+ });
+ registerLifecycleCallback(Startable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doStart();
+ }
+ });
+ registerLifecycleCallback(Stoppable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doStop();
+ }
+ });
+ }
+ }
+
+ public static class ObjectWithLifecycle implements Lifecycle
+ {
+ public static final char INIT = 'i';
+ public static final char DISPOSE = 'd';
+ public static final char START = 'a';
+ public static final char STOP = 'o';
+
+ private LifecycleManager manager = new MyLifecycleManager("this", this);
+ private String transitionHistory = "";
+
+ public void dispose()
+ {
+ try
+ {
+ manager.fireLifecycle(Disposable.PHASE_NAME);
+ }
+ catch (LifecycleException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void doDispose()
+ {
+ transitionHistory += DISPOSE;
+ }
+
+ public void initialise() throws InitialisationException
+ {
+ try
+ {
+ manager.fireLifecycle(Initialisable.PHASE_NAME);
+ }
+ catch (LifecycleException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void doInit()
+ {
+ transitionHistory += INIT;
+ }
+
+ public void start() throws MuleException
+ {
+ manager.fireLifecycle(Startable.PHASE_NAME);
+ }
+
+ private void doStart()
+ {
+ transitionHistory += START;
+ }
+
+ public void stop() throws MuleException
+ {
+ manager.fireLifecycle(Stoppable.PHASE_NAME);
+ }
+
+ private void doStop()
+ {
+ transitionHistory += STOP;
+ }
+
+
+ public String getTransitionHistory()
+ {
+ return transitionHistory;
+ }
+
+ public int numTransitions()
+ {
+ return transitionHistory.length();
+ }
+
+ public char lastTransition()
+ {
+ return transitionHistory.length() == 0 ? 0 : transitionHistory.charAt(transitionHistory.length() - 1);
+ }
+
+ }
+}
http://xircles.codehaus.org/manage_email
Pablo Kraan
2012-01-31 15:43:09 UTC
Permalink
Should be also merge into 3.x, right?
Post by Daniel Feist
Does this affect 3.1.x? If so it should be fixed there too..
Can the test case be broken out into cases, rather than a single method
that tests multiple cases. This way is much much easier to see what the
issue is if there is a failure as well as to understand whats being tested.
Dan
Revision 23762 <http://fisheye.codehaus.org/changelog/mule/?cs=23762>
Author mike.schilling Date 2012-01-30 23:30:23 -0600 (Mon, 30 Jan 2012) Log
Message
MMC-885
Fix Lifecycle manager to honor the second stop in start-stop-start-stop
Modified Paths
-
branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
Added Paths
-
branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
Diff
branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
(23761 => 23762)
--- branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-01-31 04:57:13 UTC (rev 23761)
+ {
+ completedPhases.remove(Stoppable.PHASE_NAME);
+ } else if (currentPhase.equals(Disposable.PHASE_NAME)) { completedPhases.remove(Initialisable.PHASE_NAME);
branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
(0 => 23762)
--- branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java (rev 0)
+ * $Id: URIBuilder.java 23505 2011-12-20 08:20:49Z mike.schilling $
+ * --------------------------------------------------------------------------------------
+ * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
+ *
+ * The software in this package is published under the terms of the CPAL v1.0
+ * license, a copy of which has been included with this distribution in the
+ * LICENSE.txt file.
+ */
+package org.mule.lifecycle;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import org.mule.api.MuleException;
+import org.mule.api.lifecycle.Disposable;
+import org.mule.api.lifecycle.Initialisable;
+import org.mule.api.lifecycle.InitialisationException;
+import org.mule.api.lifecycle.Lifecycle;
+import org.mule.api.lifecycle.LifecycleCallback;
+import org.mule.api.lifecycle.LifecycleException;
+import org.mule.api.lifecycle.LifecycleManager;
+import org.mule.api.lifecycle.Startable;
+import org.mule.api.lifecycle.Stoppable;
+import org.mule.lifecycle.phases.NotInLifecyclePhase;
+
+import org.junit.Test;
+
+public class LifecycleTransitionTestCase
+{
+ public void testTransitions() throws MuleException
+ {
+ ObjectWithLifecycle o = new ObjectWithLifecycle();
+ int transitions = 0;
+ assertEquals(transitions, o.numTransitions());
+
+ o.initialise();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.INIT, o.lastTransition());
+ o.start();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.START, o.lastTransition());
+ try
+ {
+ // Can't start again
+ o.start();
+ fail();
+ }
+ catch (Exception ex)
+ {
+ ;
+ }
+ for (int i = 0; i < 5; i++)
+ {
+ o.stop();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.STOP, o.lastTransition());
+ o.start();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.START, o.lastTransition());
+ }
+ o.stop();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.STOP, o.lastTransition());
+ try
+ {
+ // Can't stop again
+ o.stop();
+ fail();
+ }
+ catch (Exception ex)
+ {
+ ;
+ }
+ o.dispose();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.DISPOSE, o.lastTransition());
+ }
+
+ public static class MyLifecycleManager extends AbstractLifecycleManager
+ {
+
+ public MyLifecycleManager(String id, Object object)
+ {
+ super(id, object);
+ }
+
+ protected void registerTransitions()
+ {
+ //init dispose
+ addDirectTransition(NotInLifecyclePhase.PHASE_NAME, Initialisable.PHASE_NAME);
+ addDirectTransition(NotInLifecyclePhase.PHASE_NAME, Disposable.PHASE_NAME);
+ addDirectTransition(Initialisable.PHASE_NAME, Startable.PHASE_NAME);
+ addDirectTransition(Initialisable.PHASE_NAME, Disposable.PHASE_NAME);
+
+ //start stop
+ addDirectTransition(Startable.PHASE_NAME, Stoppable.PHASE_NAME);
+ addDirectTransition(Stoppable.PHASE_NAME, Startable.PHASE_NAME);
+ addDirectTransition(Stoppable.PHASE_NAME, Disposable.PHASE_NAME);
+
+
+ registerLifecycleCallback(Initialisable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doInit();
+ }
+ });
+ registerLifecycleCallback(Disposable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doDispose();
+ }
+ });
+ registerLifecycleCallback(Startable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doStart();
+ }
+ });
+ registerLifecycleCallback(Stoppable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doStop();
+ }
+ });
+ }
+ }
+
+ public static class ObjectWithLifecycle implements Lifecycle
+ {
+ public static final char INIT = 'i';
+ public static final char DISPOSE = 'd';
+ public static final char START = 'a';
+ public static final char STOP = 'o';
+
+ private LifecycleManager manager = new MyLifecycleManager("this", this);
+ private String transitionHistory = "";
+
+ public void dispose()
+ {
+ try
+ {
+ manager.fireLifecycle(Disposable.PHASE_NAME);
+ }
+ catch (LifecycleException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void doDispose()
+ {
+ transitionHistory += DISPOSE;
+ }
+
+ public void initialise() throws InitialisationException
+ {
+ try
+ {
+ manager.fireLifecycle(Initialisable.PHASE_NAME);
+ }
+ catch (LifecycleException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void doInit()
+ {
+ transitionHistory += INIT;
+ }
+
+ public void start() throws MuleException
+ {
+ manager.fireLifecycle(Startable.PHASE_NAME);
+ }
+
+ private void doStart()
+ {
+ transitionHistory += START;
+ }
+
+ public void stop() throws MuleException
+ {
+ manager.fireLifecycle(Stoppable.PHASE_NAME);
+ }
+
+ private void doStop()
+ {
+ transitionHistory += STOP;
+ }
+
+
+ public String getTransitionHistory()
+ {
+ return transitionHistory;
+ }
+
+ public int numTransitions()
+ {
+ return transitionHistory.length();
+ }
+
+ public char lastTransition()
+ {
+ return transitionHistory.length() == 0 ? 0 : transitionHistory.charAt(transitionHistory.length() - 1);
+ }
+
+ }
+}
------------------------------
http://xircles.codehaus.org/manage_email
Mike Schilling
2012-01-31 20:59:07 UTC
Permalink
If the test fails, the line number at which it fails will point directly
to the transition that fails. If anything, i'd make the case *more*
complicated, to find failures that occur only after a large number of
transitions.

Mike
Post by Daniel Feist
Does this affect 3.1.x? If so it should be fixed there too..
Can the test case be broken out into cases, rather than a single
method that tests multiple cases. This way is much much easier to see
what the issue is if there is a failure as well as to understand whats
being tested.
Dan
Revision
23762 <http://fisheye.codehaus.org/changelog/mule/?cs=23762>
Author
mike.schilling
Date
2012-01-30 23:30:23 -0600 (Mon, 30 Jan 2012)
Log Message
MMC-885
Fix Lifecycle manager to honor the second stop in start-stop-start-stop
Modified Paths
* branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
<x-msg://2308/#branchesmule32xcoresrcmainjavaorgmulelifecycleAbstractLifecycleManagerjava>
Added Paths
* branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
<x-msg://2308/#branchesmule32xcoresrctestjavaorgmulelifecycleLifecycleTransitionTestCasejava>
Diff
branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
(23761 => 23762)
--- branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-01-31 04:57:13 UTC (rev 23761)
+++ branches/mule-3.2.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-01-31 05:30:23 UTC (rev 23762)
@@ -187,6 +187,10 @@
{
completedPhases.remove(Startable.PHASE_NAME);
}
+ else if (currentPhase.equals(Startable.PHASE_NAME))
+ {
+ completedPhases.remove(Stoppable.PHASE_NAME);
+ }
else if (currentPhase.equals(Disposable.PHASE_NAME))
{
completedPhases.remove(Initialisable.PHASE_NAME);
branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
(0 => 23762)
--- branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java (rev 0)
+++ branches/mule-3.2.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java 2012-01-31 05:30:23 UTC (rev 23762)
@@ -0,0 +1,226 @@
+/*
+ * $Id: URIBuilder.java 23505 2011-12-20 08:20:49Z mike.schilling $
+ * --------------------------------------------------------------------------------------
+ * Copyright (c) MuleSoft, Inc. All rights reserved.http://www.mulesoft.com
+ *
+ * The software in this package is published under the terms of the CPAL v1.0
+ * license, a copy of which has been included with this distribution in the
+ * LICENSE.txt file.
+ */
+package org.mule.lifecycle;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import org.mule.api.MuleException;
+import org.mule.api.lifecycle.Disposable;
+import org.mule.api.lifecycle.Initialisable;
+import org.mule.api.lifecycle.InitialisationException;
+import org.mule.api.lifecycle.Lifecycle;
+import org.mule.api.lifecycle.LifecycleCallback;
+import org.mule.api.lifecycle.LifecycleException;
+import org.mule.api.lifecycle.LifecycleManager;
+import org.mule.api.lifecycle.Startable;
+import org.mule.api.lifecycle.Stoppable;
+import org.mule.lifecycle.phases.NotInLifecyclePhase;
+
+import org.junit.Test;
+
+public class LifecycleTransitionTestCase
+{
+ public void testTransitions() throws MuleException
+ {
+ ObjectWithLifecycle o = new ObjectWithLifecycle();
+ int transitions = 0;
+ assertEquals(transitions, o.numTransitions());
+
+ o.initialise();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.INIT, o.lastTransition());
+ o.start();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.START, o.lastTransition());
+ try
+ {
+ // Can't start again
+ o.start();
+ fail();
+ }
+ catch (Exception ex)
+ {
+ ;
+ }
+ for (int i = 0; i< 5; i++)
+ {
+ o.stop();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.STOP, o.lastTransition());
+ o.start();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.START, o.lastTransition());
+ }
+ o.stop();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.STOP, o.lastTransition());
+ try
+ {
+ // Can't stop again
+ o.stop();
+ fail();
+ }
+ catch (Exception ex)
+ {
+ ;
+ }
+ o.dispose();
+ transitions++;
+ assertEquals(transitions, o.numTransitions());
+ assertEquals(ObjectWithLifecycle.DISPOSE, o.lastTransition());
+ }
+
+ public static class MyLifecycleManager extends AbstractLifecycleManager
+ {
+
+ public MyLifecycleManager(String id, Object object)
+ {
+ super(id, object);
+ }
+
+ protected void registerTransitions()
+ {
+ //init dispose
+ addDirectTransition(NotInLifecyclePhase.PHASE_NAME, Initialisable.PHASE_NAME);
+ addDirectTransition(NotInLifecyclePhase.PHASE_NAME, Disposable.PHASE_NAME);
+ addDirectTransition(Initialisable.PHASE_NAME, Startable.PHASE_NAME);
+ addDirectTransition(Initialisable.PHASE_NAME, Disposable.PHASE_NAME);
+
+ //start stop
+ addDirectTransition(Startable.PHASE_NAME, Stoppable.PHASE_NAME);
+ addDirectTransition(Stoppable.PHASE_NAME, Startable.PHASE_NAME);
+ addDirectTransition(Stoppable.PHASE_NAME, Disposable.PHASE_NAME);
+
+
+ registerLifecycleCallback(Initialisable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doInit();
+ }
+ });
+ registerLifecycleCallback(Disposable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doDispose();
+ }
+ });
+ registerLifecycleCallback(Startable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doStart();
+ }
+ });
+ registerLifecycleCallback(Stoppable.PHASE_NAME, new LifecycleCallback<ObjectWithLifecycle>()
+ {
+ public void onTransition(String phaseName, ObjectWithLifecycle object)
+ {
+ object.doStop();
+ }
+ });
+ }
+ }
+
+ public static class ObjectWithLifecycle implements Lifecycle
+ {
+ public static final char INIT = 'i';
+ public static final char DISPOSE = 'd';
+ public static final char START = 'a';
+ public static final char STOP = 'o';
+
+ private LifecycleManager manager = new MyLifecycleManager("this", this);
+ private String transitionHistory = "";
+
+ public void dispose()
+ {
+ try
+ {
+ manager.fireLifecycle(Disposable.PHASE_NAME);
+ }
+ catch (LifecycleException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void doDispose()
+ {
+ transitionHistory += DISPOSE;
+ }
+
+ public void initialise() throws InitialisationException
+ {
+ try
+ {
+ manager.fireLifecycle(Initialisable.PHASE_NAME);
+ }
+ catch (LifecycleException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void doInit()
+ {
+ transitionHistory += INIT;
+ }
+
+ public void start() throws MuleException
+ {
+ manager.fireLifecycle(Startable.PHASE_NAME);
+ }
+
+ private void doStart()
+ {
+ transitionHistory += START;
+ }
+
+ public void stop() throws MuleException
+ {
+ manager.fireLifecycle(Stoppable.PHASE_NAME);
+ }
+
+ private void doStop()
+ {
+ transitionHistory += STOP;
+ }
+
+
+ public String getTransitionHistory()
+ {
+ return transitionHistory;
+ }
+
+ public int numTransitions()
+ {
+ return transitionHistory.length();
+ }
+
+ public char lastTransition()
+ {
+ return transitionHistory.length() == 0 ? 0 : transitionHistory.charAt(transitionHistory.length() - 1);
+ }
+
+ }
+}
------------------------------------------------------------------------
http://xircles.codehaus.org/manage_email
Loading...