Hm... Good point. I will remove the Environment class and put a try/catch Throwable around the Server.reregisterMBeansAfterReconfigure invocation.
On Wed, Jul 16, 2014 at 11:02 PM, Gary Gregory <[email protected]> wrote: > 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 >
