[seam-dev] Re: [seam-commits] Seam SVN: r10542 - in modules/trunk: logging and 15 other directories.

Pete Muir pmuir at redhat.com
Tue Apr 21 06:25:08 EDT 2009


With Web Beans, anything we classify an "extension" is impl  
independent (e.g. logger, xsd generator, seam bridge, spring bridge)  
whilst the "environment support" isn't (Java SE, Servlet containers)...

On 21 Apr 2009, at 11:06, Pete Muir wrote:

> The Web Beans version is implementation independent (check out the  
> Extensions chapter :-)
>
> On 21 Apr 2009, at 11:00, Shane Bryzak wrote:
>
>> Do we want a dependency on webbeans though? I thought this stuff  
>> was supposed to be implementation-independent.
>>
>> Pete Muir wrote:
>>> Shane,
>>>
>>> We've already developed the logging module for webbeans - see  
>>> org.jboss.webbeans:webbeans-logger and org.jboss.webbeans:webbeans- 
>>> logging
>>>
>>> On 21 Apr 2009, at 10:38, seam-commits at lists.jboss.org wrote:
>>>
>>>> Author: shane.bryzak at jboss.com
>>>> Date: 2009-04-21 05:38:36 -0400 (Tue, 21 Apr 2009)
>>>> New Revision: 10542
>>>>
>>>> Added:
>>>> modules/trunk/logging/
>>>> modules/trunk/logging/pom.xml
>>>> modules/trunk/logging/src/
>>>> modules/trunk/logging/src/main/
>>>> modules/trunk/logging/src/main/java/
>>>> modules/trunk/logging/src/main/java/org/
>>>> modules/trunk/logging/src/main/java/org/jboss/
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> JDKProvider.java
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/Log.java
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log4JProvider.java
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/LogImpl.java
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogProvider.java
>>>> modules/trunk/logging/src/main/java/org/jboss/seam/log/Logging.java
>>>> modules/trunk/logging/target/
>>>> modules/trunk/logging/target/classes/
>>>> modules/trunk/logging/target/classes/org/
>>>> modules/trunk/logging/target/classes/org/jboss/
>>>> modules/trunk/logging/target/classes/org/jboss/seam/
>>>> modules/trunk/logging/target/classes/org/jboss/seam/log/
>>>> modules/trunk/parent/
>>>> modules/trunk/parent/pom.xml
>>>> Modified:
>>>> modules/trunk/security/pom.xml
>>>> modules/trunk/version-matrix/pom.xml
>>>> Log:
>>>> added logging module, parent pom, updated version-matrix pom
>>>>
>>>> Added: modules/trunk/logging/pom.xml
>>>> ===================================================================
>>>> --- modules/trunk/logging/pom.xml                            (rev  
>>>> 0)
>>>> +++ modules/trunk/logging/pom.xml    2009-04-21 09:38:36 UTC (rev  
>>>> 10542)
>>>> @@ -0,0 +1,22 @@
>>>> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
>>>> " xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd 
>>>> ">
>>>> +   <parent>
>>>> +      <artifactId>seam-parent</artifactId>
>>>> +      <groupId>org.jboss.seam</groupId>
>>>> +      <version>3.0.0-SNAPSHOT</version>
>>>> +   </parent>
>>>> +
>>>> +   <modelVersion>4.0.0</modelVersion>
>>>> +   <groupId>org.jboss.seam</groupId>
>>>> +   <artifactId>seam-logging</artifactId>
>>>> +   <version>3.0.0-SNAPSHOT</version>
>>>> +   <name>Seam Logging</name>
>>>> +   <dependencies>
>>>> +
>>>> +      <dependency>
>>>> +         <groupId>log4j</groupId>
>>>> +         <artifactId>log4j</artifactId>
>>>> +         <optional>true</optional>
>>>> +      </dependency>
>>>> +
>>>> +   </dependencies>
>>>> +</project>
>>>>
>>>> Added: modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> JDKProvider.java
>>>> ===================================================================
>>>> --- modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> JDKProvider.java                            (rev 0)
>>>> +++ modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> JDKProvider.java    2009-04-21 09:38:36 UTC (rev 10542)
>>>> @@ -0,0 +1,140 @@
>>>> +package org.jboss.seam.log;
>>>> +
>>>> +import java.util.logging.Level;
>>>> +import java.util.logging.Logger;
>>>> +
>>>> +/**
>>>> + *
>>>> + * @author Gavin King
>>>> + *
>>>> + */
>>>> +class JDKProvider implements LogProvider
>>>> +{
>>>> +   private final Logger logger;
>>>> +   private final boolean isWrapped;
>>>> +
>>>> +   JDKProvider(String category, boolean wrapped)
>>>> +   {
>>>> +      this.logger = Logger.getLogger(category);
>>>> +      this.isWrapped = wrapped;
>>>> +   }
>>>> +
>>>> +   private void log(Level level, Object object, Throwable ex)
>>>> +   {
>>>> +
>>>> +      if (logger.isLoggable(level))
>>>> +      {
>>>> +         Throwable dummyException = new Throwable();
>>>> +         StackTraceElement locations[] =  
>>>> dummyException.getStackTrace();
>>>> +         String className = "unknown";
>>>> +         String methodName = "unknown";
>>>> +         int depth = isWrapped ? 3 : 2;
>>>> +         if (locations != null && locations.length > depth)
>>>> +         {
>>>> +            StackTraceElement caller = locations[depth];
>>>> +            className = caller.getClassName();
>>>> +            methodName = caller.getMethodName();
>>>> +         }
>>>> +         if (ex == null)
>>>> +         {
>>>> +            logger.logp(level, className, methodName,  
>>>> String.valueOf(object));
>>>> +         }
>>>> +         else
>>>> +         {
>>>> +            logger.logp(level, className, methodName,  
>>>> String.valueOf(object), ex);
>>>> +         }
>>>> +      }
>>>> +
>>>> +   }
>>>> +
>>>> +   public void debug(Object object, Throwable t)
>>>> +   {
>>>> +      log(Level.FINE, object, t);
>>>> +   }
>>>> +
>>>> +   public void debug(Object object)
>>>> +   {
>>>> +      log(Level.FINE, object, null);
>>>> +   }
>>>> +
>>>> +   public void error(Object object, Throwable t)
>>>> +   {
>>>> +      log(Level.SEVERE, object, t);
>>>> +   }
>>>> +
>>>> +   public void error(Object object)
>>>> +   {
>>>> +      log(Level.SEVERE, object, null);
>>>> +   }
>>>> +
>>>> +   public void fatal(Object object, Throwable t)
>>>> +   {
>>>> +      log(Level.SEVERE, object, t);
>>>> +   }
>>>> +
>>>> +   public void fatal(Object object)
>>>> +   {
>>>> +      log(Level.SEVERE, object, null);
>>>> +   }
>>>> +
>>>> +   public void info(Object object, Throwable t)
>>>> +   {
>>>> +      log(Level.INFO, object, t);
>>>> +   }
>>>> +
>>>> +   public void info(Object object)
>>>> +   {
>>>> +      log(Level.INFO, object, null);
>>>> +   }
>>>> +
>>>> +   public boolean isDebugEnabled()
>>>> +   {
>>>> +      return logger.isLoggable(Level.FINE);
>>>> +   }
>>>> +
>>>> +   public boolean isErrorEnabled()
>>>> +   {
>>>> +      return logger.isLoggable(Level.SEVERE);
>>>> +   }
>>>> +
>>>> +   public boolean isFatalEnabled()
>>>> +   {
>>>> +      return logger.isLoggable(Level.SEVERE);
>>>> +   }
>>>> +
>>>> +   public boolean isInfoEnabled()
>>>> +   {
>>>> +      return logger.isLoggable(Level.INFO);
>>>> +   }
>>>> +
>>>> +   public boolean isTraceEnabled()
>>>> +   {
>>>> +      return logger.isLoggable(Level.FINER);
>>>> +   }
>>>> +
>>>> +   public boolean isWarnEnabled()
>>>> +   {
>>>> +      return logger.isLoggable(Level.WARNING);
>>>> +   }
>>>> +
>>>> +   public void trace(Object object, Throwable t)
>>>> +   {
>>>> +      log(Level.FINER, object, t);
>>>> +   }
>>>> +
>>>> +   public void trace(Object object)
>>>> +   {
>>>> +      log(Level.FINER, object, null);
>>>> +   }
>>>> +
>>>> +   public void warn(Object object, Throwable t)
>>>> +   {
>>>> +      log(Level.WARNING, object, t);
>>>> +   }
>>>> +
>>>> +   public void warn(Object object)
>>>> +   {
>>>> +      log(Level.WARNING, object, null);
>>>> +   }
>>>> +
>>>> +}
>>>>
>>>> Added: modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log.java
>>>> ===================================================================
>>>> --- modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log.java                            (rev 0)
>>>> +++ modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log.java    2009-04-21 09:38:36 UTC (rev 10542)
>>>> @@ -0,0 +1,86 @@
>>>> +package org.jboss.seam.log;
>>>> +
>>>> +/**
>>>> + * <p>A <code>Log</code> object is used to log messages.
>>>> + * They will be logged in any environment that has setup a  
>>>> logging service
>>>> + * such as Log4J or the standard JDK logging facilities.  In  
>>>> fact, this
>>>> + * logging interface is very similar to the other facilities  
>>>> with the
>>>> + * difference that logging methods also take any number of  
>>>> optional
>>>> + * parameters beyond the message object for later interpolation
>>>> + * into the message.</p>
>>>> + *
>>>> + * <p>The idea of using interpolation parameters is very  
>>>> important for
>>>> + * performance reasons in production code.  Normally developers  
>>>> write
>>>> + * logging messages similar to this one:
>>>> + * <pre>
>>>> + *    log.debug("Started processing of " + obj1 + " with action  
>>>> " + obj2);
>>>> + * </pre>
>>>> + * The problem that arises at runtime in production systems, is  
>>>> that DEBUG
>>>> + * level logging may not be enabled.  And even if this logging  
>>>> is going to
>>>> + * be a no-op call, Java must still build the string dynamically  
>>>> that is the
>>>> + * argument to the call.  It is the building of this string that  
>>>> can be quite
>>>> + * time consuming.  The more complex the objects being  
>>>> concatenated are, the
>>>> + * worse the time penalty incurred is.  And this time is  
>>>> completely wasted
>>>> + * since the string may never be used.</p>
>>>> + *
>>>> + * <p>Normally to combat the problem of making this call and  
>>>> building the
>>>> + * string dynamically, the developer uses a conditional  
>>>> statement to invoke
>>>> + * the call only if the corresponding logging level is enabled.   
>>>> So the above
>>>> + * call may end up looking like:
>>>> + * <pre>
>>>> + *    if (log.isDebugEnabled())
>>>> + *    {
>>>> + *       log.debug("Started processing of " + obj1 + " with  
>>>> action " + obj2);
>>>> + *    }
>>>> + * </pre>
>>>> + * Ideally, this structure should always be used to avoid the  
>>>> cost of building the
>>>> + * dynamic string (concatenation) and making the unnecessary  
>>>> call.  The only
>>>> + * drawback to this is that code can become less readable.  In  
>>>> some cases, there
>>>> + * might be more code devoted to logging than the actual  
>>>> behavior required by a
>>>> + * method.</p>
>>>> + *
>>>> + * <p>A cleaner way to do the logging is to use this interface  
>>>> where simple
>>>> + * objects without any concatenation are passed as arguments.   
>>>> Albeit the call
>>>> + * itself may still be a no-op when the logging level is not  
>>>> enabled, this is
>>>> + * still much smaller than the concatenation process with  
>>>> dynamic strings.  Each
>>>> + * of the methods defined here will first check to see if the  
>>>> logging level is enabled,
>>>> + * if that feature exists in the underlying logging system.  If  
>>>> and only if that logging
>>>> + * level is enabled, will the implementation proceed with  
>>>> concatenation of the strings
>>>> + * and objects passed.  So the above code using this interface  
>>>> becomes:
>>>> + * <pre>
>>>> + *    log.debug("Started processing of {0} with action {1},  
>>>> obj1, obj2);
>>>> + * </pre>
>>>> + * </p>
>>>> + *
>>>> + * <p>The interpolation of parameters into the message string  
>>>> are done using
>>>> + * {@link java.text.MessageFormat}.  See the documentation on  
>>>> that class for
>>>> + * more ideas of interpolation possibilities.  In the above  
>>>> code, <code>obj1</code>
>>>> + * and <code>obj2</code> simply have their <code>toString()</ 
>>>> code> methods invoked
>>>> + * to produce a string which is then concatenated.</p>
>>>> + *
>>>> + * @author Gavin King
>>>> + * @author David Allen
>>>> + *
>>>> + */
>>>> +public interface Log
>>>> +{
>>>> +   public boolean isDebugEnabled();
>>>> +   public boolean isErrorEnabled();
>>>> +   public boolean isFatalEnabled();
>>>> +   public boolean isInfoEnabled();
>>>> +   public boolean isTraceEnabled();
>>>> +   public boolean isWarnEnabled();
>>>> +   public void trace(Object object, Object... params);
>>>> +   public void trace(Object object, Throwable t, Object...  
>>>> params);
>>>> +   public void debug(Object object, Object... params);
>>>> +   public void debug(Object object, Throwable t, Object...  
>>>> params);
>>>> +   public void info(Object object, Object... params);
>>>> +   public void info(Object object, Throwable t, Object... params);
>>>> +   public void warn(Object object, Object... params);
>>>> +   public void warn(Object object, Throwable t, Object... params);
>>>> +   public void error(Object object, Object... params);
>>>> +   public void error(Object object, Throwable t, Object...  
>>>> params);
>>>> +   public void fatal(Object object, Object... params);
>>>> +   public void fatal(Object object, Throwable t, Object...  
>>>> params);
>>>> +
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Added: modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log4JProvider.java
>>>> ===================================================================
>>>> --- modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log4JProvider.java                            (rev 0)
>>>> +++ modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Log4JProvider.java    2009-04-21 09:38:36 UTC (rev 10542)
>>>> @@ -0,0 +1,135 @@
>>>> +package org.jboss.seam.log;
>>>> +
>>>> +import org.apache.log4j.Level;
>>>> +import org.apache.log4j.Logger;
>>>> +
>>>> +/**
>>>> + *
>>>> + * @author Gavin King
>>>> + *
>>>> + */
>>>> +final class Log4JProvider implements LogProvider
>>>> +{
>>>> +   private final Logger logger;
>>>> +   private final boolean isWrapped;
>>>> +
>>>> +   private static final String LOG_IMPL_FQCN =  
>>>> LogImpl.class.getName();
>>>> +   private static final String LOG_PROVIDER_FQCN =  
>>>> Log4JProvider.class.getName();
>>>> +
>>>> +   private static final Level TRACE;
>>>> +   static
>>>> +   {
>>>> +      Object trace;
>>>> +      try
>>>> +      {
>>>> +         trace = Level.class.getDeclaredField("TRACE").get(null);
>>>> +      }
>>>> +      catch (Exception e)
>>>> +      {
>>>> +         trace = Level.DEBUG;
>>>> +      }
>>>> +      TRACE = (Level) trace;
>>>> +   }
>>>> +
>>>> +   Log4JProvider(String category, boolean wrapped)
>>>> +   {
>>>> +      logger = Logger.getLogger(category);
>>>> +      isWrapped = wrapped;
>>>> +   }
>>>> +
>>>> +   private String getFQCN()
>>>> +   {
>>>> +      return isWrapped ? LOG_IMPL_FQCN : LOG_PROVIDER_FQCN;
>>>> +   }
>>>> +
>>>> +   public void debug(Object object)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.DEBUG, object, null);
>>>> +   }
>>>> +
>>>> +   public void debug(Object object, Throwable t)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.DEBUG, object, t);
>>>> +   }
>>>> +
>>>> +   public void error(Object object)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.ERROR, object, null);
>>>> +   }
>>>> +
>>>> +   public void error(Object object, Throwable t)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.ERROR, object, t);
>>>> +   }
>>>> +
>>>> +   public void fatal(Object object)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.FATAL, object, null);
>>>> +   }
>>>> +
>>>> +   public void fatal(Object object, Throwable t)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.FATAL, object, t);
>>>> +   }
>>>> +
>>>> +   public void info(Object object)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.INFO, object, null);
>>>> +   }
>>>> +
>>>> +   public void info(Object object, Throwable t)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.INFO, object, t);
>>>> +   }
>>>> +
>>>> +   public boolean isDebugEnabled()
>>>> +   {
>>>> +      return logger.isEnabledFor(Level.DEBUG);
>>>> +   }
>>>> +
>>>> +   public boolean isErrorEnabled()
>>>> +   {
>>>> +      return logger.isEnabledFor(Level.ERROR);
>>>> +   }
>>>> +
>>>> +   public boolean isFatalEnabled()
>>>> +   {
>>>> +      return logger.isEnabledFor(Level.FATAL);
>>>> +   }
>>>> +
>>>> +   public boolean isInfoEnabled()
>>>> +   {
>>>> +      return logger.isEnabledFor(Level.INFO);
>>>> +   }
>>>> +
>>>> +   public boolean isTraceEnabled()
>>>> +   {
>>>> +      return logger.isEnabledFor(TRACE);
>>>> +   }
>>>> +
>>>> +   public boolean isWarnEnabled()
>>>> +   {
>>>> +      return logger.isEnabledFor(Level.WARN);
>>>> +   }
>>>> +
>>>> +   public void trace(Object object)
>>>> +   {
>>>> +      logger.log(getFQCN(), TRACE, object, null);
>>>> +   }
>>>> +
>>>> +   public void trace(Object object, Throwable t)
>>>> +   {
>>>> +      logger.log(getFQCN(), TRACE, object, t);
>>>> +   }
>>>> +
>>>> +   public void warn(Object object)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.WARN, object, null);
>>>> +   }
>>>> +
>>>> +   public void warn(Object object, Throwable t)
>>>> +   {
>>>> +      logger.log(getFQCN(), Level.WARN, object, t);
>>>> +   }
>>>> +
>>>> +}
>>>>
>>>> Added: modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogImpl.java
>>>> ===================================================================
>>>> --- modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogImpl.java                            (rev 0)
>>>> +++ modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogImpl.java    2009-04-21 09:38:36 UTC (rev 10542)
>>>> @@ -0,0 +1,184 @@
>>>> +package org.jboss.seam.log;
>>>> +
>>>> +import java.io.Externalizable;
>>>> +import java.io.IOException;
>>>> +import java.io.ObjectInput;
>>>> +import java.io.ObjectOutput;
>>>> +import java.text.MessageFormat;
>>>> +import java.util.Arrays;
>>>> +
>>>> +/**
>>>> + *
>>>> + * @author Gavin King
>>>> + *
>>>> + */
>>>> +class LogImpl implements Log, Externalizable
>>>> +{
>>>> +   private transient LogProvider log;
>>>> +   private String category;
>>>> +
>>>> +   public LogImpl()
>>>> +   {
>>>> +   }
>>>> +
>>>> +   LogImpl(String category)
>>>> +   {
>>>> +      this.category = category;
>>>> +      this.log = Logging.getLogProvider(category, true);
>>>> +   }
>>>> +
>>>> +   public boolean isDebugEnabled()
>>>> +   {
>>>> +      return log.isDebugEnabled();
>>>> +   }
>>>> +
>>>> +   public boolean isErrorEnabled()
>>>> +   {
>>>> +      return log.isErrorEnabled();
>>>> +   }
>>>> +
>>>> +   public boolean isFatalEnabled()
>>>> +   {
>>>> +      return log.isFatalEnabled();
>>>> +   }
>>>> +
>>>> +   public boolean isInfoEnabled()
>>>> +   {
>>>> +      return log.isInfoEnabled();
>>>> +   }
>>>> +
>>>> +   public boolean isTraceEnabled()
>>>> +   {
>>>> +      return log.isTraceEnabled();
>>>> +   }
>>>> +
>>>> +   public boolean isWarnEnabled()
>>>> +   {
>>>> +      return log.isWarnEnabled();
>>>> +   }
>>>> +
>>>> +   public void trace(Object object, Object... params)
>>>> +   {
>>>> +      if (isTraceEnabled())
>>>> +      {
>>>> +         log.trace(interpolate(object, params));
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void trace(Object object, Throwable t, Object... params)
>>>> +   {
>>>> +      if (isTraceEnabled())
>>>> +      {
>>>> +         log.trace(interpolate(object, params), t);
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void debug(Object object, Object... params)
>>>> +   {
>>>> +      if (isDebugEnabled())
>>>> +      {
>>>> +         log.debug(interpolate(object, params));
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void debug(Object object, Throwable t, Object... params)
>>>> +   {
>>>> +      if (isDebugEnabled())
>>>> +      {
>>>> +         log.debug(interpolate(object, params), t);
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void info(Object object, Object... params)
>>>> +   {
>>>> +      if (isInfoEnabled())
>>>> +      {
>>>> +         log.info(interpolate(object, params));
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void info(Object object, Throwable t, Object... params)
>>>> +   {
>>>> +      if (isInfoEnabled())
>>>> +      {
>>>> +         log.info(interpolate(object, params), t);
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void warn(Object object, Object... params)
>>>> +   {
>>>> +      if (isWarnEnabled())
>>>> +      {
>>>> +         log.warn(interpolate(object, params));
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void warn(Object object, Throwable t, Object... params)
>>>> +   {
>>>> +      if (isWarnEnabled())
>>>> +      {
>>>> +         log.warn(interpolate(object, params), t);
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void error(Object object, Object... params)
>>>> +   {
>>>> +      if (isErrorEnabled())
>>>> +      {
>>>> +         log.error(interpolate(object, params));
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void error(Object object, Throwable t, Object... params)
>>>> +   {
>>>> +      if (isErrorEnabled())
>>>> +      {
>>>> +         log.error(interpolate(object, params), t);
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void fatal(Object object, Object... params)
>>>> +   {
>>>> +      if (isFatalEnabled())
>>>> +      {
>>>> +         log.fatal(interpolate(object, params));
>>>> +      }
>>>> +   }
>>>> +
>>>> +   public void fatal(Object object, Throwable t, Object... params)
>>>> +   {
>>>> +      if (isFatalEnabled())
>>>> +      {
>>>> +         log.fatal(interpolate(object, params), t);
>>>> +      }
>>>> +   }
>>>> +
>>>> +   private Object interpolate(Object message, Object... params)
>>>> +   {
>>>> +      Object interpolatedMessage = message;
>>>> +      if (params.length > 0)
>>>> +      {
>>>> +         for (int i = 0; i < params.length; i++)
>>>> +         {
>>>> +            if (params[i].getClass().isArray())
>>>> +            {
>>>> +               params[i] = Arrays.asList((Object[]) params[i]);
>>>> +            }
>>>> +         }
>>>> +         interpolatedMessage =  
>>>> MessageFormat.format(message.toString(), params);
>>>> +      }
>>>> +      return interpolatedMessage;
>>>> +   }
>>>> +
>>>> +   public void readExternal(ObjectInput in) throws IOException,  
>>>> ClassNotFoundException
>>>> +   {
>>>> +      category = (String) in.readObject();
>>>> +      log = Logging.getLogProvider(category, true);
>>>> +   }
>>>> +
>>>> +   public void writeExternal(ObjectOutput out) throws IOException
>>>> +   {
>>>> +      out.writeObject(category);
>>>> +   }
>>>> +
>>>> +}
>>>>
>>>> Added: modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogProvider.java
>>>> ===================================================================
>>>> --- modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogProvider.java                            (rev 0)
>>>> +++ modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> LogProvider.java    2009-04-21 09:38:36 UTC (rev 10542)
>>>> @@ -0,0 +1,28 @@
>>>> +package org.jboss.seam.log;
>>>> +
>>>> +/**
>>>> + *
>>>> + * @author Gavin King
>>>> + *
>>>> + */
>>>> +public interface LogProvider
>>>> +{
>>>> +   public void trace(Object object);
>>>> +   public void trace(Object object, Throwable t);
>>>> +   public void debug(Object object);
>>>> +   public void debug(Object object, Throwable t);
>>>> +   public void info(Object object);
>>>> +   public void info(Object object, Throwable t);
>>>> +   public void warn(Object object);
>>>> +   public void warn(Object object, Throwable t);
>>>> +   public void error(Object object);
>>>> +   public void error(Object object, Throwable t);
>>>> +   public void fatal(Object object);
>>>> +   public void fatal(Object object, Throwable t);
>>>> +   public boolean isTraceEnabled();
>>>> +   public boolean isDebugEnabled();
>>>> +   public boolean isInfoEnabled();
>>>> +   public boolean isWarnEnabled();
>>>> +   public boolean isErrorEnabled();
>>>> +   public boolean isFatalEnabled();
>>>> +}
>>>>
>>>> Added: modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Logging.java
>>>> ===================================================================
>>>> --- modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Logging.java                            (rev 0)
>>>> +++ modules/trunk/logging/src/main/java/org/jboss/seam/log/ 
>>>> Logging.java    2009-04-21 09:38:36 UTC (rev 10542)
>>>> @@ -0,0 +1,47 @@
>>>> +package org.jboss.seam.log;
>>>> +
>>>> +/**
>>>> + *
>>>> + * @author Gavin King
>>>> + *
>>>> + */
>>>> +public class Logging
>>>> +{
>>>> +   private static final boolean isLog4JAvailable;
>>>> +
>>>> +   static
>>>> +   {
>>>> +      boolean available;
>>>> +      try
>>>> +      {
>>>> +         Class.forName("org.apache.log4j.Logger");
>>>> +         available = true;
>>>> +      }
>>>> +      catch (ClassNotFoundException cnfe)
>>>> +      {
>>>> +         available = false;
>>>> +      }
>>>> +      isLog4JAvailable = available;
>>>> +   }
>>>> +
>>>> +   public static Log getLog(String category)
>>>> +   {
>>>> +      return new LogImpl(category);
>>>> +   }
>>>> +
>>>> +   public static Log getLog(Class<?> clazz)
>>>> +   {
>>>> +      return new LogImpl(clazz.getName());
>>>> +   }
>>>> +
>>>> +   static LogProvider getLogProvider(String category, boolean  
>>>> wrapped)
>>>> +   {
>>>> +      return isLog4JAvailable ? new Log4JProvider(category,  
>>>> wrapped) : new JDKProvider(category, wrapped);
>>>> +   }
>>>> +
>>>> +   public static LogProvider getLogProvider(Class<?> clazz)
>>>> +   {
>>>> +      return getLogProvider(clazz.getName(), false);
>>>> +   }
>>>> +
>>>> +}
>>>>
>>>> Added: modules/trunk/parent/pom.xml
>>>> ===================================================================
>>>> --- modules/trunk/parent/pom.xml                            (rev 0)
>>>> +++ modules/trunk/parent/pom.xml    2009-04-21 09:38:36 UTC (rev  
>>>> 10542)
>>>> @@ -0,0 +1,206 @@
>>>> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
>>>> " xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd 
>>>> ">
>>>> +   <modelVersion>4.0.0</modelVersion>
>>>> +   <groupId>org.jboss.seam</groupId>
>>>> +   <artifactId>seam-parent</artifactId>
>>>> +   <packaging>pom</packaging>
>>>> +   <version>3.0.0-SNAPSHOT</version>
>>>> +
>>>> +   <parent>
>>>> +      <groupId>org.jboss.seam</groupId>
>>>> +      <artifactId>seam-version-matrix</artifactId>
>>>> +      <version>3.0.0-SNAPSHOT</version>
>>>> +  </parent>
>>>> +
>>>> +   <name>JBoss Seam</name>
>>>> +   <url>http://www.seamframework.org</url>
>>>> +
>>>> +   <description>
>>>> +      JBoss Seam, an Enterprise Java Framework
>>>> +   </description>
>>>> +
>>>> +   <developers>
>>>> +      <developer>
>>>> +         <name>Pete Muir</name>
>>>> +         <roles>
>>>> +            <role>Project Lead</role>
>>>> +         </roles>
>>>> +         <email>pete.muir at jboss.org</email>
>>>> +         <organization>JBoss, a division of Red Hat</organization>
>>>> +         <url>http://in.relation.to/Bloggers/Pete</url>
>>>> +      </developer>
>>>> +
>>>> +      <developer>
>>>> +         <name>Shane Bryzak</name>
>>>> +         <organization>JBoss, a division of Red Hat</organization>
>>>> +      </developer>
>>>> +
>>>> +      <developer>
>>>> +         <name>Norman Richards</name>
>>>> +         <organization>JBoss, a division of Red Hat</organization>
>>>> +      </developer>
>>>> +
>>>> +      <developer>
>>>> +         <name>Dan Allen</name>
>>>> +         <organization>JBoss, a division of Red Hat</organization>
>>>> +      </developer>
>>>> +   </developers>
>>>> +
>>>> +   <build>
>>>> +      <plugins>
>>>> +         <plugin>
>>>> +            <groupId>org.apache.maven.plugins</groupId>
>>>> +            <artifactId>maven-source-plugin</artifactId>
>>>> +            <executions>
>>>> +               <execution>
>>>> +                  <id>attach-sources</id>
>>>> +                  <phase>verify</phase>
>>>> +                  <goals>
>>>> +                     <goal>jar</goal>
>>>> +                  </goals>
>>>> +               </execution>
>>>> +            </executions>
>>>> +         </plugin>
>>>> +         <plugin>
>>>> +            <groupId>org.apache.maven.plugins</groupId>
>>>> +            <artifactId>maven-enforcer-plugin</artifactId>
>>>> +         </plugin>
>>>> +         <plugin>
>>>> +           <groupId>org.apache.maven.plugins</groupId>
>>>> +           <artifactId>maven-release-plugin</artifactId>
>>>> +           <version>2.0-beta-8</version>
>>>> +           <configuration>
>>>> +             <tagBase>https://svn.jboss.org/repos/webbeans/ri/ 
>>>> tags</tagBase>
>>>> +             <autoVersionSubmodules>true</autoVersionSubmodules>
>>>> +           </configuration>
>>>> +         </plugin>
>>>> +      </plugins>
>>>> +      <defaultGoal>package</defaultGoal>
>>>> +
>>>> +      <pluginManagement>
>>>> +         <plugins>
>>>> +            <plugin>
>>>> +               <groupId>org.apache.maven.plugins</groupId>
>>>> +               <artifactId>maven-compiler-plugin</artifactId>
>>>> +               <configuration>
>>>> +                  <source>1.5</source>
>>>> +                  <target>1.5</target>
>>>> +               </configuration>
>>>> +            </plugin>
>>>> +            <plugin>
>>>> +               <groupId>org.apache.maven.plugins</groupId>
>>>> +               <artifactId>maven-jar-plugin</artifactId>
>>>> +               <configuration>
>>>> +                  <archive>
>>>> +                     <manifest>
>>>> +                        <addDefaultImplementationEntries>
>>>> +                           true
>>>> +                        </addDefaultImplementationEntries>
>>>> +                        <addDefaultSpecificationEntries>
>>>> +                           true
>>>> +                        </addDefaultSpecificationEntries>
>>>> +                     </manifest>
>>>> +                  </archive>
>>>> +               </configuration>
>>>> +            </plugin>
>>>> +            <plugin>
>>>> +               <groupId>org.codehaus.mojo</groupId>
>>>> +               <artifactId>emma-maven-plugin</artifactId>
>>>> +               <configuration>
>>>> +                  <forkMode>once</forkMode>
>>>> +                  <metadataFile>../target/coverage.em</ 
>>>> metadataFile>
>>>> +                  <outputDirectory>${project.build.directory}/ 
>>>> generated-classes</outputDirectory>
>>>> +               </configuration>
>>>> +            </plugin>
>>>> +         </plugins>
>>>> +      </pluginManagement>
>>>> +   </build>
>>>> +
>>>> +   <profiles>
>>>> +      <profile>
>>>> +         <id>api-coverage</id>
>>>> +         <activation>
>>>> +            <property>
>>>> +               <name>apiCoverage</name>
>>>> +            </property>
>>>> +         </activation>
>>>> +         <build>
>>>> +            <plugins>
>>>> +               <plugin>
>>>> +                  <groupId>org.apache.maven.plugins</groupId>
>>>> +                  <artifactId>maven-surefire-plugin</artifactId>
>>>> +                  <inherited>true</inherited>
>>>> +                  <configuration>
>>>> +                     <forkMode>once</forkMode>
>>>> +                  </configuration>
>>>> +               </plugin>
>>>> +            </plugins>
>>>> +         </build>
>>>> +         <dependencies>
>>>> +            <dependency>
>>>> +               <groupId>emma</groupId>
>>>> +               <artifactId>emma</artifactId>
>>>> +               <version>2.0.5312</version>
>>>> +               <scope>test</scope>
>>>> +            </dependency>
>>>> +         </dependencies>
>>>> +      </profile>
>>>> +   </profiles>
>>>> +
>>>> +   <ciManagement>
>>>> +      <system>Hudson</system>
>>>> +      <url />
>>>> +   </ciManagement>
>>>> +
>>>> +   <issueManagement>
>>>> +      <system>JIRA</system>
>>>> +      <url>http://jira.jboss.org/browse/JBSEAM</url>
>>>> +   </issueManagement>
>>>> +
>>>> +   <inceptionYear>2008</inceptionYear>
>>>> +
>>>> +   <licenses>
>>>> +      <license>
>>>> +         <name>Lesser Gnu Public License, Version 2.1</name>
>>>> +         <url>http://www.gnu.org/licenses/lgpl-2.1.html</url>
>>>> +      </license>
>>>> +   </licenses>
>>>> +
>>>> +   <scm>
>>>> +      <connection>scm:svn:http://anonsvn.jboss.org/repos/seam</ 
>>>> connection>
>>>> +      <developerConnection>scm:svn:https://svn.jboss.org/repos/seam 
>>>> </developerConnection>
>>>> +      <url>http://fisheye.jboss.org/browse/Seam</url>
>>>> +   </scm>
>>>> +
>>>> +   <distributionManagement>
>>>> +      <repository>
>>>> +         <!-- Copy the dist to the local checkout of the JBoss  
>>>> maven2 repo ${maven.repository.root} -->
>>>> +         <!-- It is anticipated that ${maven.repository.root} be  
>>>> set in user's settings.xml -->
>>>> +         <!-- todo : replace this with direct svn access once  
>>>> the svnkit providers are available -->
>>>> +         <id>repository.jboss.org</id>
>>>> +         <url>file://${maven.repository.root}</url>
>>>> +      </repository>
>>>> +      <snapshotRepository>
>>>> +         <id>snapshots.jboss.org</id>
>>>> +         <name>JBoss Snapshot Repository</name>
>>>> +         <url>dav:https://snapshots.jboss.org/maven2</url>
>>>> +      </snapshotRepository>
>>>> +   </distributionManagement>
>>>> +
>>>> +   <reporting>
>>>> +      <plugins>
>>>> +         <plugin>
>>>> +            <groupId>org.codehaus.mojo</groupId>
>>>> +            <artifactId>cobertura-maven-plugin</artifactId>
>>>> +            <configuration>
>>>> +               <formats>
>>>> +                  <format>html</format>
>>>> +                  <format>xml</format>
>>>> +               </formats>
>>>> +               <instrumentation>
>>>> +               </instrumentation>
>>>> +            </configuration>
>>>> +         </plugin>
>>>> +      </plugins>
>>>> +   </reporting>
>>>> +
>>>> +</project>
>>>>
>>>> Modified: modules/trunk/security/pom.xml
>>>> ===================================================================
>>>> --- modules/trunk/security/pom.xml    2009-04-21 08:51:33 UTC  
>>>> (rev 10541)
>>>> +++ modules/trunk/security/pom.xml    2009-04-21 09:38:36 UTC  
>>>> (rev 10542)
>>>> @@ -1,8 +1,13 @@
>>>> <project xmlns="http://maven.apache.org/POM/4.0.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd 
>>>> ">
>>>> -   <modelVersion>4.0.0</modelVersion>
>>>> -
>>>> +   <parent>
>>>> +      <artifactId>seam-parent</artifactId>
>>>> +      <groupId>org.jboss.seam</groupId>
>>>> +      <version>3.0.0-SNAPSHOT</version>
>>>> +   </parent>
>>>> +
>>>> +   <modelVersion>4.0.0</modelVersion>
>>>>  <groupId>org.jboss.seam</groupId>
>>>>  <artifactId>seam-security</artifactId>
>>>>  <packaging>jar</packaging>
>>>> @@ -13,7 +18,6 @@
>>>>     <dependency>
>>>>        <groupId>org.jboss.webbeans</groupId>
>>>>        <artifactId>jsr299-api</artifactId>
>>>> -         <version>1.0.0-SNAPSHOT</version>
>>>>     </dependency>
>>>>
>>>>  </dependencies>
>>>>
>>>> Modified: modules/trunk/version-matrix/pom.xml
>>>> ===================================================================
>>>> --- modules/trunk/version-matrix/pom.xml    2009-04-21 08:51:33  
>>>> UTC (rev 10541)
>>>> +++ modules/trunk/version-matrix/pom.xml    2009-04-21 09:38:36  
>>>> UTC (rev 10542)
>>>> @@ -51,7 +51,6 @@
>>>>
>>>>  <properties>
>>>>     <seam.version>3.0.0-SNAPSHOT</seam.version>
>>>> -      <webbeans.version>1.0.0-SNAPSHOT</webbeans.version>
>>>>  </properties>
>>>>
>>>>  <dependencyManagement>
>>>> @@ -141,31 +140,7 @@
>>>>           <artifactId>el-ri</artifactId>
>>>>           <version>1.2</version>
>>>>        </dependency>
>>>> -
>>>> -         <dependency>
>>>> -            <groupId>org.jboss.webbeans</groupId>
>>>> -            <artifactId>jsr299-api</artifactId>
>>>> -            <version>${webbeans.version}</version>
>>>> -         </dependency>
>>>>
>>>> -         <dependency>
>>>> -            <groupId>org.jboss.webbeans</groupId>
>>>> -            <artifactId>webbeans-core</artifactId>
>>>> -            <version>${webbeans.version}</version>
>>>> -         </dependency>
>>>> -
>>>> -         <dependency>
>>>> -            <groupId>org.jboss.webbeans</groupId>
>>>> -            <artifactId>webbeans-spi</artifactId>
>>>> -            <version>${webbeans.version}</version>
>>>> -         </dependency>
>>>> -
>>>> -         <dependency>
>>>> -            <groupId>org.jboss.webbeans</groupId>
>>>> -            <artifactId>webbeans-porting-package</artifactId>
>>>> -            <version>${webbeans.version}</version>
>>>> -         </dependency>
>>>> -
>>>>     </dependencies>
>>>>  </dependencyManagement>
>>>>
>>>>
>>>> _______________________________________________
>>>> seam-commits mailing list
>>>> seam-commits at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/seam-commits
>>>
>>> -- 
>>> Pete Muir
>>> http://www.seamframework.org
>>> http://in.relation.to/Bloggers/Pete
>>>
>>> _______________________________________________
>>> seam-dev mailing list
>>> seam-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/seam-dev
>>
>
> --
> Pete Muir
> http://www.seamframework.org
> http://in.relation.to/Bloggers/Pete
>
> _______________________________________________
> seam-dev mailing list
> seam-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/seam-dev

--
Pete Muir
http://www.seamframework.org
http://in.relation.to/Bloggers/Pete




More information about the seam-dev mailing list