From b0a7e3cf4a65ea95c79cf002596428d0aed2e26e Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Tue, 22 May 2007 23:30:15 +0000
Subject: [PATCH] Remove the dependence on AspectJ for all non method-entry and method-exit related debug messages. All debug statements will now work w/o  weaving enabled. However, method-entry and method-exit debug messages work only with weaving enabled.

---
 opends/src/server/org/opends/server/loggers/debug/DebugLogger.java |  268 +++++++----------------------------------------------
 1 files changed, 37 insertions(+), 231 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java b/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
index 3042fa9..4f1d514 100644
--- a/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
+++ b/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
@@ -29,16 +29,12 @@
 
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.nio.ByteBuffer;
 import java.lang.reflect.Method;
 import java.lang.reflect.InvocationTargetException;
 
-import org.opends.server.api.ProtocolElement;
 import org.opends.server.api.DebugLogPublisher;
 import org.opends.server.loggers.*;
 import org.opends.server.types.*;
-import org.opends.server.util.DynamicConstants;
 import org.opends.server.admin.std.server.DebugLogPublisherCfg;
 import org.opends.server.admin.std.meta.DebugLogPublisherCfgDefn;
 import org.opends.server.admin.server.ConfigurationAddListener;
@@ -52,8 +48,6 @@
 import static org.opends.server.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
-import com.sleepycat.je.*;
-
 /**
  * A logger for debug and trace logging. DebugLogger provides a debugging
  * management access point. It is used to configure the Tracers, as well as
@@ -81,13 +75,13 @@
   static final LogLevel DEFAULT_THROWN_LEVEL =
       DebugLogLevel.ERROR;
 
-  // The set of all DebugTracer aspect instances.
-  static CopyOnWriteArraySet<DebugTracer> classTracers =
-      new CopyOnWriteArraySet<DebugTracer>();
+  // The set of all DebugTracer instances.
+  private static ConcurrentHashMap<String, DebugTracer> classTracers =
+      new ConcurrentHashMap<String, DebugTracer>();
 
   // The set of debug loggers that have been registered with the server.  It
   // will initially be empty.
-  static ConcurrentHashMap<DN,
+  private static ConcurrentHashMap<DN,
       DebugLogPublisher> debugPublishers =
       new ConcurrentHashMap<DN,
           DebugLogPublisher>();
@@ -110,10 +104,9 @@
   {
     debugPublishers.put(dn, publisher);
 
-    // Update all existing aspect instances
-    addTracerSettings(publisher);
+    updateTracerSettings();
 
-    enabled = DynamicConstants.WEAVE_ENABLED;
+    enabled = true;
   }
 
   /**
@@ -129,9 +122,10 @@
     if(removed != null)
     {
       removed.close();
-      removeTracerSettings(removed);
     }
 
+    updateTracerSettings();
+
     if(debugPublishers.isEmpty())
     {
       enabled = false;
@@ -148,11 +142,12 @@
     for(DebugLogPublisher publisher : debugPublishers.values())
     {
       publisher.close();
-      removeTracerSettings(publisher);
     }
 
     debugPublishers.clear();
 
+    updateTracerSettings();
+
     enabled = false;
   }
 
@@ -227,19 +222,11 @@
       }
       catch(ConfigException e)
       {
-        if (debugEnabled())
-        {
-          debugCaught(DebugLogLevel.ERROR, e);
-        }
         messages.add(e.getMessage());
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
       catch (Exception e)
       {
-        if (debugEnabled())
-        {
-          debugCaught(DebugLogLevel.ERROR, e);
-        }
         int msgID = MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
         messages.add(getMessage(msgID, String.valueOf(config.dn().toString()),
                                 stackTraceToSingleLineString(e)));
@@ -406,57 +393,21 @@
   }
 
   /**
-   * Adds the settings for the provided publisher in all existing tracers.
-   * If existing settings exist for the given publisher, it will be updated
-   * with the new settings.
-   *
-   * @param publisher The debug log publisher with the new settings.
+   * Update all debug tracers with the settings in the registered
+   * publishers.
    */
