But beats me why the JNDI stuff would throw a VerifyError and the JMX stuff
only a NoClassDefFoundError...


On Wed, Jul 16, 2014 at 10:49 PM, Remko Popma <[email protected]> wrote:

> I did think about that but if you look at the stack trace it is able to
> load the Server class, so I think we're okay:
>
>     java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory
>             at 
> org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:118)
>             at 
> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:369)
>
>
>
>
> On Wed, Jul 16, 2014 at 10:41 PM, Gary Gregory <[email protected]>
> wrote:
>
>> I do not think this is going to work. See my fix for the JNDI lookup
>> loading.
>>
>> Because you have a hard reference in the LoggerContext class to our JMX
>> Server class, you still have a dependency on JMX. We need to refer to our
>> JMX Server class dynamically, using reflection for example.
>>
>> Gary
>>
>>
>> ---------- Forwarded message ----------
>> From: <[email protected]>
>> Date: Wed, Jul 16, 2014 at 9:31 AM
>> Subject: svn commit: r1611003 - in /logging/log4j/log4j2/trunk:
>> log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>> log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java
>> src/changes/changes.xml
>> To: [email protected]
>>
>>
>> Author: rpopma
>> Date: Wed Jul 16 13:31:07 2014
>> New Revision: 1611003
>>
>> URL: http://svn.apache.org/r1611003
>> Log:
>> LOG4J2-716: automatically disable log4j JMX when detecting we are running
>> on Android
>>
>> Added:
>>
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java
>>   (with props)
>> Modified:
>>
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>     logging/log4j/log4j2/trunk/src/changes/changes.xml
>>
>> Modified:
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>> URL:
>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java?rev=1611003&r1=1611002&r2=1611003&view=diff
>>
>> ==============================================================================
>> ---
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>> (original)
>> +++
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>> Wed Jul 16 13:31:07 2014
>> @@ -41,6 +41,7 @@ import org.apache.logging.log4j.core.con
>>  import org.apache.logging.log4j.core.config.Reconfigurable;
>>  import org.apache.logging.log4j.core.jmx.Server;
>>  import org.apache.logging.log4j.core.util.Assert;
>> +import org.apache.logging.log4j.core.util.Environment;
>>  import org.apache.logging.log4j.core.util.NetUtils;
>>  import org.apache.logging.log4j.message.MessageFactory;
>>  import org.apache.logging.log4j.spi.AbstractLogger;
>> @@ -365,10 +366,12 @@ public class LoggerContext extends Abstr
>>
>>          firePropertyChangeEvent(new PropertyChangeEvent(this,
>> PROPERTY_CONFIG, prev, config));
>>
>> -        try {
>> -            Server.reregisterMBeansAfterReconfigure();
>> -        } catch (final Exception ex) {
>> -            LOGGER.error("Could not reconfigure JMX", ex);
>> +        if (!Environment.isAndroid()) { // LOG4J2-716: Android has no
>> java.lang.management
>> +            try {
>> +                Server.reregisterMBeansAfterReconfigure();
>> +            } catch (final Exception ex) {
>> +                LOGGER.error("Could not reconfigure JMX", ex);
>> +            }
>>          }
>>          return prev;
>>      }
>>
>> Added:
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java
>> URL:
>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java?rev=1611003&view=auto
>>
>> ==============================================================================
>> ---
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java
>> (added)
>> +++
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java
>> Wed Jul 16 13:31:07 2014
>> @@ -0,0 +1,34 @@
>> +/*
>> + * 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.logging.log4j.core.util;
>> +
>> +/**
>> + * Runtime environment-related utility methods.
>> + */
>> +public final class Environment {
>> +    private Environment() {
>> +    }
>> +
>> +    /**
>> +     * Returns {@code true} if we are running on Android, {@code false}
>> otherwise
>> +     * @return {@code true} if system property
>> "java.specification.vendor" contains "android"
>> +     */
>> +    public static boolean isAndroid() {
>> +        return System.getProperty("java.specification.vendor",
>> "x").toLowerCase().contains("android");
>> +    }
>> +}
>>
>> Propchange:
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Environment.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
>> URL:
>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1611003&r1=1611002&r2=1611003&view=diff
>>
>> ==============================================================================
>> --- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
>> +++ logging/log4j/log4j2/trunk/src/changes/changes.xml Wed Jul 16
>> 13:31:07 2014
>> @@ -22,6 +22,9 @@
>>    </properties>
>>    <body>
>>      <release version="?" date="2014-mm-dd" description="?">
>> +      <action issue="LOG4J2-716" dev="popmarem" type="fix">
>> +        Automatically disable log4j JMX when detecting we are running on
>> Android.
>> +      </action>
>>        <action issue="LOG4J2-657" dev="popmarem" type="fix"
>> due-to="Stefan Wehner">
>>          Fixed AbstractDatabaseManager to close connection on
>> writeInternal error.
>>        </action>
>>
>>
>>
>>
>>
>> --
>> E-Mail: [email protected] | [email protected]
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>

Reply via email to