View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.component;
8   
9   import org.mule.api.MuleContext;
10  import org.mule.api.MuleException;
11  import org.mule.api.component.Component;
12  import org.mule.api.lifecycle.Disposable;
13  import org.mule.api.lifecycle.Initialisable;
14  import org.mule.api.lifecycle.InitialisationException;
15  import org.mule.api.lifecycle.LifecycleCallback;
16  import org.mule.api.lifecycle.LifecycleException;
17  import org.mule.api.lifecycle.Startable;
18  import org.mule.api.lifecycle.Stoppable;
19  import org.mule.config.i18n.CoreMessages;
20  import org.mule.lifecycle.SimpleLifecycleManager;
21  
22  import org.apache.commons.logging.Log;
23  import org.apache.commons.logging.LogFactory;
24  
25  /**
26   * The lifecycle manager responsible for managing lifecycle transitions for a Mule
27   * service. The Mule service adds some additional states, namely pause and resume.
28   * The lifecycle manager manages lifecycle notifications and logging as well.
29   */
30  public class ComponentLifecycleManager extends SimpleLifecycleManager<Component>
31  {
32      /**
33       * logger used by this class
34       */
35      protected transient final Log logger = LogFactory.getLog(ComponentLifecycleManager.class);
36      protected MuleContext muleContext;
37  
38      public ComponentLifecycleManager(String name, Component component)
39      {
40          super(name, component);
41      }
42  
43      @Override
44      public void fireInitialisePhase(LifecycleCallback<Component> callback) throws InitialisationException
45      {
46          checkPhase(Initialisable.PHASE_NAME);
47          if (logger.isInfoEnabled()) logger.info("Initialising component: " + lifecycleManagerId);
48          try
49          {
50              invokePhase(Initialisable.PHASE_NAME, getLifecycleObject(), callback);
51          }
52          catch (InitialisationException e)
53          {
54              throw e;
55          }
56          catch (LifecycleException e)
57          {
58              throw new InitialisationException(e, (Initialisable) object);
59          }
60      }
61  
62      @Override
63      public void fireStartPhase(LifecycleCallback<Component> callback) throws MuleException
64      {
65          checkPhase(Startable.PHASE_NAME);
66          if (logger.isInfoEnabled()) logger.info("Starting component: " + lifecycleManagerId);
67          invokePhase(Startable.PHASE_NAME, getLifecycleObject(), callback);
68      }
69  
70      @Override
71      public void fireStopPhase(LifecycleCallback<Component> callback) throws MuleException
72      {
73          checkPhase(Stoppable.PHASE_NAME);
74          if (logger.isInfoEnabled()) logger.info("Stopping component: " + lifecycleManagerId);
75          invokePhase(Stoppable.PHASE_NAME, getLifecycleObject(), callback);
76      }
77  
78      @Override
79      public void fireDisposePhase(LifecycleCallback<Component> callback)
80      {
81          checkPhase(Disposable.PHASE_NAME);
82          if (logger.isInfoEnabled()) logger.info("Disposing component: " + lifecycleManagerId);
83          try
84          {
85              invokePhase(Disposable.PHASE_NAME, getLifecycleObject(), callback);
86          }
87          catch (LifecycleException e)
88          {
89              logger.warn(CoreMessages.failedToDispose(lifecycleManagerId), e);
90          }
91      }
92  
93  }