Author: rmannibucau
Date: Fri Jul 20 18:36:23 2012
New Revision: 1363893

URL: http://svn.apache.org/viewvc?rev=1363893&view=rev
Log:
OPENEJB-1837 making openwebbeans following openejb.log.factory

Added:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
    
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
 Fri Jul 20 18:36:23 2012
@@ -184,6 +184,7 @@ public class DeployerEjb implements Depl
                 }
             }
             appInfo = configurationFactory.configureApplication(appModule);
+            appInfo.autoDeploy = 
Boolean.parseBoolean(properties.getProperty("openejb.app.autodeploy", "false"));
 
             if (properties != null && 
properties.containsKey(OPENEJB_DEPLOYER_FORCED_APP_ID_PROP)) {
                 appInfo.appId = 
properties.getProperty(OPENEJB_DEPLOYER_FORCED_APP_ID_PROP);

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java?rev=1363893&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
 Fri Jul 20 18:36:23 2012
@@ -0,0 +1,36 @@
+/**
+ * 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.cdi.logging;
+
+import org.apache.openejb.log.logger.Log4jLogger;
+import org.apache.webbeans.logger.WebBeansLoggerFactory;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+public class Log4jLoggerFactory implements WebBeansLoggerFactory {
+    @Override
+    public Logger getLogger(Class<?> clazz, Locale desiredLocale) {
+        return new Log4jLogger(clazz.getName(), 
ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
+    }
+
+    @Override
+    public Logger getLogger(Class<?> clazz) {
+        return new Log4jLogger(clazz.getName(), "openwebbeans/Messages");
+    }
+}

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java?rev=1363893&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
 Fri Jul 20 18:36:23 2012
@@ -0,0 +1,36 @@
+/**
+ * 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.cdi.logging;
+
+import org.apache.openejb.log.logger.Slf4jLogger;
+import org.apache.webbeans.logger.WebBeansLoggerFactory;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+public class Slf4jLoggerFactory implements WebBeansLoggerFactory {
+    @Override
+    public Logger getLogger(Class<?> clazz, Locale desiredLocale) {
+        return new Slf4jLogger(clazz.getName(), 
ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
+    }
+
+    @Override
+    public Logger getLogger(Class<?> clazz) {
+        return new Slf4jLogger(clazz.getName(), "openwebbeans/Messages");
+    }
+}

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java?rev=1363893&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
 Fri Jul 20 18:36:23 2012
@@ -0,0 +1,416 @@
+/**
+ * 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.logger;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Filter;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+/**
+ * java.util.logging.Logger implementation delegating to another framework.
+ * All methods can be used except:
+ *   setLevel
+ *   addHandler / getHandlers
+ *   setParent / getParent
+ *   setUseParentHandlers / getUseParentHandlers
+ *
+ * @author gnodet
+ */
+public abstract class AbstractDelegatingLogger extends Logger {
+
+    protected AbstractDelegatingLogger(String name, String resourceBundleName) 
{
+        super(name, resourceBundleName);
+    }
+
+    public void log(LogRecord record) {
+        if (isLoggable(record.getLevel())) {
+            doLog(record);
+        }
+    }
+
+    public void log(Level level, String msg) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            doLog(lr);
+        }
+    }
+
+    public void log(Level level, String msg, Object param1) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            Object params[] = {param1 };
+            lr.setParameters(params);
+            doLog(lr);
+        }
+    }
+
+    public void log(Level level, String msg, Object params[]) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setParameters(params);
+            doLog(lr);
+        }
+    }
+
+    public void log(Level level, String msg, Throwable thrown) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setThrown(thrown);
+            doLog(lr);
+        }
+    }
+
+    public void logp(Level level, String sourceClass, String sourceMethod, 
String msg) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            doLog(lr);
+        }
+    }
+
+    public void logp(Level level, String sourceClass, String sourceMethod, 
String msg, Object param1) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            Object params[] = {param1 };
+            lr.setParameters(params);
+            doLog(lr);
+        }
+    }
+
+    public void logp(Level level, String sourceClass, String sourceMethod, 
String msg, Object params[]) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            lr.setParameters(params);
+            doLog(lr);
+        }
+    }
+
+    public void logp(Level level, String sourceClass, String sourceMethod, 
String msg, Throwable thrown) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            lr.setThrown(thrown);
+            doLog(lr);
+        }
+    }
+
+    public void logrb(Level level, String sourceClass, String sourceMethod, 
String bundleName, String msg) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            doLog(lr, bundleName);
+        }
+    }
+
+    public void logrb(Level level, String sourceClass, String sourceMethod,
+                      String bundleName, String msg, Object param1) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            Object params[] = {param1 };
+            lr.setParameters(params);
+            doLog(lr, bundleName);
+        }
+    }
+
+    public void logrb(Level level, String sourceClass, String sourceMethod,
+                      String bundleName, String msg, Object params[]) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            lr.setParameters(params);
+            doLog(lr, bundleName);
+        }
+    }
+
+    public void logrb(Level level, String sourceClass, String sourceMethod,
+                      String bundleName, String msg, Throwable thrown) {
+        if (isLoggable(level)) {
+            LogRecord lr = new LogRecord(level, msg);
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            lr.setThrown(thrown);
+            doLog(lr, bundleName);
+        }
+    }
+
+    public void entering(String sourceClass, String sourceMethod) {
+        if (isLoggable(Level.FINER)) {
+            logp(Level.FINER, sourceClass, sourceMethod, "ENTRY");
+        }
+    }
+
+    public void entering(String sourceClass, String sourceMethod, Object 
param1) {
+        if (isLoggable(Level.FINER)) {
+            Object params[] = {param1 };
+            logp(Level.FINER, sourceClass, sourceMethod, "ENTRY {0}", params);
+        }
+    }
+
+    public void entering(String sourceClass, String sourceMethod, Object 
params[]) {
+        if (isLoggable(Level.FINER)) {
+            String msg = "ENTRY";
+            if (params == null) {
+                logp(Level.FINER, sourceClass, sourceMethod, msg);
+                return;
+            }
+            StringBuilder builder = new StringBuilder(msg);
+            for (int i = 0; i < params.length; i++) {
+                builder.append(" {");
+                builder.append(Integer.toString(i));
+                builder.append("}");
+            }
+            logp(Level.FINER, sourceClass, sourceMethod, builder.toString(), 
params);
+        }
+    }
+
+    public void exiting(String sourceClass, String sourceMethod) {
+        if (isLoggable(Level.FINER)) {
+            logp(Level.FINER, sourceClass, sourceMethod, "RETURN");
+        }
+    }
+
+    public void exiting(String sourceClass, String sourceMethod, Object 
result) {
+        if (isLoggable(Level.FINER)) {
+            Object params[] = {result };
+            logp(Level.FINER, sourceClass, sourceMethod, "RETURN {0}", params);
+        }
+    }
+
+    public void throwing(String sourceClass, String sourceMethod, Throwable 
thrown) {
+        if (isLoggable(Level.FINER)) {
+            LogRecord lr = new LogRecord(Level.FINER, "THROW");
+            lr.setSourceClassName(sourceClass);
+            lr.setSourceMethodName(sourceMethod);
+            lr.setThrown(thrown);
+            doLog(lr);
+        }
+    }
+
+    public void severe(String msg) {
+        if (isLoggable(Level.SEVERE)) {
+            LogRecord lr = new LogRecord(Level.SEVERE, msg);
+            doLog(lr);
+        }
+    }
+
+    public void warning(String msg) {
+        if (isLoggable(Level.WARNING)) {
+            LogRecord lr = new LogRecord(Level.WARNING, msg);
+            doLog(lr);
+        }
+    }
+
+    public void info(String msg) {
+        if (isLoggable(Level.INFO)) {
+            LogRecord lr = new LogRecord(Level.INFO, msg);
+            doLog(lr);
+        }
+    }
+
+    public void config(String msg) {
+        if (isLoggable(Level.CONFIG)) {
+            LogRecord lr = new LogRecord(Level.CONFIG, msg);
+            doLog(lr);
+        }
+    }
+
+    public void fine(String msg) {
+        if (isLoggable(Level.FINE)) {
+            LogRecord lr = new LogRecord(Level.FINE, msg);
+            doLog(lr);
+        }
+    }
+
+    public void finer(String msg) {
+        if (isLoggable(Level.FINER)) {
+            LogRecord lr = new LogRecord(Level.FINER, msg);
+            doLog(lr);
+        }
+    }
+
+    public void finest(String msg) {
+        if (isLoggable(Level.FINEST)) {
+            LogRecord lr = new LogRecord(Level.FINEST, msg);
+            doLog(lr);
+        }
+    }
+
+    public void setLevel(Level newLevel) throws SecurityException {
+        throw new UnsupportedOperationException();
+    }
+
+    public abstract Level getLevel();
+
+    public boolean isLoggable(Level level) {
+        Level l = getLevel();
+        return level.intValue() >= l.intValue() && l != Level.OFF;
+    }
+
+    protected boolean supportsHandlers() {
+        return false;
+    }
+
+    public synchronized void addHandler(Handler handler) throws 
SecurityException {
+        if (supportsHandlers()) {
+            super.addHandler(handler);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    public synchronized void removeHandler(Handler handler) throws 
SecurityException {
+        if (supportsHandlers()) {
+            super.removeHandler(handler);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    public synchronized Handler[] getHandlers() {
+        if (supportsHandlers()) {
+            return super.getHandlers();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    public synchronized void setUseParentHandlers(boolean useParentHandlers) {
+        if (supportsHandlers()) {
+            super.setUseParentHandlers(useParentHandlers);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    public synchronized boolean getUseParentHandlers() {
+        if (supportsHandlers()) {
+            return super.getUseParentHandlers();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    public Logger getParent() {
+        return null;
+    }
+
+    public void setParent(Logger parent) {
+        throw new UnsupportedOperationException();
+    }
+
+    protected void doLog(LogRecord lr) {
+        lr.setLoggerName(getName());
+        String rbname = getResourceBundleName();
+        if (rbname != null) {
+            lr.setResourceBundleName(rbname);
+            lr.setResourceBundle(getResourceBundle());
+        }
+        internalLog(lr);
+    }
+
+    protected void doLog(LogRecord lr, String rbname) {
+        lr.setLoggerName(getName());
+        if (rbname != null) {
+            lr.setResourceBundleName(rbname);
+            lr.setResourceBundle(loadResourceBundle(rbname));
+        }
+        internalLog(lr);
+    }
+
+    protected void internalLog(LogRecord record) {
+        Filter filter = getFilter();
+        if (filter != null && !filter.isLoggable(record)) {
+            return;
+        }
+        String msg = formatMessage(record);
+        internalLogFormatted(msg, record);
+    }
+
+    protected abstract void internalLogFormatted(String msg, LogRecord record);
+
+    protected String formatMessage(LogRecord record) {
+        String format = record.getMessage();
+        ResourceBundle catalog = record.getResourceBundle();
+        if (catalog != null) {
+            try {
+                format = catalog.getString(record.getMessage());
+            } catch (MissingResourceException ex) {
+                format = record.getMessage();
+            }
+        }
+        try {
+            Object parameters[] = record.getParameters();
+            if (parameters == null || parameters.length == 0) {
+                return format;
+            }
+            if (format.indexOf("{0") >= 0 || format.indexOf("{1") >= 0
+                    || format.indexOf("{2") >= 0 || format.indexOf("{3") >= 0) 
{
+                return java.text.MessageFormat.format(format, parameters);
+            }
+            return format;
+        } catch (Exception ex) {
+            return format;
+        }
+    }
+
+    /**
+     * Load the specified resource bundle
+     *
+     * @param resourceBundleName
+     *            the name of the resource bundle to load, cannot be null
+     * @return the loaded resource bundle.
+     * @throws java.util.MissingResourceException
+     *             If the specified resource bundle can not be loaded.
+     */
+    static ResourceBundle loadResourceBundle(String resourceBundleName) {
+        // try context class loader to load the resource
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if (null != cl) {
+            try {
+                return ResourceBundle.getBundle(resourceBundleName, 
Locale.getDefault(), cl);
+            } catch (MissingResourceException e) {
+                // Failed to load using context classloader, ignore
+            }
+        }
+        // try system class loader to load the resource
+        cl = ClassLoader.getSystemClassLoader();
+        if (null != cl) {
+            try {
+                return ResourceBundle.getBundle(resourceBundleName, 
Locale.getDefault(), cl);
+            } catch (MissingResourceException e) {
+                // Failed to load using system classloader, ignore
+            }
+        }
+        return null;
+    }
+
+}

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java?rev=1363893&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
 Fri Jul 20 18:36:23 2012
@@ -0,0 +1,197 @@
+/**
+ * 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.logger;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+import org.apache.log4j.Appender;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Priority;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * java.util.logging.Logger implementation delegating to Log4j.
+ * All methods can be used except:
+ *   setLevel
+ *   addHandler / getHandlers
+ *   setParent / getParent
+ *   setUseParentHandlers / getUseParentHandlers
+ *
+ * @author gnodet
+ */
+public class Log4jLogger extends AbstractDelegatingLogger {
+    private static final Map<Level, org.apache.log4j.Level> TO_LOG4J = new 
HashMap<Level, org.apache.log4j.Level>();
+    private static final org.apache.log4j.Level TRACE;
+
+    private final org.apache.log4j.Logger log;
+
+    static {
+        //older versions of log4j don't have TRACE, use debug
+        org.apache.log4j.Level t = org.apache.log4j.Level.DEBUG;
+        try {
+            Field f = org.apache.log4j.Level.class.getField("TRACE");
+            t = (org.apache.log4j.Level)f.get(null);
+        } catch (Throwable ex) {
+            //ignore, assume old version of log4j
+        }
+        TRACE = t;
+
+        TO_LOG4J.put(Level.ALL,     org.apache.log4j.Level.ALL);
+        TO_LOG4J.put(Level.SEVERE,  org.apache.log4j.Level.ERROR);
+        TO_LOG4J.put(Level.WARNING, org.apache.log4j.Level.WARN);
+        TO_LOG4J.put(Level.INFO,    org.apache.log4j.Level.INFO);
+        TO_LOG4J.put(Level.CONFIG,  org.apache.log4j.Level.DEBUG);
+        TO_LOG4J.put(Level.FINE,    org.apache.log4j.Level.DEBUG);
+        TO_LOG4J.put(Level.FINER,   TRACE);
+        TO_LOG4J.put(Level.FINEST,  TRACE);
+        TO_LOG4J.put(Level.OFF,     org.apache.log4j.Level.OFF);
+    }
+
+    public Log4jLogger(String name, String resourceBundleName) {
+        super(name, resourceBundleName);
+        log = org.apache.log4j.LogManager.getLogger(name);
+    }
+
+    public Level getLevel() {
+        org.apache.log4j.Level l = log.getEffectiveLevel();
+        if (l != null) {
+            return fromL4J(l);
+        }
+        return null;
+    }
+
+    public void setLevel(Level newLevel) throws SecurityException {
+        log.setLevel(TO_LOG4J.get(newLevel));
+    }
+
+    public synchronized void addHandler(Handler handler) throws 
SecurityException {
+        log.addAppender(new HandlerWrapper(handler));
+    }
+    public synchronized void removeHandler(Handler handler) throws 
SecurityException {
+        log.removeAppender("HandlerWrapper-" + handler.hashCode());
+    }
+    public synchronized Handler[] getHandlers() {
+        List<Handler> ret = new ArrayList<Handler>();
+        Enumeration<?> en = log.getAllAppenders();
+        while (en.hasMoreElements()) {
+            Appender ap = (Appender)en.nextElement();
+            if (ap instanceof HandlerWrapper) {
+                ret.add(((HandlerWrapper)ap).getHandler());
+            }
+        }
+        return ret.toArray(new Handler[ret.size()]);
+    }
+
+    protected void internalLogFormatted(String msg, LogRecord record) {
+        log.log(AbstractDelegatingLogger.class.getName(),
+                TO_LOG4J.get(record.getLevel()),
+                msg,
+                record.getThrown());
+    }
+
+
+    private Level fromL4J(org.apache.log4j.Level l) {
+        Level l2 = null;
+        switch (l.toInt()) {
+            case org.apache.log4j.Level.ALL_INT:
+                l2 = Level.ALL;
+                break;
+            case org.apache.log4j.Level.FATAL_INT:
+                l2 = Level.SEVERE;
+                break;
+            case org.apache.log4j.Level.ERROR_INT:
+                l2 = Level.SEVERE;
+                break;
+            case org.apache.log4j.Level.WARN_INT:
+                l2 = Level.WARNING;
+                break;
+            case org.apache.log4j.Level.INFO_INT:
+                l2 = Level.INFO;
+                break;
+            case org.apache.log4j.Level.DEBUG_INT:
+                l2 = Level.FINE;
+                break;
+            case org.apache.log4j.Level.OFF_INT:
+                l2 = Level.OFF;
+                break;
+            default:
+                if (l.toInt() == TRACE.toInt()) {
+                    l2 = Level.FINEST;
+                }
+        }
+        return l2;
+    }
+
+
+    private class HandlerWrapper extends AppenderSkeleton {
+        Handler handler;
+
+        public HandlerWrapper(Handler h) {
+            handler = h;
+            name = "HandlerWrapper-" + h.hashCode();
+        }
+
+        public Handler getHandler() {
+            return handler;
+        }
+
+        @Override
+        protected void append(LoggingEvent event) {
+            LogRecord lr = new LogRecord(fromL4J(event.getLevel()),
+                    event.getMessage().toString());
+            lr.setLoggerName(event.getLoggerName());
+            if (event.getThrowableInformation() != null) {
+                lr.setThrown(event.getThrowableInformation().getThrowable());
+            }
+            String rbname = getResourceBundleName();
+            if (rbname != null) {
+                lr.setResourceBundleName(rbname);
+                lr.setResourceBundle(getResourceBundle());
+            }
+            handler.publish(lr);
+        }
+
+        public void close() {
+            handler.close();
+            closed = true;
+        }
+
+        public boolean requiresLayout() {
+            return false;
+        }
+
+        @Override
+        public Priority getThreshold() {
+            return TO_LOG4J.get(handler.getLevel());
+        }
+        @Override
+        public boolean isAsSevereAsThreshold(Priority priority) {
+            Priority p = getThreshold();
+            return (p == null) || priority.isGreaterOrEqual(p);
+        }
+    }
+}

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java?rev=1363893&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
 Fri Jul 20 18:36:23 2012
@@ -0,0 +1,183 @@
+/**
+ * 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.logger;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+import org.slf4j.spi.LocationAwareLogger;
+
+/**
+ * <p>
+ * java.util.logging.Logger implementation delegating to SLF4J.
+ * </p>
+ * <p>
+ * Methods {@link java.util.logging.Logger#setParent(Logger)}, {@link 
java.util.logging.Logger#getParent()},
+ * {@link java.util.logging.Logger#setUseParentHandlers(boolean)} and
+ * {@link java.util.logging.Logger#getUseParentHandlers()} are not overrriden.
+ * </p>
+ * <p>
+ * Level mapping inspired by {@link org.slf4j.bridge.SLF4JBridgeHandler}:
+ * </p>
+ *
+ * <pre>
+ * FINEST  -&gt; TRACE
+ * FINER   -&gt; DEBUG
+ * FINE    -&gt; DEBUG
+ * CONFIG  -&gt; DEBUG
+ * INFO    -&gt; INFO
+ * WARN ING -&gt; WARN
+ * SEVER   -&gt; ERROR
+ * </pre>
+ */
+public class Slf4jLogger extends AbstractDelegatingLogger {
+
+    private static final String FQCN = 
AbstractDelegatingLogger.class.getName();
+
+    private final org.slf4j.Logger logger;
+    private LocationAwareLogger locationAwareLogger;
+
+
+    public Slf4jLogger(String name, String resourceBundleName) {
+        super(name, resourceBundleName);
+        logger = org.slf4j.LoggerFactory.getLogger(name);
+        if (logger instanceof LocationAwareLogger) {
+            locationAwareLogger = (LocationAwareLogger) logger;
+        }
+    }
+    @Override
+    protected boolean supportsHandlers() {
+        return true;
+    }
+
+    @Override
+    public Level getLevel() {
+        Level level;
+        // Verify from the wider (trace) to the narrower (error)
+        if (logger.isTraceEnabled()) {
+            level = Level.FINEST;
+        } else if (logger.isDebugEnabled()) {
+            // map to the lowest between FINER, FINE and CONFIG
+            level = Level.FINER;
+        } else if (logger.isInfoEnabled()) {
+            level = Level.INFO;
+        } else if (logger.isWarnEnabled()) {
+            level = Level.WARNING;
+        } else if (logger.isErrorEnabled()) {
+            level = Level.SEVERE;
+        } else {
+            level = Level.OFF;
+        }
+        return level;
+    }
+
+    @Override
+    public boolean isLoggable(Level level) {
+        final int i = level.intValue();
+        if (i == Level.OFF.intValue()) {
+            return false;
+        } else if (i >= Level.SEVERE.intValue()) {
+            return logger.isErrorEnabled();
+        } else if (i >= Level.WARNING.intValue()) {
+            return logger.isWarnEnabled();
+        } else if (i >= Level.INFO.intValue()) {
+            return logger.isInfoEnabled();
+        } else if (i >= Level.FINER.intValue()) {
+            return logger.isDebugEnabled();
+        }
+        return logger.isTraceEnabled();
+    }
+
+
+    @Override
+    protected void internalLogFormatted(String msg, LogRecord record) {
+
+        Level level = record.getLevel();
+        Throwable t = record.getThrown();
+
+        Handler targets[] = getHandlers();
+        if (targets != null) {
+            for (Handler h : targets) {
+                h.publish(record);
+            }
+        }
+        if (!getUseParentHandlers()) {
+            return;
+        }
+
+        /*
+        * As we can not use a "switch ... case" block but only a "if ... else 
if ..." block, the order of the
+        * comparisons is important. We first try log level FINE then INFO, 
WARN, FINER, etc
+        */
+        if (Level.FINE.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.debug(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.DEBUG_INT, msg, null, t);
+            }
+        } else if (Level.INFO.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.info(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.INFO_INT, msg, null, t);
+            }
+        } else if (Level.WARNING.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.warn(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.WARN_INT, msg, null, t);
+            }
+        } else if (Level.FINER.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.trace(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.DEBUG_INT, msg, null, t);
+            }
+        } else if (Level.FINEST.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.trace(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.TRACE_INT, msg, null, t);
+            }
+        } else if (Level.ALL.equals(level)) {
+            // should never occur, all is used to configure java.util.logging
+            // but not accessible by the API Logger.xxx() API
+            if (locationAwareLogger == null) {
+                logger.error(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.ERROR_INT, msg, null, t);
+            }
+        } else if (Level.SEVERE.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.error(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.ERROR_INT, msg, null, t);
+            }
+        } else if (Level.CONFIG.equals(level)) {
+            if (locationAwareLogger == null) {
+                logger.debug(msg, t);
+            } else {
+                locationAwareLogger.log(null, FQCN, 
LocationAwareLogger.DEBUG_INT, msg, null, t);
+            }
+        } else if (Level.OFF.equals(level)) {
+            // don't log
+        }
+    }
+}

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
 Fri Jul 20 18:36:23 2012
@@ -17,11 +17,12 @@
 package org.apache.openejb.util;
 
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.log.ConsoleColorHandler;
+import org.apache.openejb.log.SingleLineFormatter;
+import org.apache.webbeans.logger.JULLoggerFactory;
 
 import java.util.logging.ConsoleHandler;
 import java.util.logging.LogManager;
-import org.apache.openejb.log.ConsoleColorHandler;
-import org.apache.openejb.log.SingleLineFormatter;
 
 /**
  * default conf = jre conf
@@ -58,6 +59,8 @@ public class JuliLogStreamFactory implem
         } catch (Exception ignored) {
             // no-op: openjpa is not at the classpath so don't trigger it 
loading with our logger
         }
+
+        System.setProperty("openwebbeans.logging.factory", 
JULLoggerFactory.class.getName());
     }
 
     public static boolean isNotIDE() {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
 Fri Jul 20 18:36:23 2012
@@ -19,6 +19,7 @@ package org.apache.openejb.util;
 import org.apache.log4j.ConsoleAppender;
 import org.apache.log4j.PropertyConfigurator;
 import org.apache.log4j.SimpleLayout;
+import org.apache.openejb.cdi.logging.Log4jLoggerFactory;
 import org.apache.openejb.loader.FileUtils;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
@@ -52,6 +53,7 @@ public class Log4jLogStreamFactory imple
             // The fall back here is that if log4j.configuration system 
property is set, then that configuration file will be used.
             e.printStackTrace();
         }
+        System.setProperty("openwebbeans.logging.factory", 
Log4jLoggerFactory.class.getName());
     }
 
     private void configureInternal() throws IOException {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
 Fri Jul 20 18:36:23 2012
@@ -16,6 +16,8 @@
  */
 package org.apache.openejb.util;
 
+import org.apache.openejb.cdi.logging.Slf4jLoggerFactory;
+
 /**
  * Simple Slf4jLogStream, not much configuration needed, as slf4j is just a 
facade 
  *
@@ -30,6 +32,8 @@ public class Slf4jLogStreamFactory imple
     public Slf4jLogStreamFactory() {
         System.setProperty("openjpa.Log", "slf4j");
         System.setProperty("org.apache.cxf.Logger", 
"org.apache.cxf.common.logging.Slf4jLogger");
+        System.setProperty("openwebbeans.logging.factory", 
Slf4jLoggerFactory.class.getName());
+
         // no need to configure internals:
         // by default we are using JUL
         // if the user set log4j he wants to configure it himself

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
 Fri Jul 20 18:36:23 2012
@@ -28,6 +28,8 @@ log4j.category.Transaction         = war
 log4j.category.org.apache.activemq = error
 log4j.category.org.apache.geronimo = error
 log4j.category.openjpa             = warn
+log4j.category.OpenEJB.cdi         = info
+log4j.category.org.apache.webbeans = info
 
 log4j.appender.C                           = org.apache.log4j.ConsoleAppender
 log4j.appender.C.layout                    = org.apache.log4j.SimpleLayout

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
 Fri Jul 20 18:36:23 2012
@@ -44,6 +44,8 @@ log4j.category.axis                = inf
 log4j.category.axis2               = info,R
 log4j.category.cxf                 = info,R
 log4j.category.org.apache.cxf      = info,R
+log4j.category.OpenEJB.cdi         = info, R
+log4j.category.org.apache.webbeans = info,R
 
 log4j.appender.R=org.apache.log4j.RollingFileAppender
 log4j.appender.R.layout=org.apache.log4j.PatternLayout


Reply via email to