-  @SuppressWarnings("unchecked")
-  public static void addTracerSettings(DebugLogPublisher publisher)
+  static void updateTracerSettings()
   {
-    // Make sure this publisher is still registered with us. If not, don't
-    // use its settings.
-    if(debugPublishers.contains(publisher))
-    {
-      for(DebugTracer tracer : classTracers)
-      {
-        tracer.classSettings.put(publisher,
-                                 publisher.getClassSettings(tracer.className));
+    DebugLogPublisher[] publishers =
+        debugPublishers.values().toArray(new DebugLogPublisher[0]);
 
-        // For some reason, the compiler doesn't see that
-        // debugLogPublihser.getMethodSettings returns a parameterized Map.
-        // This problem goes away if a parameterized verson of
-        // DebugLogPublisher is used. However, we can't not use reflection to
-        // instantiate a generic
-        // DebugLogPublisher<? extends DebugLogPublisherCfg> type. The only
-        // thing we can do is to just suppress the compiler warnings.
-        Map<String, TraceSettings> methodSettings =
-            publisher.getMethodSettings(tracer.className);
-        if(methodSettings != null)
-        {
-          tracer.methodSettings.put(publisher, methodSettings);
-        }
-      }
+    for(DebugTracer tracer : classTracers.values())
+    {
+      tracer.updateSettings(publishers);
     }
   }
 
   /**
-   * Removes the settings for the provided publisher in all existing tracers.
-   *
-   * @param publisher The debug log publisher to remove.
-   */
-  public static void removeTracerSettings(DebugLogPublisher publisher)
-  {
-    for(DebugTracer tracer : classTracers)
-    {
-      tracer.classSettings.remove(publisher);
-      tracer.methodSettings.remove(publisher);
-    }
-  }
-
-
-  /**
    * Indicates if debug logging is enabled.
    *
    * @return True if debug logging is enabled. False otherwise.
@@ -477,177 +428,32 @@
   }
 
   /**
-   * Stub method for logging an arbitrary event in a method at the INFO level.
-   * Implementation provided by AspectJ.
+   * Creates a new Debug Tracer for the caller class and registers it
+   * with the Debug Logger.
    *
-   * @param msg the message to be logged.
+   * @return The tracer created for the caller class.
    */
-  public static void debugVerbose(String msg) {}
+  public static DebugTracer getTracer()
+  {
+    DebugTracer tracer =
+        new DebugTracer(debugPublishers.values().
+            toArray(new DebugLogPublisher[0]));
+    classTracers.put(tracer.getTracedClassName(), tracer);
 
+    return tracer;
+  }
 
   /**
-   * Stub method for logging an arbitrary event in a method at the INFO level.
-   * Implementation provided by AspectJ.
+   * Returns the registered Debug Tracer for a traced class.
    *
-   * @param msg the message to be logged.
+   * @param className The name of the class tracer to retrieve.
+   * @return The tracer for the provided class or null if there are
+   *         no tracers registered.
    */
-  public static void debugInfo(String msg) {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method at the WARNING
-   * level. Implementation provided by AspectJ.
-   *
-   * @param msg the message to be logged.
-   */
-  public static void debugWarning(String msg) {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method at the ERROR
-   * level. Implementation provided by AspectJ.
-   *
-   * @param msg the message to be logged.
-   */
-  public static void debugError(String msg) {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method at the INFO
-   * level. Implementation provided by AspectJ.
-   *
-   * @param msg     The message to be formatted and logged.
-   * @param msgArgs The set of arguments to use to replace tokens in the
-   *                format string before it is returned.
-   */
-  public static void debugVerbose(String msg, Object... msgArgs) {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method at the INFO
-   * level. Implementation provided by AspectJ.
-   *
-   * @param msg     The message to be formatted and logged.
-   * @param msgArgs The set of arguments to use to replace tokens in the
-   *                format string before it is returned.
-   */
-  public static void debugInfo(String msg, Object... msgArgs) {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method at the WARNING
-   * level. Implementation provided by AspectJ.
-   *
-   * @param msg     The message to be formatted and logged.
-   * @param msgArgs The set of arguments to use to replace tokens in the
-   *                format string before it is returned.
-   */
-  public static void debugWarning(String msg, Object... msgArgs)
-  {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method at the ERROR
-   * level. Implementation provided by AspectJ.
-   *
-   * @param msg     The message to be formatted and logged.
-   * @param msgArgs The set of arguments to use to replace tokens in the
-   *                format string before it is returned.
-   */
-  public static void debugError(String msg, Object... msgArgs)
-  {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param msg   The message to be logged.
-   */
-  public static void debugMessage(LogLevel level, String msg)
-  {}
-
-
-  /**
-   * Stub method for logging an arbitrary event in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level   The level of the message being logged.
-   * @param msg     The message to be formatted and logged.
-   * @param msgArgs The set of arguments to use to replace tokens in the
-   *                format string before it is returned.
-   */
-  public static void debugMessage(LogLevel level, String msg,
-                                  Object... msgArgs) {}
-
-
-  /**
-   * Stub method for logging a caught exception in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param t     The exception caught.
-   */
-  public static void debugCaught(LogLevel level, Throwable t)
-  {}
-
-  /**
-   * Stub method for logging a thrown exception in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param t     The exception being thrown.
-   */
-  public static void debugThrown(LogLevel level, Throwable t)
-  {}
-
-
-  /**
-   * Stub method for logging an JE database access in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param status The JE return status code of the operation.
-   * @param database The JE database handle operated on.
-   * @param txn The JE transaction handle used in the operation.
-   * @param key The database key operated on.
-   * @param data The database value read or written.
-   */
-  public static void debugJEAccess(LogLevel level,
-                                   OperationStatus status,
-                                   Database database,
-                                   Transaction txn,
-                                   DatabaseEntry key, DatabaseEntry data) {}
-
-  /**
-   * Stub method for logging raw data in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param bytes The data to dump.
-   */
-  public static void debugData(LogLevel level, byte[] bytes) {}
-
-  /**
-   * Stub method for logging raw data in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param buffer The data to dump.
-   */
-  public static void debugData(LogLevel level, ByteBuffer buffer) {}
-
-  /**
-   * Stub method for logging a protocol element in a method.
-   * Implementation provided by AspectJ.
-   *
-   * @param level The level of the message being logged.
-   * @param element The protocol element to dump.
-   */
-  public static void debugProtocolElement(LogLevel level,
-                                          ProtocolElement element) {}
-
+  public static DebugTracer getTracer(String className)
+  {
+    return classTracers.get(className);
+  }
 
   /**
    * Classes and methods annotated with @NoDebugTracing will not be weaved with

--
Gitblit v1.10.0