Mantis - Resin
Viewing Issue Advanced Details
3882 minor always 02-09-10 09:23 02-09-10 09:32
closed 4.0.3  
none 4.0.4  
0003882: EnvironmentLogger getHandlers must not return null
(rep by Knut Forkalsrud)

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

   _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.

02-09-10 09:32