Yeah, big mystery. I'm not sure we should have code like "if !
isAndroid()..." It might be better to // comment and catch
errors/exceptions because who know how Android will change.

Gary


On Wed, Jul 16, 2014 at 9:58 AM, Remko Popma <[email protected]> wrote:

> 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
>>>
>>
>>
>


-- 
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