Another important thing I missed in the previous email is the execution order. Cartridge Agent is fully respect the order you specify in the configuration file.
As an example; in the Initializing phase of the sample configuration, *StartListenersExtensionExecutor *will run before *ScriptExtensionExecutor.* Also, in the *ScriptExtensionExecutor *scripts will be executed in the order you specify. On Mon, Mar 10, 2014 at 2:20 PM, Nirmal Fernando <[email protected]>wrote: > Hi All, > > Current Stratos Cartridge Agent is not truly extensible and it's not that > easy to use it at the moment, with different different Cartridges > (Cartridges have features that are specific to them and it's not correct to > expect that every Cartridge opens up ports etc.). > > So, I've come up with following design for the Cartridge Agent. > > [image: Inline image 1] > > Cartridge Agent's flow is fully customizable now and it is simply a > collection of user defined collection of Phases. > > - A *Phase* corresponds to a period between two life cycle states of > the agent. eg: phase between started state to activated state would be > activating phase. > - A Phase consists of a collection of ExtensionExecutors. > - An *ExtensionExecutor* can be used to implement different functions > that agent should do within the Phase it belongs to. > - ExtensionExecutor can be a simple Java code, which is capable of > executing script files, checking connections to ports etc. > - *ScriptExtensionExecutor* is an implementation of the > ExtensionExecutor, which you can use to execute script files using Java's > Process.exec command. > - You can write custom Phases by extending > *org.apache.stratos.cartridge.agent.phase.Phase* abstract class and > also you can write custom ExtensionExecutors by extending > *org.apache.stratos.cartridge.agent.executor.ExtensionExecutor*abstract > class. > > *How to define the Agent's work-flow?* > > I've introduced a configuration file to define Agent's work-flow and its > structure is like this; > > *[<id-of-the-phase>]=<full-qualified-class-name-of-phase>* > > *<full-qualified-class-name-of-extension-executor>* > > > *<full-qualified-class-name-of-extension-executor>=<comma-separated-list-of-values>* > > *.....* > > *[<id-of-the-phase>]=<full-qualified-class-name-of-phase>* > > *.....* > > Path to the file should be set as a system property " > *agent.flow.file.path*". > > > *A sample is given below.* > > > _______________________________________________________________________________________________ > > > > > > > > > > > > > > > *[Initializing]=org.apache.stratos.cartridge.agent.phase.impl.InitializingPhaseorg.apache.stratos.cartridge.agent.executor.impl.StartListenersExtensionExecutororg.apache.stratos.cartridge.agent.executor.impl.ScriptExtensionExecutor=instance-started.sh,xxxxxxxxx.sh > [Starting]=org.apache.stratos.cartridge.agent.phase.impl.StartingPhaseorg.apache.stratos.cartridge.agent.executor.impl.ScriptExtensionExecutor=start-servers.shorg.apache.stratos.cartridge.agent.executor.impl.WaitTillActivateExtensionExecutor > org.apache.stratos.cartridge.agent.executor.impl.PersistenceVolumeExtensionExecutor[WorkingPhase]=org.apache.stratos.cartridge.agent.phase.impl.WorkingPhaseorg.apache.stratos.cartridge.agent.executor.impl.LogPublisherExtensionExecutor > org.apache.stratos.cartridge.agent.executor.impl.KeepAgentLiveExtensionExecutor[CleanUpPhase]=org.apache.stratos.cartridge.agent.phase.impl.CleanUpPhase* > > ________________________________________________________________________________________________ > > > I'll be committing these changes soon. > > Let me know your thoughts too. > > -- > Best Regards, > Nirmal > > Nirmal Fernando. > PPMC Member & Committer of Apache Stratos, > Senior Software Engineer, WSO2 Inc. > > Blog: http://nirmalfdo.blogspot.com/ > -- Best Regards, Nirmal Nirmal Fernando. PPMC Member & Committer of Apache Stratos, Senior Software Engineer, WSO2 Inc. Blog: http://nirmalfdo.blogspot.com/
<<inline: Cartridge Agent Design.png>>
