public void callTimeout(final TimerImpl timer, final Method timeoutMethod) throws Exception {
if(!started) {
//this can happen if an invocation has been triggered as the deployment is shutting down
throw EjbMessages.MESSAGES.timerInvocationFailedDueToInvokerNotBeingStarted();
}
final Interceptor interceptor = timeoutInterceptors.get(timeoutMethod);
if(interceptor == null) {
throw EjbMessages.MESSAGES.failToInvokeTimeout(timeoutMethod);
}
final InterceptorContext context = new InterceptorContext();
context.setContextData(new HashMap<String, Object>());
context.setMethod(timeoutMethod);
if(timeoutMethod.getParameterTypes().length == 0) {
context.setParameters(new Object[0]);
} else {
final Object[] params = new Object[1];
params[0] = timer;
context.setParameters(params);
}
context.setTimer(timer);
if(timer.getPrimaryKey() != null) {
context.putPrivateData(EntityBeanComponent.PRIMARY_KEY_CONTEXT_KEY, timer.getPrimaryKey());
}
context.putPrivateData(Component.class, ejbComponent.getValue());
context.putPrivateData(MethodIntf.class, MethodIntf.TIMER);
context.putPrivateData(InvocationType.class, InvocationType.TIMER);
interceptor.processInvocation(context);
}