Dear Cognoscenti,

I believe I have found a bug.
The situation is a webapp with BerkeleyDB[1] (from Sleepycat software,
now Oracle).
Running it in Resin 3.1.8 fails during initialization and the culprit
is the method com.caucho.log.EnvironmentLogger.getHandlers().
BerkeleyDB plays around with the loggers (java.util.logging) and the
expectation[2] in the code base is that an array is always returned
from getHandlers(), never null.  That seems to be a valid assumption,
the method in EnvironmentLogger overrides a method in
java.util.logging.Logger[3], which does indeed make sure return an
empty array instead of null.

>From what I can tell the fix is relatively simple, unless I am
mistaken it is just a matter of making the default value an empty
array. In other words the constructor of EnvironmentLogger should
call:

    _localHandlers.setGlobal(new Handler[0]);

That approach could affect how "parent" environments work, so maybe
the fix should be a little bit more like the implementation in
java.util.logging.Logger.  I don't understand the code well enough to
make that judgement.

The workaround is not entirely simple, I ended up grabbing all 8
loggers used by BerkeleyDB in this configuration and add a dummy
handler to each of them.

Thanks,

Knut Forkalsrud

[1]: http://download.oracle.com/maven/com/sleepycat/je/4.0.92/je-4.0.92.jar
[2]: 
https://www.docjar.com/html/api/com/sleepycat/je/utilint/LoggerUtils.java.html#151
[3]: http://www.docjar.com/html/api/java/util/logging/Logger.java.html#1211


_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to