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]
