There's a thread safety issue here. I believe callTimeout needs to be fixed:


        final Interceptor interceptor;
        synchronized (this) {
            if(!started) {
                //this can happen if an invocation has been triggered as the deployment is shutting down
                throw EjbMessages.MESSAGES.timerInvocationFailedDueToInvokerNotBeingStarted();
            }
            interceptor = timeoutInterceptors.get(timeoutMethod);
        }