Hello again,
I have now been able to roll my sleeves up a bit further and made
these
findings:
1. The error, a NullPointerException, occurs when the Tomcat method
WebappClassLoader.clearReferences is trying to clear the variable
logger
in the class org.apache.openejb.core.transaction.SimpleWorkManager.
The
logger variable is of type org.apache.openejb.util.Logger.
2. The problem in the Logger class is in this piece of code:
    public static Logger getInstance(LogCategory
category, String
baseName) {
        try {
           
Logger logger = loggerCache.compute(new Object[]{category,
baseName});
           
return logger;
        } catch
(InterruptedException e) {
            //
Don't return null here. Just create a new Logger and set
it up.
            //
It will not be stored in the cache, but a later lookup
for the
            //
same Logger would probably end up in the cache
           
LogStream logStream =
logStreamFactory.createLogStream(category);
           
Logger logger = new Logger(category, logStream, baseName);
           
return logger;
        }
    }
The exception is thrown from the compute-method of the loggerCache,
an
object of the type Memoizer, called on this line:
Logger logger = loggerCache.compute(new Object[]{category,
baseName});
3. The code in Memoizer looks like this:
public class Memoizer implements Computable {
    private final ConcurrentMap cache = new
ConcurrentHashMap();
    private final Computable c;
    public Memoizer(Computable c) {
        this.c = c;
    }
    public V compute(final K key) throws
InterruptedException {
        while (true) {
           
Future future = cache.get(key);
            if
(future == null) {
               
Callable eval = new Callable() {
                   
public V call() throws Exception {
                       
return c.compute(key);
                   
}
               
};
The exception occurs at the line: return c.compute(key); because c is
null.
4. Going back to the Logger class, the c in the Memoizer class above
should be initialized with the value of the instance variable
loggerResolver, which is another static variable declared before
loggerCache.
Does this makes things any more clear for those of you who are more
familiar with the OpenEJB code?
Best regards,
 Ivan A Krizsan