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
