[jboss-svn-commits] JBoss Common SVN: r3735 - in common-logging-log4j/branches/2.1: src/main/java/org/jboss/logging/filter and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Nov 16 07:40:41 EST 2009


Author: jaikiran
Date: 2009-11-16 07:40:41 -0500 (Mon, 16 Nov 2009)
New Revision: 3735

Added:
   common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java
   common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java
   common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java
Removed:
   common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java
Modified:
   common-logging-log4j/branches/2.1/pom.xml
Log:
JBLOGGING-30 Use the new TCLMCFilter for logging per application support

Modified: common-logging-log4j/branches/2.1/pom.xml
===================================================================
--- common-logging-log4j/branches/2.1/pom.xml	2009-11-16 11:55:21 UTC (rev 3734)
+++ common-logging-log4j/branches/2.1/pom.xml	2009-11-16 12:40:41 UTC (rev 3735)
@@ -44,6 +44,18 @@
     </dependency>
 
     <dependency>
+      <groupId>org.jboss.cl</groupId>
+      <artifactId>jboss-classloading</artifactId>
+      <version>2.0.7.GA</version>
+    </dependency>
+    
+    <dependency>
+	<groupId>org.jboss.man</groupId>
+	<artifactId>jboss-managed</artifactId>
+	<version>2.1.1.CR1</version>
+    </dependency>
+
+    <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>1.2.14</version>

Copied: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java (from rev 3695, common-logging-log4j/trunk/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java)
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java	                        (rev 0)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java	2009-11-16 12:40:41 UTC (rev 3735)
@@ -0,0 +1,138 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.logging.filter;
+
+import org.apache.log4j.spi.Filter;
+import org.apache.log4j.spi.LoggingEvent;
+import org.jboss.util.collection.WeakSet;
+
+/** An appender filter that accepts log events based on whether the thread
+
+ context class loader has a classpath URL that has the DeployURL
+
+ attribute as a substring. A sample usage would be:
+
+
+   <appender name="JMX-CONSOLE" class="org.jboss.logging.appender.FileAppender">
+      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+      <param name="File" value="${jboss.server.home.dir}/log/jmx-console.log"/>
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+      </layout>
+
+      <filter class="org.jboss.logging.filter.TCLFilter">
+
+         <param name="AcceptOnMatch" value="true"/>
+
+         <param name="DeployURL" value="jmx-console.war"/>
+
+      </filter>
+   </appender>
+
+
+ @author Scott.Stark at jboss.org
+ @author Ales.Justin at jboss.org
+ */
+public abstract class AbstractTCLFilter extends Filter
+{
+   /** The set of TCLs seen to match DeployURL */
+   private WeakSet matchSet = new WeakSet();
+   /** The set of TCLs seen to not match DeployURL */
+   private WeakSet missSet = new WeakSet();
+   /** The deployment URL string fragment to match against */
+   private String deployURL;
+   /** Whether a match should return ACCEPT or DENY */
+   private boolean acceptOnMatch = true;
+
+   public boolean isAcceptOnMatch()
+   {
+      return acceptOnMatch;
+   }
+
+   public void setAcceptOnMatch(boolean acceptOnMatch)
+   {
+      this.acceptOnMatch = acceptOnMatch;
+   }
+
+   public String getDeployURL()
+   {
+      return deployURL;
+   }
+
+   public void setDeployURL(String deployURL)
+   {
+      this.deployURL = deployURL;
+   }
+
+   public int decide(LoggingEvent event)
+   {
+      int ok = Filter.NEUTRAL;
+      if( acceptOnMatch == true )
+      {
+         if( isMatchingTCL() )
+            ok = Filter.ACCEPT;
+      }
+      else
+      {
+         if( isMatchingTCL() )
+            ok = Filter.DENY;
+      }
+      return ok;
+   }
+
+   /** Start with the current thread context class loader
+    * @return true if the caller tcl has a url matching our deployURL
+    */
+   private boolean isMatchingTCL()
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      if( matchSet.contains(tcl) )
+         return true;
+      if( missSet.contains(tcl) )
+         return false;
+
+      // Search the class loader URLs for a match
+      ClassLoader cl = tcl;
+      while( cl != null )
+      {
+         if (matchClassLoader(cl))
+            break;
+         cl = cl.getParent();
+      }
+
+      if(cl != null)
+         matchSet.add(tcl);
+      else
+         missSet.add(tcl);
+
+      return (cl != null);
+   }
+
+   /**
+    * Match classloader against deployURL fragment.
+    *
+    * @param cl the classloader
+    * @return true if the classloader matches fragment, false otherwise.
+    */
+   protected abstract boolean matchClassLoader(ClassLoader cl);
+}
\ No newline at end of file

