Author: rmannibucau
Date: Wed Jan 9 10:31:38 2013
New Revision: 1430769
URL: http://svn.apache.org/viewvc?rev=1430769&view=rev
Log:
lazy init of openjpa loggers + small exception protection
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
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=1430769&r1=1430768&r2=1430769&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
Wed Jan 9 10:31:38 2013
@@ -19,90 +19,99 @@ package org.apache.openejb.openjpa;
import org.apache.openejb.util.JuliLogStream;
import org.apache.openjpa.lib.log.Log;
+import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class JULOpenJPALog implements Log {
- private final Logger logger;
+ private final Callable<Logger> logger;
- public JULOpenJPALog(final Logger delegate) {
+ public JULOpenJPALog(final Callable<Logger> 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");
+ }
+ }
+
@Override
public boolean isTraceEnabled() {
- return logger.isLoggable(Level.FINEST);
+ return logger().isLoggable(Level.FINEST);
}
@Override
public boolean isInfoEnabled() {
- return logger.isLoggable(Level.INFO);
+ return logger().isLoggable(Level.INFO);
}
@Override
public boolean isWarnEnabled() {
- return logger.isLoggable(Level.WARNING);
+ return logger().isLoggable(Level.WARNING);
}
@Override
public boolean isErrorEnabled() {
- return logger.isLoggable(Level.SEVERE);
+ return logger().isLoggable(Level.SEVERE);
}
@Override
public boolean isFatalEnabled() {
- return logger.isLoggable(Level.SEVERE);
+ return logger().isLoggable(Level.SEVERE);
}
@Override
public void trace(Object o) {
- logger.log(record(o, Level.FINEST));
+ logger().log(record(o, Level.FINEST));
}
@Override
public void trace(Object o, Throwable t) {
- logger.log(record(o, t, Level.FINEST));
+ logger().log(record(o, t, Level.FINEST));
}
@Override
public void info(Object o) {
- logger.log(record(o, Level.INFO));
+ logger().log(record(o, Level.INFO));
}
@Override
public void info(Object o, Throwable t) {
- logger.log(record(o, t, Level.INFO));
+ logger().log(record(o, t, Level.INFO));
}
@Override
public void warn(Object o) {
- logger.log(record(o, Level.WARNING));
+ logger().log(record(o, Level.WARNING));
}
@Override
public void warn(Object o, Throwable t) {
- logger.log(record(o, t, Level.WARNING));
+ logger().log(record(o, t, Level.WARNING));
}
@Override
public void error(Object o) {
- logger.log(record(o.toString(), Level.SEVERE));
+ logger().log(record(o.toString(), Level.SEVERE));
}
@Override
public void error(Object o, Throwable t) {
- logger.log(record(o, t, Level.SEVERE));
+ logger().log(record(o, t, Level.SEVERE));
}
@Override
public void fatal(Object o) {
- logger.log(record(o, Level.SEVERE));
+ logger().log(record(o, Level.SEVERE));
}
@Override
public void fatal(Object o, Throwable t) {
- logger.log(record(o, t, Level.SEVERE));
+ logger().log(record(o, t, Level.SEVERE));
}
private LogRecord record(final Object o, final Throwable t, final Level
level) {
@@ -113,7 +122,7 @@ public class JULOpenJPALog implements L
private LogRecord record(final Object o, final Level level) {
final LogRecord record = new JuliLogStream.OpenEJBLogRecord(level,
o.toString());
- record.setSourceMethodName(logger.getName());
+ record.setSourceMethodName(logger().getName());
return record;
}
}
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=1430769&r1=1430768&r2=1430769&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
Wed Jan 9 10:31:38 2013
@@ -19,11 +19,37 @@ package org.apache.openejb.openjpa;
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(Logger.getLogger(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;
+ }
}
}