Discussion:
[mule-scm] [mule][23787] branches/mule-3.1.x/core/src: MMC-885
Daniel Feist
2012-02-02 13:17:37 UTC
Permalink
Looks like this broke the build:

http://bamboo.mulesoft.org/chain/result/viewChainResult.action?planKey=MULE-MULE31XJDK5&buildNumber=636
Revision
23787
Author
mike.schilling
Date
2012-02-01 13:12:41 -0600 (Wed, 01 Feb 2012)
Log Message
MMC-885
MULE-6050
Fix Lifecycle manager to honor the second stop in start-stop-start-stop (hand-merged from r23762)
Modified Paths
branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
Added Paths
branches/mule-3.1.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
Diff
Modified: branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java (23786 => 23787)
--- branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-02-01 18:23:22 UTC (rev 23786)
+++ branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-02-01 19:12:41 UTC (rev 23787)
@@ -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.1.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java (0 => 23787)
--- branches/mule-3.1.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java (rev 0)
+++ branches/mule-3.1.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java 2012-02-01 19:12:41 UTC (rev 23787)
@@ -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
Mike Schilling
2012-02-02 17:04:11 UTC
Permalink
Weird. It worked locally. I'll take a look.
Post by Daniel Feist
http://bamboo.mulesoft.org/chain/result/viewChainResult.action?planKey=MULE-MULE31XJDK5&buildNumber=636
Revision 23787 <http://fisheye.codehaus.org/changelog/mule/?cs=23787>
Author mike.schilling Date 2012-02-01 13:12:41 -0600 (Wed, 01 Feb 2012) Log
Message
MMC-885
MULE-6050
Fix Lifecycle manager to honor the second stop in start-stop-start-stop (hand-merged from r23762 <http://fisheye.codehaus.org/changelog/mule/?cs=23762>)
Modified Paths
-
branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
Added Paths
-
branches/mule-3.1.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
Diff
branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java
(23786 => 23787)
--- branches/mule-3.1.x/core/src/main/java/org/mule/lifecycle/AbstractLifecycleManager.java 2012-02-01 18:23:22 UTC (rev 23786)
+ {
+ completedPhases.remove(Stoppable.PHASE_NAME);
+ } else if (currentPhase.equals(Disposable.PHASE_NAME)) { completedPhases.remove(Initialisable.PHASE_NAME);
branches/mule-3.1.x/core/src/test/java/org/mule/lifecycle/LifecycleTransitionTestCase.java
(0 => 23787)
--- branches/mule-3.1.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
Loading...