Author: rmannibucau
Date: Fri Jan 11 01:38:03 2013
New Revision: 1431786

URL: http://svn.apache.org/viewvc?rev=1431786&view=rev
Log:
small optim on our logger + uniformization with openjpa jul logger

Added:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java?rev=1431786&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
 Fri Jan 11 01:38:03 2013
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.openejb.log;
+
+import org.apache.openejb.loader.SystemInstance;
+
+import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class LoggerCreator implements Callable<Logger> {
+    private final String name;
+    private Logger logger;
+    private volatile boolean init = false;
+
+    public LoggerCreator(final String channel) {
+        name = channel;
+    }
+
+    @Override
+    public Logger call() throws Exception {
+        if (logger == null) {
+            synchronized (this) { // no need of lock for this part
+                if (logger == null) {
+                    try {
+                        logger = Logger.getLogger(name);
+                    } catch (Exception e) {
+                        logger = Logger.getLogger(name); // try again
+                    }
+
+                    // if level set through properties force it
+                    final Properties p = SystemInstance.get().getProperties();
+                    final String levelName = p.getProperty("logging.level." + 
logger.getName());
+                    if (levelName != null) {
+                        final Level level = Level.parse(levelName);
+                        for (Handler handler : logger.getHandlers()) {
+                            handler.setLevel(level);
+                        }
+                    }
+
+                    init = true;
+                }
+            }
+        }
+        return logger;
+    }
+
+    public static final class Get {
+        private Get() {
+            // no-op
+        }
+
+        public static Logger exec(final LoggerCreator creator) {
+            try {
+                return creator.call();
+            } catch (Exception e) { // shouldn't occur regarding the impl we 
use
+                return Logger.getLogger("default");
+            }
+        }
+
+        public static Logger exec(final LoggerCreator logger, final 
AtomicBoolean debug, final AtomicBoolean info) {
+            final Logger l = exec(logger);
+            if (!logger.init) {
+                debug.set(l.isLoggable(Level.FINE));
+                info.set(l.isLoggable(Level.INFO));
+            }
+            return l;
+        }
+    }
+}

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
 Fri Jan 11 01:38:03 2013
@@ -16,37 +16,36 @@
  */
 package org.apache.openejb.openjpa;
 
+import org.apache.openejb.log.LoggerCreator;
 import org.apache.openejb.util.JuliLogStream;
 import org.apache.openjpa.lib.log.Log;
 