Deleted: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java	2009-11-16 11:55:21 UTC (rev 3734)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java	2009-11-16 12:40:41 UTC (rev 3735)
@@ -1,188 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.logging.filter;
-
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import org.apache.log4j.spi.Filter;
-import org.apache.log4j.spi.LoggingEvent;
-import org.jboss.util.collection.WeakSet;
-
-/** An appender filter that accepts log events based on whether the thread
-
- context class loader has a classpath URL that has the DeployURL
-
- attribute as a substring. A sample usage would be:
-
-
-   <appender name="JMX-CONSOLE" class="org.jboss.logging.appender.FileAppender">
-      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
-      <param name="File" value="${jboss.server.home.dir}/log/jmx-console.log"/>
-      <layout class="org.apache.log4j.PatternLayout">
-         <!-- The default pattern: Date Priority [Category] Message\n -->
-         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
-      </layout>
-
-      <filter class="org.jboss.logging.filter.TCLFilter">
-
-         <param name="AcceptOnMatch" value="true"/>
-
-         <param name="DeployURL" value="jmx-console.war"/>
-
-      </filter>
-   </appender>
-
-
- @author Scott.Stark at jboss.org
- @version $Revision$
- */
-public class TCLFilter extends Filter
-{
-   /** The set of TCLs seen to match DeployURL */
-   private WeakSet matchSet = new WeakSet();
-   /** The set of TCLs seen to not match DeployURL */
-   private WeakSet missSet = new WeakSet();
-   /** The deployment URL string fragment to match against */
-   private String deployURL;
-   /** Whether a match should return ACCEPT or DENY */
-   private boolean acceptOnMatch = true;
-
-   public boolean isAcceptOnMatch()
-   {
-      return acceptOnMatch;
-   }
-
-   public void setAcceptOnMatch(boolean acceptOnMatch)
-   {
-      this.acceptOnMatch = acceptOnMatch;
-   }
-
-   public String getDeployURL()
-   {
-      return deployURL;
-   }
-
-   public void setDeployURL(String deployURL)
-   {
-      this.deployURL = deployURL;
-   }
-
-   public int decide(LoggingEvent event)
-   {
-      int ok = Filter.NEUTRAL;
-      if( acceptOnMatch == true )
-      {
-         if( isMatchingTCL() )
-            ok = Filter.ACCEPT;
-      }
-      else
-      {
-         if( isMatchingTCL() )
-            ok = Filter.DENY;
-      }
-      return ok;
-   }
-
-   /** Start with the current thread context class loader
-    * @return true if the caller tcl has a url matching our deployURL
-    */
-   private boolean isMatchingTCL()
-   {
-      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
-      if( matchSet.contains(tcl) )
-         return true;
-      if( missSet.contains(tcl) )
-         return false;
-
-      // Search the class loader URLs for a match
-      ClassLoader cl = tcl;
-      boolean match = false;
-      while( cl != null )
-      {
-         URL[] urls = getClassLoaderURLs(cl);
-         for(int n = 0; n < urls.length; n ++)
-         {
-            URL u = urls[n];
-            String file = u.getFile();
-            if( file.indexOf(deployURL) > 0 )
-            {
-               match = true;
-               break;
-            }
-         }
-         cl = cl.getParent();
-      }
-
-      if( match == true )
-         matchSet.add(tcl);
-      else
-         missSet.add(tcl);
-
-      return match;
-   }
-
-   /**
-    * First check if the <code>cl</code> is of type URLClassloader. If yes, then use the getURLs API without the
-    * need for reflection. If its not a URLClassloader type then go for reflection
-    * to access a URL[] getURLs method so that non-URLClassLoader
-    * class loaders that support this method can provide info.
-    */
-   private static URL[] getClassLoaderURLs(ClassLoader cl)
-   {
-      URL[] urls = {};
-      try
-      {
-         if (cl instanceof URLClassLoader)
-         {
-            URLClassLoader urlClassloader = (URLClassLoader) cl;
-            urls = urlClassloader.getURLs();
-         }
-         else
-         {
-            Class<?> returnType = urls.getClass();
-            Class<?>[] parameterTypes = {};
-            Method getURLs = cl.getClass().getMethod("getURLs", parameterTypes);
-            if( returnType.isAssignableFrom(getURLs.getReturnType()) )
-            {
-               Object[] args = {};
-               urls = (URL[]) getURLs.invoke(cl, args);
-            }
-            if( urls == null || urls.length == 0 )
-            {
-               getURLs = cl.getClass().getMethod("getClasspath", parameterTypes);
-               if( returnType.isAssignableFrom(getURLs.getReturnType()) )
-               {
-                  Object[] args = {};
-                  urls = (URL[]) getURLs.invoke(cl, args);
-               }
-            }
-         }
-      }
-      catch(Exception ignore)
-      {
-      }
-      return urls;
-   }
-
-}

