We need an Android section on the site explain what we know will not work and what we disable...
Gary On Wed, Jul 16, 2014 at 10:25 AM, Matt Sicker <[email protected]> wrote: > I think it's rather technical why we get one exception or the other. The > VerifyError would happen during linkage, while the no class def would > happen during loading. The VerifyError was in a constructor. The other one > might be in a different location. You'd probably get an > ExceptionInInitializationError if it happened inside the static block for > instance. > > > On 16 July 2014 09:18, Remko Popma <[email protected]> wrote: > >> 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 >>> >> >> > > > -- > Matt Sicker <[email protected]> > -- 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
