User: starksm 
  Date: 01/12/08 16:55:21

  Modified:    src/main/org/jboss/security Tag: Branch_2_4
                        ClientLoginModule.java Logger.java
  Log:
  Update org.jboss.security.Logger to be in synch with the 3.0
  org.jboss.system.BootstrapLogger version and update the Logger users.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.4.2   +1 -1      jbosssx/src/main/org/jboss/security/ClientLoginModule.java
  
  Index: ClientLoginModule.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosssx/src/main/org/jboss/security/ClientLoginModule.java,v
  retrieving revision 1.1.4.1
  retrieving revision 1.1.4.2
  diff -u -r1.1.4.1 -r1.1.4.2
  --- ClientLoginModule.java    2001/11/09 10:21:46     1.1.4.1
  +++ ClientLoginModule.java    2001/12/09 00:55:21     1.1.4.2
  @@ -75,7 +75,7 @@
            */
         String passwordStacking = (String) options.get("password-stacking");
         _useFirstPass = passwordStacking != null;
  -      log = Logger.getInstance(getClass());
  +      log = Logger.getLogger(getClass());
      }
      
      /**
  
  
  
  1.1.2.3   +155 -81   jbosssx/src/main/org/jboss/security/Attic/Logger.java
  
  Index: Logger.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosssx/src/main/org/jboss/security/Attic/Logger.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- Logger.java       2001/11/28 06:10:45     1.1.2.2
  +++ Logger.java       2001/12/09 00:55:21     1.1.2.3
  @@ -8,50 +8,73 @@
    classes using the thread context class loader.
   
    * @author  [EMAIL PROTECTED]
  - * @version $Revision: 1.1.2.2 $
  + * @version $Revision: 1.1.2.3 $
    */
   public class Logger
   {
  -   /** */
  +   /** The log4j Category class name */
      private static final String CATEGORY_CLASS = "org.apache.log4j.Category";
  +   /** The log4j Priority class name */
      private static final String PRIORITY_CLASS = "org.apache.log4j.Priority";
  +   /** The custom JBoss TRACE Priority class name */
      private static final String TRACE_PRIORITY_CLASS =  
"org.jboss.logging.TracePriority";
  +   /** Indicies into the log4jMethods for the Category methods */
      private static final int GET_INSTANCE = 0;
      private static final int IS_ENABLED_FOR_PRIORITY = 1;
      private static final int LOG_PRIORITY_MSG = 2;
      private static final int LOG_PRIORITY_MSG_EX = 3;
      private static final int N_METHODS = 4;
  -
      /** An array of the org.apache.log4j.Category methods used by Logger */
      private static Method[] log4jMethods = null;
      /** An array of the org.apache.log4j.Category methods used by Logger */
  -   private static Object[] log4jPriorities = null;
      private static String[] priorityNames = {"TRACE", "DEBUG", "INFO", "WARN",
         "ERROR", "FATAL"
      };
  +   /** An array of Priority objects corresponding to the names TRACE..FATAL */
  +   private static Object[] log4jPriorities = new Object[priorityNames.length];
      private static final int TRACE = 0;
      private static final int DEBUG = 1;
      private static final int INFO = 2;
      private static final int WARN = 3;
      private static final int ERROR = 4;
      private static final int FATAL = 5;
  +   /** Should execptions during the load of log4j be dumped to System.err */
  +   private static boolean logInitFailures = false;
  +   /** The maximum # of initLog4j calls to attempt */
  +   private static int maxInitAttempts = 100;
  +   private static int initAttempts;
   
  +   // Externalize behavior using properties
  +   static
  +   {
  +      try
  +      {
  +         logInitFailures = 
Boolean.getBoolean("org.jboss.system.BootstrapLogger.logInitFailures");
  +         Integer i = 
Integer.getInteger("org.jboss.system.BootstrapLogger.maxInitAttempts", 
maxInitAttempts);
  +         maxInitAttempts = i.intValue();
  +      }
  +      catch(Exception e)
  +      {
  +         e.printStackTrace();
  +      }
  +   }
  +
      /** The log4j Category object the Logger delegates to. */
      private Object category;
  +   private String categoryType;
   
  -   public static Logger getInstance(Class categoryType)
  +   public static Logger getLogger(Class categoryType)
      {
  -      return getInstance(categoryType.getName());
  +      return getLogger(categoryType.getName());
      }
  -   public static Logger getInstance(String categoryType)
  +   public static Logger getLogger(String categoryType)
      {
         try
         {
            initLog4j();
         }
  -      catch(Exception e)
  +      catch(Exception ignore)
         {
  -         e.printStackTrace();
         }
         return new Logger(categoryType);
      }
  @@ -59,161 +82,212 @@
   // --- Begin log4j Category methods we expose
      public void trace(Object msg)
      {
  -      log(log4jPriorities[TRACE], msg);
  +      log(TRACE, msg);
      }
      public void trace(Object msg, Throwable ex)
      {
  -      log(log4jPriorities[TRACE], msg, ex);
  +      log(TRACE, msg, ex);
      }
      public void debug(Object msg)
      {
  -      log(log4jPriorities[DEBUG], msg);
  +      log(DEBUG, msg);
      }
      public void debug(Object msg, Throwable ex)
      {
  -      log(log4jPriorities[DEBUG], msg, ex);
  +      log(DEBUG, msg, ex);
      }
      public void info(Object msg)
      {
  -      log(log4jPriorities[INFO], msg);
  +      log(INFO, msg);
      }
      public void info(Object msg, Throwable ex)
      {
  -      log(log4jPriorities[INFO], msg, ex);
  +      log(INFO, msg, ex);
      }
      public void warn(Object msg)
      {
  -      log(log4jPriorities[WARN], msg);
  +      log(WARN, msg);
      }
      public void warn(Object msg, Throwable ex)
      {
  -      log(log4jPriorities[WARN], msg, ex);
  +      log(WARN, msg, ex);
      }
      public void error(Object msg)
      {
  -      log(log4jPriorities[ERROR], msg);
  +      log(ERROR, msg);
      }
      public void error(Object msg, Throwable ex)
      {
  -      log(log4jPriorities[ERROR], msg, ex);
  +      log(ERROR, msg, ex);
      }
      public void fatal(Object msg)
      {
  -      log(log4jPriorities[FATAL], msg);
  +      log(FATAL, msg);
      }
      public void fatal(Object msg, Throwable ex)
      {
  -      log(log4jPriorities[FATAL], msg, ex);
  +      log(FATAL, msg, ex);
      }
      public boolean isTraceEnabled()
      {
  -      return isEnabledFor(log4jPriorities[TRACE]);
  +      return isEnabledFor(TRACE);
      }
      public boolean isDebugEnabled()
      {
  -      return isEnabledFor(log4jPriorities[DEBUG]);
  +      return isEnabledFor(DEBUG);
      }
      public boolean isInfoEnabled()
      {
  -      return isEnabledFor(log4jPriorities[INFO]);
  +      return isEnabledFor(INFO);
      }
  -   public boolean isEnabledFor(Object priority)
  +
  +// --- Begin log4j Category methods we expose
  +   /** This method is called by all isXXXEnabled methods to invoke
  +    the Category.isEnabledForPriority method using the priority instance.
  +    If the log4j methods have not been loaded then the priority
  +    */
  +   private boolean isEnabledFor(int priorityIdx)
      {
         boolean isEnabled = false;
         try
         {
  +         if( category == null )
  +         {
  +            // Try to load the log4j classes
  +            init();
  +            // Return false if we still don't have a category
  +            if( category == null )
  +               return false;
  +         }
  +         Object priority = log4jPriorities[priorityIdx];
            Object[] args = {priority};
            Boolean bool = (Boolean) 
log4jMethods[IS_ENABLED_FOR_PRIORITY].invoke(category, args);
            isEnabled = bool.booleanValue();
         }
  -      catch(IllegalAccessException e)
  -      {
  -         e.printStackTrace();
  -      }
  -      catch(IllegalArgumentException e)
  -      {
  -         e.printStackTrace();
  -      }
  -      catch(InvocationTargetException e)
  +      catch(Exception e)
         {
            e.printStackTrace();
         }
         return isEnabled;
      }
  -// --- Begin log4j Category methods we expose
   
  -   private void log(Object priority, Object msg)
  -   {
  +   /** The log method is called by all explicit priority log methods
  +    that do not accept a Throwable.
  +    @param priorityIdx, the index into the log4jPriorities array to use as
  +      the priority of the msg
  +    @param msg, the log message object
  +    */
  +   private void log(int priorityIdx, Object msg)
  +   {
  +      // If there is no category log4j is not yet available
  +      if( category == null )
  +      {
  +         // Try to load the log4j classes
  +         init();
  +         if( category == null )
  +         {
  +            // Failed, dump the msg to System.out
  +            String name = priorityNames[priorityIdx];
  +            System.out.println(name+", "+msg);
  +            return;
  +         }
  +      }
  +
  +      // Invoke the Category.log method
         try
         {
  +         Object priority = log4jPriorities[priorityIdx];         
            Object[] args = {priority, msg};
            log4jMethods[LOG_PRIORITY_MSG].invoke(category, args);
  -      }
  -      catch(IllegalAccessException e)
  -      {
  -         e.printStackTrace();
  -      }
  -      catch(IllegalArgumentException e)
  -      {
  -         e.printStackTrace();
         }
  -      catch(InvocationTargetException e)
  +      catch(Exception e)
         {
            e.printStackTrace();
         }
      }
  -   private void log(Object priority, Object msg, Throwable ex)
  -   {
  +
  +   /** The log method is called by all explicit priority log methods
  +    that do accept a Throwable.
  +    @param priorityIdx, the index into the log4jPriorities array to use as
  +      the priority of the msg
  +    @param msg, the log message object
  +    @param ex, the exception associated with the msg
  +    */
  +   private void log(int priorityIdx, Object msg, Throwable ex)
  +   {
  +      if( category == null )
  +      {
  +         // Try to load the log4j classes
  +         init();
  +         if( category == null )
  +         {
  +            // Failed, dump the msg to System.out & print stack trace
  +            String name = priorityNames[priorityIdx];
  +            System.out.println(name+", "+msg);
  +            ex.printStackTrace();
  +            return;
  +         }
  +      }
  +
         try
         {
  +         Object priority = log4jPriorities[priorityIdx];         
            Object[] args = {priority, msg, ex};
            log4jMethods[LOG_PRIORITY_MSG_EX].invoke(category, args);
         }
  -      catch(IllegalAccessException e)
  -      {
  -         e.printStackTrace();
  -      }
  -      catch(IllegalArgumentException e)
  -      {
  -         e.printStackTrace();
  -      }
  -      catch(InvocationTargetException e)
  +      catch(Exception e)
         {
            e.printStackTrace();
         }
      }
  +// End log4j methods
   
      private Logger(String categoryType)
      {
  +      this.categoryType = categoryType;
  +      init();
  +   }
  +
  +   /** This method is called to set the logger category and retry loading
  +    the log4j classes if they have not been loaded as yet.
  +    */
  +   private void init()
  +   {
         try
  -      {
  -         Object[] args = {categoryType};
  -         category = log4jMethods[GET_INSTANCE].invoke(null, args);
  -      }
  -      catch(IllegalAccessException e)
         {
  -         e.printStackTrace();
  -      }
  -      catch(IllegalArgumentException e)
  -      {
  -         e.printStackTrace();
  +         if( log4jMethods == null )
  +            initLog4j();
  +         if( log4jMethods != null )
  +         {
  +            Object[] args = {categoryType};
  +            category = log4jMethods[GET_INSTANCE].invoke(null, args);
  +         }
         }
  -      catch(InvocationTargetException e)
  +      catch(Exception e)
         {
  -         e.printStackTrace();
  +         if( logInitFailures == true )
  +            e.printStackTrace();
         }
      }
   
  +   /** Load the log4j classes using the thread context class loader and
  +    build an array of the methods and priorities we use in this class
  +    using reflection.
  +    */
      private static synchronized void initLog4j() throws ClassNotFoundException,
  -      NoSuchMethodException, IllegalAccessException, IllegalArgumentException, 
InvocationTargetException
  +      NoSuchMethodException, IllegalAccessException, IllegalArgumentException,
  +      InvocationTargetException
      {
  -      if( log4jMethods != null )
  +      if( log4jMethods != null || initAttempts > 100 )
            return;
   
  +      initAttempts ++;
         ClassLoader loader = Thread.currentThread().getContextClassLoader();
  -      // Load the log4j Priority classes
  -      log4jPriorities = new Object[priorityNames.length];
  +      // Load the custom trace Priority class and log4j Priority
  +      Class trace = loader.loadClass(TRACE_PRIORITY_CLASS);
         Class priorityClass = loader.loadClass(PRIORITY_CLASS);
  +
  +      // Fill in the standard log4j Priority instances
         Class[] toPriorityTypes = {String.class};
         Method toPriority = priorityClass.getDeclaredMethod("toPriority", 
toPriorityTypes);
         for(int n = 1; n < priorityNames.length; n ++)
  @@ -221,22 +295,22 @@
            Object[] args = {priorityNames[n]};
            log4jPriorities[n] = toPriority.invoke(null, args);
         }
  -      // Load the custom trace Priority class
  -      Class trace = loader.loadClass(TRACE_PRIORITY_CLASS);
  -      toPriorityTypes = new Class[] {String.class, priorityClass};
         toPriority = trace.getDeclaredMethod("toPriority", toPriorityTypes);
  +      toPriorityTypes = new Class[] {String.class, priorityClass};
         log4jPriorities[0] = toPriority.invoke(null, new Object[]{"TRACE", 
log4jPriorities[1]});
   
         // Build an array of the log4j Category methods we use
  -      log4jMethods = new Method[N_METHODS];
  +      Method[] tmp = new Method[N_METHODS];
         Class categoryClass = loader.loadClass(CATEGORY_CLASS);
         Class[] paramTypes = {String.class};
  -      log4jMethods[GET_INSTANCE] = categoryClass.getDeclaredMethod("getInstance", 
paramTypes);
  +      tmp[GET_INSTANCE] = categoryClass.getDeclaredMethod("getInstance", 
paramTypes);
         paramTypes = new Class[] {priorityClass};
  -      log4jMethods[IS_ENABLED_FOR_PRIORITY] = 
categoryClass.getDeclaredMethod("isEnabledFor", paramTypes);
  +      tmp[IS_ENABLED_FOR_PRIORITY] = 
categoryClass.getDeclaredMethod("isEnabledFor", paramTypes);
         paramTypes = new Class[] {priorityClass, Object.class};
  -      log4jMethods[LOG_PRIORITY_MSG] = categoryClass.getDeclaredMethod("log", 
paramTypes);
  +      tmp[LOG_PRIORITY_MSG] = categoryClass.getDeclaredMethod("log", paramTypes);
         paramTypes = new Class[] {priorityClass, Object.class, Throwable.class};
  -      log4jMethods[LOG_PRIORITY_MSG_EX] = categoryClass.getDeclaredMethod("log", 
paramTypes);
  +      tmp[LOG_PRIORITY_MSG_EX] = categoryClass.getDeclaredMethod("log", paramTypes);
  +      // The log4jMethods is only assigned if all methods were found
  +      log4jMethods = tmp;
      }
   }
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to