On Fri, Aug 16, 2013 at 8:31 PM, Nick Williams < nicho...@nicholaswilliams.net> wrote:
> Several inline comments. > > On Aug 16, 2013, at 6:43 PM, Gary Gregory wrote: > > Make sure you can see the messages from the status logger, maybe there is > an error processing the log4j config file early on. > > > There are no messages from the status logger. > > G > > > On Fri, Aug 16, 2013 at 7:38 PM, Remko Popma <remko.po...@gmail.com>wrote: > >> What is this " LoggingTest.cleanupClass:49 NullPointer" at the bottom of >> your list of errors? What does that do? >> > > The NPE is coming from the method that cleans up after all the tests in > the class have run. I'm ignoring this error. It doesn't happen if the tests > pass, so obviously the problem is the tests, not the NPE in the cleanup > method. It's just a symptom of the test failures, not a symptom of the > underlying problem. > > >> >> On Sat, Aug 17, 2013 at 8:27 AM, Gary Gregory <garydgreg...@gmail.com>wrote: >> >>> It's likely that MongoDB needs another jar on the CP. >>> >> > Doesn't appear so. Otherwise MongoException would be found BUT one of its > dependencies would trigger a NoClassDefFoundError. Plus, I've looked > through the code. The only dependencies that it has that aren't in the same > JAR are dependencies that com.mongodb.DB also has. So therefore they aren't > the cause of the problem, or it would fail even without my new code. > > Here is the entire stack trace of one of the failures. They all look > identical to this, minus different test names / methods that they call. > > testTraceWithException(org.apache.log4j.LoggerTest) Time elapsed: 0.137 > sec <<< ERROR! > java.lang.NoClassDefFoundError: com/mongodb/MongoException > at java.net.URLClassLoader$1.run(URLClassLoader.java:202) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:190) > at java.lang.ClassLoader.loadClass(ClassLoader.java:306) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) > at java.lang.ClassLoader.loadClass(ClassLoader.java:247) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:171) > at > org.apache.logging.log4j.core.config.plugins.PluginManager.decode(PluginManager.java:232) > at > org.apache.logging.log4j.core.config.plugins.PluginManager.collectPlugins(PluginManager.java:151) > at > org.apache.logging.log4j.core.config.plugins.PluginManager.collectPlugins(PluginManager.java:129) > at > org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:116) > at > org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:102) > at > org.apache.logging.log4j.core.layout.PatternLayout.createPatternParser(PatternLayout.java:183) > at > org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:115) > at > org.apache.logging.log4j.core.layout.PatternLayout.createLayout(PatternLayout.java:218) > at > org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:51) > at > org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:63) > at > org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:204) > at > org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:101) > at > org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:67) > at > org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:83) > at > org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:34) > at org.apache.logging.log4j.LogManager.getContext(LogManager.java:200) > at org.apache.log4j.Logger$PrivateManager.getContext(Logger.java:61) > at org.apache.log4j.Logger.getRootLogger(Logger.java:47) > at org.apache.log4j.LoggerTest.testTraceWithException(LoggerTest.java:415) > Is this run from an IDE or from the command line with Maven? Do both fail the same? Gary > > >>> G >>> >>> >>> On Fri, Aug 16, 2013 at 6:48 PM, Nick Williams < >>> nicho...@nicholaswilliams.net> wrote: >>> >>>> Guys, I'm having a hard time with this simple fix that should have >>>> taken five minutes. I'm getting test failures due to NoClassDefFoundErrors >>>> that shouldn't happen. >>>> >>>> Here are the tests in error: >>>> CategoryTest.setupClass:52 ? NoClassDefFound >>>> com/mongodb/MongoException >>>> LoggerTest.testTraceWithException:415 ? NoClassDefFound >>>> com/mongodb/MongoExcep... >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testLog:459 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testRB1:295 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testRB2:314 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testRB3:334 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testTrace:388 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testAdditivity1:119 ? NoClassDefFound >>>> com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testAdditivity2:144 ? NoClassDefFound >>>> com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testAdditivity3:183 ? NoClassDefFound >>>> com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testIsTraceEnabled:443 ? NoClassDefFound >>>> com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.testExists:355 ? NoClassDefFound com/mongodb/MongoException >>>> LoggerTest.tearDown:75 ? NoClassDefFound com/mongodb/MongoException >>>> LoggingTest.setupClass:44 ? NoClassDefFound com/mongodb/MongoException >>>> LoggingTest.cleanupClass:49 NullPointer >>>> >>>> Here's the code I added: >>>> >>>> try { >>>> if (!database.authenticate(username, >>>> password.toCharArray())) { >>>> LOGGER.error("Failed to authenticate against >>>> MongoDB server. Unknown error."); >>>> } >>>> } catch (MongoException e) { >>>> LOGGER.error("Failed to authenticate against >>>> MongoDB: " + e.getMessage(), e); >>>> } catch (IllegalStateException e) { >>>> LOGGER.error("Factory-supplied MongoDB database >>>> connection already authenticated with different" + >>>> "credentials but lost connection."); >>>> } >>>> >>>> Problem is, "database" is an instance of com.mongodb.DB, which is in >>>> the same JAR as com.mongodb.MongoException. If I remove this code, the >>>> tests pass. How is this possible? The DB instance is there with or without >>>> this new code, which means the JAR is on the classpath, which means >>>> MongoException should be on the classpath. >>>> >>>> Very confused... >>>> >>>> Nick >>>> >>>> On Aug 16, 2013, at 5:13 PM, Gary Gregory wrote: >>>> >>>> Thank you for the update Nick! >>>> :) >>>> Gary >>>> >>>> >>>> On Fri, Aug 16, 2013 at 5:39 PM, Nick Williams < >>>> nicho...@nicholaswilliams.net> wrote: >>>> >>>>> Answers inline. >>>>> >>>>> On Aug 14, 2013, at 2:10 AM, YuCheng Ting wrote: >>>>> >>>>> Hi all, >>>>> >>>>> I use *beta8 *log4j2 and wrote log4j2.xml like example in document ( >>>>> http://logging.apache.org/log4j/2.x/manual/appenders.html#NoSQLAppender): >>>>> >>>>> >>>>> *<appenders> >>>>> <NoSql name="databaseAppender"> >>>>> <MongoDb databaseName="applicationDb" >>>>> collectionName="applicationLog" >>>>> server="mongo.example.org" >>>>> username="loggingUser" password="abc123" /> >>>>> </NoSql> >>>>> </appenders>* >>>>> >>>>> >>>>> Yep. That's correct. >>>>> >>>>> but I get the two exception: >>>>> >>>>> 1, "can't serialize class org.apache.logging.log4j.Level" exception in >>>>> (BasicBSONEncoder.java:270), I read the code and add follow code in my >>>>> project before logging, it gone. >>>>> >>>>> *BSON.addEncodingHook(org.apache.logging.log4j.Level.class, >>>>> new Transformer() { >>>>> @Override >>>>> public Object transform(Object o) { >>>>> return o.toString(); >>>>> } >>>>> });* >>>>> >>>>> >>>>> This bug was reported and fixed a few weeks ago. The fix will be in >>>>> the next version, or you can compile locally. >>>>> https://issues.apache.org/jira/browse/LOG4J2-330 >>>>> >>>>> 2, “not authorized for insert test.log”, because my MongoDB need auth >>>>> to write, but the the "username" and "password" attributes in log4j2.xml >>>>> is >>>>> nearly useless, after I read source code, found it *NOT auth* in >>>>> >>>>> * >>>>> org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider.createNoSQLProvider >>>>> * >>>>> source code line 181 after check username and password and * >>>>> com.mongodb.DB.authenticate* never be called. >>>>> >>>>> >>>>> This is a bug. I'm reporting it and fixing it now. The fix will be in >>>>> the next version, or you can compile locally (after I get the change >>>>> committed, of course). >>>>> >>>>> so I change log4j2.xml : >>>>> * >>>>> <NoSql name="mongodb"> >>>>> <MongoDb collectionName="log" databaseName="test" >>>>> >>>>> factoryClassName="com.yuchs.test.log4j.MainTest" >>>>> factoryMethodName="getMongoClient" /> >>>>> </NoSql>* >>>>> >>>>> and create MongoClient and call *com.mongodb.DB.authenticate* method >>>>> in *com.yuchs.test.log4j.MainTest.getMongoClient*. >>>>> >>>>> >>>>> *This is my question:* >>>>> >>>>> 1, Why not add BSON.addEncodingHook code into log4j2 project to avoid >>>>> basic exception ? or another rule of method I don't know ? >>>>> >>>>> 2, Why not auth DB in log4j2 project if password and username is set >>>>> in log4j2.xml ? or another rule of method I don't know ? >>>>> >>>>> Thanks everyone! >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>> 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: garydgreg...@gmail.com | ggreg...@apache.org >>> 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: garydgreg...@gmail.com | ggreg...@apache.org > 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: garydgreg...@gmail.com | ggreg...@apache.org 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