Author: pier Date: Wed Nov 3 09:23:19 2004 New Revision: 56494 Added: cocoon/whiteboard/kernel/sources/blocks/commons-dbcp/cocoon.xml cocoon/whiteboard/kernel/sources/extensions/logging/cocoon.xml cocoon/whiteboard/kernel/sources/extensions/logging/src/ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/cocoon/ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/cocoon/kernel/ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/cocoon/kernel/plugins/ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/cocoon/kernel/plugins/LoggingPlugin.java cocoon/whiteboard/kernel/sources/interfaces/jdbc-datasource/cocoon.xml cocoon/whiteboard/kernel/sources/modules/commons-collections/cocoon.xml cocoon/whiteboard/kernel/sources/modules/commons-pool/cocoon.xml Removed: cocoon/whiteboard/kernel/sources/blocks/commons-dbcp/block.xml cocoon/whiteboard/kernel/sources/extensions/logging/block.xml cocoon/whiteboard/kernel/sources/interfaces/jdbc-datasource/block.xml cocoon/whiteboard/kernel/sources/modules/commons-collections/block.xml cocoon/whiteboard/kernel/sources/modules/commons-pool/block.xml cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/plugins/LoggingPlugin.java Log: Moving LoggingPlugin sources together with the logging plugin. Renaming descriptor files from "block.xml" to "cocoon.xml" as there are different kinds of "block" now.
Added: cocoon/whiteboard/kernel/sources/blocks/commons-dbcp/cocoon.xml ============================================================================== --- (empty file) +++ cocoon/whiteboard/kernel/sources/blocks/commons-dbcp/cocoon.xml Wed Nov 3 09:23:19 2004 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<block xmlns="http://apache.org/cocoon/blocks/descriptor/1.0" + id="http://cocoon.apache.org/blocks/jakarta/commons-dbcp/1.2.1"> + + <requirements> + <requires module="http://cocoon.apache.org/abstracts/jakarta/commons-pool/1.2"/> + </requirements> + + <implementations> + <implements interface="http://cocoon.apache.org/blocks/interfaces/jdbc-datasource/1.0"/> + </implementations> + + <libraries> + <library href="commons-dbcp-1.2.1.jar"/> + </libraries> + + <provides component="org.apache.commons.dbcp.BasicDataSource"/> + +</block> Added: cocoon/whiteboard/kernel/sources/extensions/logging/cocoon.xml ============================================================================== --- (empty file) +++ cocoon/whiteboard/kernel/sources/extensions/logging/cocoon.xml Wed Nov 3 09:23:19 2004 @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<extension xmlns="http://apache.org/cocoon/blocks/descriptor/1.0" + id="http://cocoon.apache.org/blocks/plugins/logging/1.0.0"> + + <plugin + class="org.apache.cocoon.kernel.plugins.LoggingPlugin" + configuration-element="logging"/> + + <libraries> + <library href="commons-logging-1.0.4.jar"/> + <library href="log4j-1.2.9.jar"/> + </libraries> + +</extension> Added: cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/cocoon/kernel/plugins/LoggingPlugin.java ============================================================================== --- (empty file) +++ cocoon/whiteboard/kernel/sources/extensions/logging/src/org/apache/cocoon/kernel/plugins/LoggingPlugin.java Wed Nov 3 09:23:19 2004 @@ -0,0 +1,268 @@ +/* =============================================================================== * + * Copyright (C) 1999-2004, The Apache Software Foundation. All rights reserved. * + * * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use * + * this file except in compliance with the License. You may obtain a copy of the * + * License at <http://www.apache.org/licenses/LICENSE-2.0>. * + * * + * Unless required by applicable law or agreed to in writing, software distributed * + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * + * CONDITIONS OF ANY KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations under the License. * + * =============================================================================== */ +package org.apache.cocoon.kernel.plugins; + +import java.net.URL; +import java.util.Enumeration; + +import org.apache.commons.logging.LogFactory; +import org.apache.commons.logging.impl.Log4jFactory; +import org.apache.log4j.Appender; +import org.apache.log4j.Category; +import org.apache.log4j.Level; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.apache.log4j.spi.HierarchyEventListener; +import org.apache.log4j.spi.LoggerFactory; +import org.apache.log4j.spi.LoggerRepository; +import org.apache.log4j.spi.RepositorySelector; +import org.apache.log4j.xml.DOMConfigurator; + +/** + * <p>The [EMAIL PROTECTED] LoggingPlugin} enables the use of Log4J and Commons-Logging + * in a kernel-aware way.</p> + * + * @author <a href="mailto:[EMAIL PROTECTED]">Pier Fumagalli</a> + * @author Copyright © 2000-2004 <a href="http://www.apache.org/">The Apache + * Software Foundation</a>. All rights reserved. + */ +public class LoggingPlugin extends AbstractPlugin +implements LoggerRepository, RepositorySelector { + + /** <p>The original [EMAIL PROTECTED] LoggerRepository} of Log4J.</p> */ + private LoggerRepository repository = null; + /** <p>The logger originally associated with the kernel.</p> */ + private org.apache.cocoon.kernel.startup.Logger original = null; + + /** + * <p>Create a new [EMAIL PROTECTED] LoggingPlugin} instance.</p> + */ + public LoggingPlugin() { + this.repository = LogManager.getLoggerRepository(); + } + + public void initialize() { + /* Configure Log4J if we were told to do so */ + String conf = this.getConfiguration().getStringAttribute("log4j", null); + if (conf != null) try { + URL url = new URL(this.getConfiguration().locationURL(), conf); + DOMConfigurator configurator = new DOMConfigurator(); + configurator.doConfigure(url, this.repository); + } catch (Throwable throwable) { + this.error("Cannot configure Log4J", throwable); + } + + /* Error or no error, we _are_ using Log4J, no questions asked */ + this.debug("Switching logger implementation"); + this.original = this.getKernel().getLogger(); + this.getKernel().setLogger(new Wrapper(Logger.getLogger("kernel"))); + this.debug("Switched logger implementation"); + + /* Replace the Log4J Logger Repository */ + this.debug("Configuring Log4J"); + try { + LogManager.setRepositorySelector(this, null); + } catch (Throwable t) { + this.error("Unable to configure Log4J repository selector", t); + } + + /* And make sure that commons has the Log4J factory configured */ + String factory = Log4jFactory.class.getName(); + System.setProperty(LogFactory.FACTORY_PROPERTY, factory); + LogFactory.getLog(this.getClass()).debug("Commons-Logging configured"); + } + + public void destroy() { + this.debug("Restoring logger implementation"); + this.getKernel().setLogger(this.original); + this.debug("Restored logger implementation"); + this.repository.shutdown(); + } + + /* =========================================================================== */ + /* UNDERSTANDABLE LOG4J METHODS */ + /* =========================================================================== */ + + /** + * <p>Return ourselves.</p> + */ + public LoggerRepository getLoggerRepository() { + return(this); + } + + /** + * <p>Return the logger associated with the calling block.</p> + */ + public Logger getLogger(String arg0) { + return this.repository.getLogger(this.getLoggerName(arg0)); + } + + /** + * <p>Return the logger associated with the calling block.</p> + */ + public Logger getLogger(String arg0, LoggerFactory arg1) { + return this.repository.getLogger(this.getLoggerName(arg0), arg1); + } + + /** + * <p>Return the logger associated with the calling block.</p> + */ + public Logger getRootLogger() { + return this.repository.getLogger(this.getLoggerName(null)); + } + + /** + * <p>Check if the logger specified exists.</p> + */ + public Logger exists(String arg0) { + return this.repository.exists(this.getLoggerName(arg0)); + } + + /** + * <p>Canonicalize the name of the logger to return.</p> + */ + public String getLoggerName(String arg0) { + String name = Utilities.getCallerName(); + if (name == null) { + if (arg0 == null) return "unknown"; + if (arg0.length() == 0) return "unknown"; + return arg0; + } else { + if (arg0 == null) return name; + if (arg0.length() == 0) return name; + return (name + "." + arg0); + } + } + + /** + * <p>Simply ignore this call from the kernel.</p> + */ + public void resetConfiguration() { + // Nothing to do... + } + + /** + * <p>Simply ignore this call from the kernel.</p> + */ + public void shutdown() { + // Nothing to do... + } + + /* =========================================================================== */ + /* GOD KNOWS WHAT THIS DOES METHODS GO STRAIGHT TO LOG4J (TOO COMPLICATED) */ + /* =========================================================================== */ + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public void addHierarchyEventListener(HierarchyEventListener arg0) { + this.repository.addHierarchyEventListener(arg0); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public boolean isDisabled(int arg0) { + return this.repository.isDisabled(arg0); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public void setThreshold(Level arg0) { + this.repository.setThreshold(arg0); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public void setThreshold(String arg0) { + this.repository.setThreshold(arg0); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public void emitNoAppenderWarning(Category arg0) { + this.repository.emitNoAppenderWarning(arg0); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public Level getThreshold() { + return this.repository.getThreshold(); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public Enumeration getCurrentLoggers() { + return this.repository.getCurrentLoggers(); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public Enumeration getCurrentCategories() { + return this.repository.getCurrentCategories(); + } + + /** + * <p>Forwarded directly to the Log4J original [EMAIL PROTECTED] LoggerRepository}.</p> + */ + public void fireAddAppenderEvent(Category arg0, Appender arg1) { + this.repository.fireAddAppenderEvent(arg0, arg1); + } + + /* =========================================================================== */ + /* WRAPPER FOR THE KERNEL LOGGER AROUND LOG4J */ + /* =========================================================================== */ + + /** + * <p>A simple wrapper for the internal kernel logger.</p> + */ + private static class Wrapper extends org.apache.cocoon.kernel.startup.Logger { + + private Logger logger = null; + + private Wrapper(Logger logger) { + if (logger == null) throw new NullPointerException("Null logger"); + this.logger = logger; + } + + public void debug(String message) { + this.logger.debug(message); + } + + public void debug(String message, Throwable throwable) { + this.logger.debug(message, throwable); + } + + public void log(String message) { + this.logger.info(message); + } + + public void log(String message, Throwable throwable) { + this.logger.info(message, throwable); + } + + public void error(String message) { + this.logger.error(message); + } + + public void error(String message, Throwable throwable) { + this.logger.error(message, throwable); + } + } +} Added: cocoon/whiteboard/kernel/sources/interfaces/jdbc-datasource/cocoon.xml ============================================================================== --- (empty file) +++ cocoon/whiteboard/kernel/sources/interfaces/jdbc-datasource/cocoon.xml Wed Nov 3 09:23:19 2004 @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<interface xmlns="http://apache.org/cocoon/blocks/descriptor/1.0" + id="http://cocoon.apache.org/blocks/interfaces/jdbc-datasource/1.0"> + + <exposes interface="javax.sql.DataSource"/> + +</interface> \ No newline at end of file Added: cocoon/whiteboard/kernel/sources/modules/commons-collections/cocoon.xml ============================================================================== --- (empty file) +++ cocoon/whiteboard/kernel/sources/modules/commons-collections/cocoon.xml Wed Nov 3 09:23:19 2004 @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<module xmlns="http://apache.org/cocoon/blocks/descriptor/1.0" + id="http://cocoon.apache.org/abstracts/jakarta/commons-collections/3.1"> + + <libraries> + <library href="commons-collections-3.1.jar"/> + </libraries> + +</module> Added: cocoon/whiteboard/kernel/sources/modules/commons-pool/cocoon.xml ============================================================================== --- (empty file) +++ cocoon/whiteboard/kernel/sources/modules/commons-pool/cocoon.xml Wed Nov 3 09:23:19 2004 @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<module xmlns="http://apache.org/cocoon/blocks/descriptor/1.0" + id="http://cocoon.apache.org/abstracts/jakarta/commons-pool/1.2"> + + <extensions> + <extends module="http://cocoon.apache.org/abstracts/jakarta/commons-collections/3.1"/> + </extensions> + + <libraries> + <library href="commons-pool-1.2.jar"/> + </libraries> + +</module>