-import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
 public class JULOpenJPALog  implements Log {
-    private final Callable<Logger> logger;
+    private final LoggerCreator logger;
+    private final AtomicBoolean debug = new AtomicBoolean(false);
+    private final AtomicBoolean info = new AtomicBoolean(true);
 
-    public JULOpenJPALog(final Callable<Logger> delegate) {
+    public JULOpenJPALog(final LoggerCreator delegate) {
         logger = delegate;
     }
 
     private Logger logger() {
-        try {
-            return logger.call();
-        } catch (Exception e) { // shouldn't occur regarding the impl we use
-            return Logger.getLogger("default");
-        }
+        return LoggerCreator.Get.exec(logger, debug, info);
     }
 
     @Override
     public boolean isTraceEnabled() {
-        return logger().isLoggable(Level.FINEST);
+        return debug.get();
     }
 
     @Override
     public boolean isInfoEnabled() {
-        return logger().isLoggable(Level.INFO);
+        return info.get();
     }
 
     @Override
@@ -66,12 +65,16 @@ public class JULOpenJPALog  implements L
 
     @Override
     public void trace(Object o) {
-        logger().log(record(o, Level.FINEST));
+        if (isTraceEnabled()) {
+            logger().log(record(o, Level.FINEST));
+        }
     }
 
     @Override
     public void trace(Object o, Throwable t) {
-        logger().log(record(o, t, Level.FINEST));
+        if (isTraceEnabled()) {
+            logger().log(record(o, t, Level.FINEST));
+        }
     }
 
     @Override

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
 Fri Jan 11 01:38:03 2013
@@ -16,40 +16,13 @@
  */
 package org.apache.openejb.openjpa;
 
+import org.apache.openejb.log.LoggerCreator;
 import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.log.LogFactoryAdapter;
 
-import java.util.concurrent.Callable;
-import java.util.logging.Logger;
-
 public class JULOpenJPALogFactory extends LogFactoryAdapter {
     @Override
     protected Log newLogAdapter(final String channel) {
         return new JULOpenJPALog(new LoggerCreator(channel));
     }
-
-    private static class LoggerCreator implements Callable<Logger> {
-        private final String name;
-        private Logger logger;
-
-        public LoggerCreator(final String channel) {
-            name = channel;
-        }
-
-        @Override
-        public Logger call() throws Exception {
-            if (logger == null) {
-                synchronized (this) { // no need of lock for this part
-                    if (logger == null) {
-                        try {
-                            logger = Logger.getLogger(name);
-                        } catch (Exception e) {
-                            logger = Logger.getLogger(name); // try again
-                        }
-                    }
-                }
-            }
-            return logger;
-        }
-    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
 Fri Jan 11 01:38:03 2013
@@ -16,33 +16,24 @@
  */
 package org.apache.openejb.util;
 
-import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.log.LoggerCreator;
 
-import java.util.Properties;
-import java.util.logging.Handler;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
 public class JuliLogStream implements LogStream {
-    protected Logger logger;
+    protected final LoggerCreator logger;
+    protected final AtomicBoolean debug = new AtomicBoolean(false);
+    protected final AtomicBoolean info = new AtomicBoolean(false);
 
     public JuliLogStream(LogCategory logCategory) {
-        logger = Logger.getLogger(logCategory.getName());
-
-        // if level set through properties force it
-        final Properties p = SystemInstance.get().getProperties();
-        final String levelName = p.getProperty("logging.level." + 
logger.getName());
-        if (levelName == null) return;
-
-        final Level level = Level.parse(levelName);
-        for (Handler handler : logger.getHandlers()) {
-            handler.setLevel(level);
-        }
+        logger = new LoggerCreator(logCategory.getName());
     }
 
     public boolean isFatalEnabled() {
-        return logger.isLoggable(Level.SEVERE);
+        return LoggerCreator.Get.exec(logger, debug, 
info).isLoggable(Level.SEVERE);
     }
 
     public void fatal(String message) {
@@ -54,7 +45,7 @@ public class JuliLogStream implements Lo
     }
 
     public boolean isErrorEnabled() {
-        return logger.isLoggable(Level.SEVERE);
+        return LoggerCreator.Get.exec(logger, debug, 
info).isLoggable(Level.SEVERE);
     }
 
     public void error(String message) {
@@ -66,7 +57,7 @@ public class JuliLogStream implements Lo
     }
 
     public boolean isWarnEnabled() {
-        return logger.isLoggable(Level.WARNING);
+        return LoggerCreator.Get.exec(logger).isLoggable(Level.WARNING);
     }
 
     public void warn(String message) {
@@ -78,7 +69,7 @@ public class JuliLogStream implements Lo
     }
 
     public boolean isInfoEnabled() {
-        return logger.isLoggable(Level.INFO);
+        return LoggerCreator.Get.exec(logger).isLoggable(Level.INFO);
     }
 
     public void info(String message) {
@@ -90,7 +81,7 @@ public class JuliLogStream implements Lo
     }
 
     public boolean isDebugEnabled() {
-        return logger.isLoggable(Level.FINE);
+        return debug.get();
     }
 
     public void debug(String message) {
@@ -102,10 +93,11 @@ public class JuliLogStream implements Lo
     }
 
     private void log(Level level, String message, Throwable t) {
-        if (logger.isLoggable(level)) {
+        final Logger log = LoggerCreator.Get.exec(logger);
+        if (log.isLoggable(level)) {
             LogRecord logRecord = new OpenEJBLogRecord(level, message);
             if (t != null) logRecord.setThrown(t);
-            logger.log(logRecord);
+            log.log(logRecord);
         }
     }
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
 Fri Jan 11 01:38:03 2013
@@ -252,13 +252,11 @@ public class Logger {
     private final LogCategory category;
     private final LogStream logStream;
     private final String baseName;
-    private final boolean debug;
 
     public Logger(final LogCategory category, final LogStream logStream, final 
String baseName) {
         this.category = category;
         this.logStream = logStream;
         this.baseName = baseName;
-        this.debug = logStream.isDebugEnabled(); // commonly used and can be 
slow so cache it
     }
 
     public static Logger getInstance(final LogCategory category, final Class 
clazz) {
@@ -349,7 +347,7 @@ public class Logger {
     }
 
     public boolean isDebugEnabled() {
-        return debug;
+        return logStream.isDebugEnabled();
     }
 
     public boolean isErrorEnabled() {


Reply via email to