Example

This is a complete example of a component. The example consists of these files:

Example 11.4. NotifierTwo.java

//     $Revision: 1.1.2.1 $
package com.kabira.snippets.components;

import com.kabira.platform.component.Notifier;

/**
 * Component notifier two
 */
public class NotifierTwo extends Notifier
{
    @Override
    protected void preConfigurationInitialize()
    {
        m_notifierName = getClass().getSimpleName();
        
        System.out.println(m_notifierName + ": - preConfigurationInitialize");
    }

    @Override
    protected void postConfigurationInitialize()
    {
        System.out.println(m_notifierName + ": - postConfigurationInitialize");

    }

    @Override
    protected void preConfigurationTerminate()
    {
        System.out.println(m_notifierName + ": - preConfigurationTerminate");

    }

    @Override
    protected void postConfigurationTerminate()
    {
        System.out.println(m_notifierName + ": - postConfigurationTerminate");
    }

    private String  m_notifierName;
}


Example 11.5. Defaults.java

//     $Revision: 1.1.2.1 $
package com.kabira.snippets.components;

import com.kabira.platform.kcs.Configuration;

/**
 * Default component configuration
 */
public class Defaults extends Configuration
{
    String  defaultValue;
}


Example 11.6. default.kcs

//     $Revision: 1.1.2.1 $
configuration "default" version "1.0" type "com.kabira.snippets.components"
{
        configure com.kabira.snippets.components
        {
                Defaults
                {
                        defaultValue = "hello world";
                };
        };
};


Example 11.7. ComponentMain.java

//     $Revision: 1.1.2.1 $
package com.kabira.snippets.components;

import com.kabira.platform.Transaction;
import com.kabira.platform.ManagedObject;


/**
 * Execute component example
 *
 * NOTE: This example requires the classpath to explicitly include the
 * directory that contains this snippet source so that the ast.properties
 * file is found.
 * 
 * <p>
 * <h2> Target Nodes</h2>
 * <ul>
 * <li> <b>domainnode</b> = A
 * </ul>
 */
public class ComponentMain
{
    /**
     * @param args  None supported
     */
    public static void main(String[] args)
    {
        System.out.println("Main executed");

        new Transaction("Components")
        {
            @Override
            protected void run() throws Rollback
            {
                for (Defaults defaults : ManagedObject.extent(Defaults.class ))
                {
                    System.out.println(
                        "Configured default value: " + defaults.defaultValue);
                }
            }

        }.execute();

        System.out.println("Main exiting");
    }
}


When main is executed the following output (annotation added) is generated.

[Note]

This example requires that snippet be run using a JAR file containing the ast.properties file.

Example 11.8. Example component output

#
#
#   Component initialization
#
[A] NotifierOne: - preConfigurationInitialize
[A] NotifierTwo: - preConfigurationInitialize
[A] NotifierOne: - postConfigurationInitialize
[A] NotifierTwo: - postConfigurationInitialize

#
#   Main execution
#
[A] Main executed
[A] Configured default value: hello world
[A] Main exiting

#
#   Component termination
#
[A] NotifierTwo: - preConfigurationTerminate
[A] NotifierOne: - preConfigurationTerminate
[A] NotifierTwo: - postConfigurationTerminate
[A] NotifierOne: - postConfigurationTerminate