package container; import java.io.File; import java.io.InputStream; import org.apache.avalon.fortress.ContainerManager; import org.apache.avalon.fortress.impl.DefaultContainerManager; import org.apache.avalon.fortress.util.ContextManager; import org.apache.avalon.fortress.util.ContextManagerConstants; import org.apache.avalon.fortress.util.FortressConfig; import org.apache.avalon.framework.configuration.DefaultConfiguration; import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.DefaultContext; public final class Builder { public static final String JAVA_HOME = "java-home"; public static ServerContainer createContainer( final InputStream configuration, final InputStream logging ) throws Exception { // Set up all the preferences for Fortress final FortressConfig config = new FortressConfig(buildLocalContext()); config.setContainerClass(ServerContainer.class); config.setContextDirectory("./"); config.setWorkDirectory("./"); final DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(); config.setContainerConfiguration(builder.build(configuration)); config.setLoggerManagerConfiguration(builder.build(logging)); final ContextManager contextManager = new ContextManager(config.getContext(), null); contextManager.initialize(); // Initialize root container containerManager = new DefaultContainerManager(contextManager); ContainerUtil.initialize(containerManager); return (ServerContainer) containerManager.getContainer(); } private static void ensureExists( final String filename ) throws IllegalStateException { final File file = new File(filename); if (file.exists()) { if (!file.isFile()) { throw new IllegalStateException(filename + " exists but is not a file"); } } else { throw new IllegalStateException(filename + " does not exist"); } } private static DefaultConfiguration buildConfiguration( final String configName ) throws Exception { final DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(); DefaultConfiguration config = (DefaultConfiguration) builder.buildFromFile(configName); return config; } private static Context buildLocalContext() { final DefaultContext context = new DefaultContext(FortressConfig.createDefaultConfig()); context.put(ContextManagerConstants.LOG_CATEGORY, "container"); return context; } public static void disposeContainer() throws Exception { // Dispose the container ready to shutdown ContainerUtil.shutdown(containerManager); containerManager = null; } private Builder() { System.err.println("Unused constructor"); } private static ContainerManager containerManager; }