I have written an Ant task for running Fortress (see attachment). If this is of general interest then I can beef up the JavaDocs and commit it. However, the question is then: where should it go? Under fortress source tree?


Example of usage:
<target name="run" depends="compile">
<taskdef name="fortress" classname="org.apache.avalon.fortress.ant.FortressRunner">
<classpath refid="classpath"/>
</taskdef>
<fortress
containerClass="org.apache.avalon.fortress.impl.DefaultContainer"
contextDirectory="./"
workDirectory="./"
containerConfiguration="resource://app.xconf"
loggerManagerConfiguration="resource://app.xlog"
roleManagerConfiguration="resource://app.roles"


               lookupComponentRole="com.mycompany.ui.swing.Runnable/gui"
               invokeMethod="run"
               />
   </target>

Rgds,
Neeme
package org.apache.avalon.fortress.ant;

import java.lang.reflect.Method;

import org.apache.avalon.fortress.impl.DefaultContainer;
import org.apache.avalon.fortress.impl.DefaultContainerManager;
import org.apache.avalon.fortress.util.FortressConfig;
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.commons.logging.impl.AvalonLogger;

/**
 * 
 * @author neeme
 */
public class FortressRunner {

    private final FortressConfig config = new FortressConfig();

    private String lookupComponentRole = null;
    private String invokeMethod = null;

    public void execute() {
        DefaultContainerManager cm = null;
        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
        try {
            // Get the root container initialized
            cm = new DefaultContainerManager(config.getContext());
            ContainerUtil.initialize(cm);
            // set the static logger for commons logging 
            AvalonLogger.setDefaultLogger(cm.getLogger());
            System.setProperty("org.apache.commons.logging.Log", 
"org.apache.commons.logging.impl.AvalonLogger");

            DefaultContainer container = (DefaultContainer) cm.getContainer();
            ServiceManager sm = container.getServiceManager();
            Object component = sm.lookup(lookupComponentRole);
            Method method = component.getClass().getMethod(invokeMethod, null);
            method.invoke(component, null);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Properly clean up when we are done
            org.apache.avalon.framework.container.ContainerUtil.dispose( cm );
        }
        //system exit, in case we were running some GUI and some thread is still active
        System.exit(0);
    }

    /**
     * The container implementation has to be a subclass of 
     * <code>org.apache.avalon.fortress.impl.DefaultContainer</code>.
     * 
     * @param containerClass fully qualified class name of the container 
implementation class.
     */
    public void setContainerClass(String containerClass) throws Exception {
        config.setContextClassLoader(getClass().getClassLoader());
        config.setContainerClass(containerClass);
    }

    /**
     * @param string
     */
    public void setContainerConfiguration(String containerConfiguration) {
        config.setContainerConfiguration(containerConfiguration);
    }

    /**
     * @param string
     */
    public void setContextDirectory(String contextDirectory) {
        config.setContextDirectory(contextDirectory);
    }

    /**
     * @param string
     */
    public void setInstrumentManagerConfiguration(String 
instrumentManagerConfiguration) {
        config.setInstrumentManagerConfiguration(instrumentManagerConfiguration);
    }

    /**
     * @param string
     */
    public void setLoggerManagerConfiguration(String loggerManagerConfiguration) {
        config.setLoggerManagerConfiguration(loggerManagerConfiguration);
    }

    /**
     * @param string
     */
    public void setRoleManagerConfiguration(String roleManagerConfiguration) {
        config.setRoleManagerConfiguration(roleManagerConfiguration);
    }

    /**
     * @param string
     */
    public void setWorkDirectory(String workDirectory) {
        config.setWorkDirectory(workDirectory);
    }

    /**
     * @param string
     */
    public void setInvokeMethod(String invokeMethod) {
        this.invokeMethod = invokeMethod;
    }

    /**
     * @param string
     */
    public void setLookupComponentRole(String lookupComponentRole) {
        this.lookupComponentRole = lookupComponentRole;
    }

    public static void main(String[] args) throws Exception {
        FortressRunner runner = new FortressRunner();
        runner.setContainerClass("org.apache.avalon.fortress.impl.DefaultContainer");
        runner.setContextDirectory("./");
        runner.setWorkDirectory("./");
        runner.setContainerConfiguration("resource://app.xconf");
        runner.setLoggerManagerConfiguration("resource://app.xlog");
        runner.setRoleManagerConfiguration("resource://app.roles");
        runner.setLookupComponentRole("com.inpoc.phonecontent.ui.swing.Runnable/gui");
        runner.setInvokeMethod("run");
        runner.execute();
    }

}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to