Author: sylvain Date: Thu Nov 11 10:03:58 2004 New Revision: 57450 Modified: cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java cocoon/trunk/status.xml Log: Some syncing between branches
Modified: cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java Thu Nov 11 10:03:58 2004 @@ -77,6 +77,7 @@ private String workDir = Constants.DEFAULT_WORK_DIR; private String logKit = null; protected String logger = null; + protected String logLevel = "ERROR"; private String userAgent = DEFAULT_USER_AGENT; private String accept = DEFAULT_ACCEPT; private List classList = new ArrayList(); @@ -88,8 +89,9 @@ // Internal Objects private CommandLineContext cliContext; + private LogKitLoggerManager logManager; private Cocoon cocoon; - protected static Logger log; + protected Logger log; private Map attributes = new HashMap(); private HashMap empty = new HashMap(); @@ -99,27 +101,30 @@ // INITIALISATION METHOD // public void initialize() throws Exception { - // @todo@ when does the logger get initialised? uv // @todo@ these should log then throw exceptions back to the caller, not use system.exit() - setLogLevel("ERROR"); - this.context = getDir(this.contextDir, "context"); - this.work = getDir(workDir, "working"); - - this.conf = getConfigurationFile(this.context, this.configFile); + // Create a new hierarchy. This is needed when CocoonBean is called from + // within a CocoonServlet call, in order not to mix logs + final Hierarchy hierarchy = new Hierarchy(); + + final Priority priority = Priority.getPriorityForName(logLevel); + hierarchy.setDefaultPriority(priority); + + // Install a temporary logger so that getDir() can log if needed + this.log = new LogKitLogger(hierarchy.getLoggerFor("")); try { + // First of all, initialize the logging system + + // Setup the application context with context-dir and work-dir that + // can be used in logkit.xconf + this.context = getDir(this.contextDir, "context"); + this.work = getDir(workDir, "working"); DefaultContext appContext = new DefaultContext(); - appContext.put(Constants.CONTEXT_CLASS_LOADER, - CocoonWrapper.class.getClassLoader()); - cliContext = new CommandLineContext(contextDir); - cliContext.enableLogging(log); - appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, cliContext); appContext.put(Constants.CONTEXT_WORK_DIR, work); - LogKitLoggerManager logKitLoggerManager = - new LogKitLoggerManager(Hierarchy.getDefaultHierarchy()); - logKitLoggerManager.enableLogging(log); + this.logManager = new LogKitLoggerManager(hierarchy); + this.logManager.enableLogging(log); if (this.logKit != null) { final FileInputStream fis = new FileInputStream(logKit); @@ -128,15 +133,24 @@ final Configuration logKitConf = builder.build(fis); final DefaultContext subcontext = new DefaultContext(appContext); subcontext.put("context-root", this.contextDir); - logKitLoggerManager.contextualize(subcontext); - logKitLoggerManager.configure(logKitConf); + subcontext.put("context-work", this.workDir); + this.logManager.contextualize(subcontext); + this.logManager.configure(logKitConf); if (logger != null) { - log = logKitLoggerManager.getLoggerForCategory(logger); + log = this.logManager.getLoggerForCategory(logger); } else { - log = logKitLoggerManager.getLoggerForCategory("cocoon"); + log = this.logManager.getLoggerForCategory("cocoon"); } } + this.conf = getConfigurationFile(this.context, this.configFile); + + cliContext = new CommandLineContext(contextDir); + cliContext.enableLogging(log); + + appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, cliContext); + appContext.put(Constants.CONTEXT_CLASS_LOADER, + CocoonWrapper.class.getClassLoader()); appContext.put(Constants.CONTEXT_CLASSPATH, getClassPath(contextDir)); appContext.put(Constants.CONTEXT_UPLOAD_DIR, contextDir + "upload-dir"); File cacheDir = getDir(workDir + File.separator + "cache-dir", "cache"); @@ -150,7 +164,7 @@ cocoon = new Cocoon(); ContainerUtil.enableLogging(cocoon, log); ContainerUtil.contextualize(cocoon, appContext); - cocoon.setLoggerManager(logKitLoggerManager); + cocoon.setLoggerManager(logManager); ContainerUtil.initialize(cocoon); } catch (Exception e) { @@ -171,7 +185,7 @@ * @return a <code>File</code> representing the configuration * @exception IOException if an error occurs */ - private static File getConfigurationFile(File dir, String configFile) + private File getConfigurationFile(File dir, String configFile) throws IOException { File conf; if (configFile == null) { @@ -209,7 +223,7 @@ /** * Try loading the configuration file from a single location */ - private static File tryConfigurationFile(String filename) { + private File tryConfigurationFile(String filename) { if (log.isDebugEnabled()) { log.debug("Trying configuration file at: " + filename); } @@ -237,19 +251,16 @@ if (!d.exists()) { if (!d.mkdirs()) { - log.error("Error creating " + type + " directory '" + d + "'"); throw new IOException( "Error creating " + type + " directory '" + d + "'"); } } if (!d.isDirectory()) { - log.error("'" + d + "' is not a directory."); throw new IOException("'" + d + "' is not a directory."); } if (!(d.canRead() && d.canWrite())) { - log.error("Directory '" + d + "' is not readable/writable"); throw new IOException( "Directory '" + d + "' is not readable/writable"); } @@ -298,9 +309,7 @@ * @param logLevel log level */ public void setLogLevel(String logLevel) { - final Priority priority = Priority.getPriorityForName(logLevel); - Hierarchy.getDefaultHierarchy().setDefaultPriority(priority); - CocoonWrapper.log = new LogKitLogger(Hierarchy.getDefaultHierarchy().getLoggerFor("")); + this.logLevel = logLevel; } /** @@ -384,6 +393,7 @@ this.initialized = false; ContainerUtil.dispose(this.cocoon); this.cocoon = null; + this.logManager.dispose(); if (log.isDebugEnabled()) { log.debug("Disposed"); } @@ -509,7 +519,7 @@ * @param context The context path * @return a <code>String</code> value */ - protected static String getClassPath(final String context) { + protected String getClassPath(final String context) { StringBuffer buildClassPath = new StringBuffer(); String classDir = context + "/WEB-INF/classes"; Modified: cocoon/trunk/status.xml ============================================================================== --- cocoon/trunk/status.xml (original) +++ cocoon/trunk/status.xml Thu Nov 11 10:03:58 2004 @@ -373,6 +373,11 @@ Scratchpad block: Restored CastorTransformer support for context beans, restored bean lookup logic, fixed sample. </action> + <action dev="SW" type="fix"> + The CocoonBean now creates its own private logger hierarchy, thus avoiding to + pollute the CocoonServlet hierarchy when called in that context (e.g. when + generating a static site from a CMS) + </action> <action dev="GP" type="add"> Added replacement for Excalibur Event package in org.apache.cocoon.components.thread and migrated most classes using their own @@ -387,10 +392,20 @@ <action dev="TC" type="add"> Javaflow block: Add parameter support </action> + <action dev="SW" type="add"> + CForms block: added widget states. All widgets can now have an "active" (default), "disabled" or "invisible" + state. Updated the stylesheets accordingly to use HTML's disabled inputs. + </action> <action dev="AG" type="fix" fixes-bug="29945" due-to="Christoph Gaffga" due-to-email="[EMAIL PROTECTED]"> Scratchpad block: BetwixtTransformer: removed deprecation warning with latest betwixt </action> + <action dev="SW" type="fix" fixes-bug="25951"> + Flowscript: enforce the explicit declaration of variables in the global + scope (attached to the session). This avoids the implicit declaration of + variables in the global scope when the 'var' keyword is missing, which + leads to weird bugs difficult to track down, especially with continuations. + </action> <action dev="ATC" type="update"> Deprecated the PHP block since the PHP servlet the generator depends on never worked properly. Explicitly excluded the PHP block from blocks.properties. @@ -623,7 +638,7 @@ custom publish/subscribe components. </action> <action dev="UH" type="add"> - Still in the scratchpad area at the time of this writing, added a + Still in the scratchpad area at the time of this writing, added a CachedSource proxy subclass for Sources that implement TraversableSource and InspectableSource (for instance WebDAVSource). </action>