Copied: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java (from rev 3695, common-logging-log4j/trunk/src/main/java/org/jboss/logging/filter/TCLFilter.java)
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java	                        (rev 0)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java	2009-11-16 12:40:41 UTC (rev 3735)
@@ -0,0 +1,115 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.logging.filter;
+
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * An appender filter that accepts log events based on whether the thread
+ * <p/>
+ * context class loader has a classpath URL that has the DeployURL
+ * <p/>
+ * attribute as a substring. A sample usage would be:
+ * <p/>
+ * <p/>
+ * <appender name="JMX-CONSOLE" class="org.jboss.logging.appender.FileAppender">
+ * <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ * <param name="File" value="${jboss.server.home.dir}/log/jmx-console.log"/>
+ * <layout class="org.apache.log4j.PatternLayout">
+ * <!-- The default pattern: Date Priority [Category] Message\n -->
+ * <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+ * </layout>
+ * <p/>
+ * <filter class="org.jboss.logging.filter.WebTCLFilter">
+ * <p/>
+ * <param name="AcceptOnMatch" value="true"/>
+ * <p/>
+ * <param name="DeployURL" value="jmx-console.war"/>
+ * <p/>
+ * </filter>
+ * </appender>
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 3621 $
+ */
+public class TCLFilter extends AbstractTCLFilter
+{
+   protected boolean matchClassLoader(ClassLoader cl)
+   {
+      URL[] urls = getClassLoaderURLs(cl);
+      for (URL u : urls)
+      {
+         String file = u.getFile();
+         if (file.indexOf(getDeployURL()) > 0)
+            return true;
+      }
+      return false;
+   }
+
+   /**
+    * First check if the <code>cl</code> is of type URLClassloader. If yes, then use the getURLs API without the
+    * need for reflection. If its not a URLClassloader type then go for reflection
+    * to access a URL[] getURLs method so that non-URLClassLoader
+    * class loaders that support this method can provide info.
+    *
+    * @param cl classloader
+    * @return classloader's urls
+    */
+   private static URL[] getClassLoaderURLs(ClassLoader cl)
+   {
+      URL[] urls = {};
+      try
+      {
+         if (cl instanceof URLClassLoader)
+         {
+            URLClassLoader urlClassloader = (URLClassLoader)cl;
+            urls = urlClassloader.getURLs();
+         }
+         else
+         {
+            Class<?> returnType = urls.getClass();
+            Class<?>[] parameterTypes = {};
+            Method getURLs = cl.getClass().getMethod("getURLs", parameterTypes);
+            if (returnType.isAssignableFrom(getURLs.getReturnType()))
+            {
+               Object[] args = {};
+               urls = (URL[])getURLs.invoke(cl, args);
+            }
+            if (urls == null || urls.length == 0)
+            {
+               getURLs = cl.getClass().getMethod("getClasspath", parameterTypes);
+               if (returnType.isAssignableFrom(getURLs.getReturnType()))
+               {
+                  Object[] args = {};
+                  urls = (URL[])getURLs.invoke(cl, args);
+               }
+            }
+         }
+      }
+      catch (Exception ignore)
+      {
+      }
+      return urls;
+   }
+}
\ No newline at end of file

Copied: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java (from rev 3695, common-logging-log4j/trunk/src/main/java/org/jboss/logging/filter/TCLMCFilter.java)
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java	                        (rev 0)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java	2009-11-16 12:40:41 UTC (rev 3735)
@@ -0,0 +1,84 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.logging.filter;
+
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.classloading.spi.visitor.ResourceVisitor;
+
+/**
+ * MC/AS5 based TCL filter.
+ * 
+ * @author ales.justin at jboss.org
+ */
+public class TCLMCFilter extends AbstractTCLFilter
+{
+   protected boolean matchClassLoader(ClassLoader cl)
+   {
+      Module module = ClassLoading.getModuleForClassLoader(cl);
+      if (module == null)
+         return false;
+
+      MatchFragment mf = new MatchFragment();
+      module.visit(mf, null, mf);
+      return mf.isFound();
+   }
+
+   private class MatchFragment implements ResourceVisitor, ResourceFilter
+   {
+      private boolean found;
+      private boolean visited;
+
+      public ResourceFilter getFilter()
+      {
+         return null;
+      }
+
+      public boolean accepts(ResourceContext rc)
+      {
+         if (visited)
+         {
+            visited = false; // reset recursion filter
+            return false;
+         }
+         return true;
+      }
+
+      public void visit(ResourceContext rc)
+      {
+         visited = true;
+
+         if (found)
+            return;
+
+         String rcString = rc.getUrl().toExternalForm();
+         found = rcString.contains(getDeployURL());
+      }
+
+      public boolean isFound()
+      {
+         return found;
+      }
+   }
+}



More information about the jboss-svn-commits mailing list