@Override public Object processInvocation(InterceptorContext context) throws Exception { final Method invokedMethod = context.getMethod(); final ComponentViewInstance componentViewInstance = context.getPrivateData(ComponentViewInstance.class); // For a lifecycle interception, the ComponentViewInstance (and the invoked business interface) // will be null. // On a normal method invocation, the invoked business interface will be obtained from the // ComponentViewInstance final Class<?> invokedBusinessInterface = componentViewInstance == null ? null : componentViewInstance.getViewClass(); Object[] parameters = context.getParameters(); SessionInvocationContext sessionInvocationContext = new CustomSessionInvocationContext( lifecycleCallback, context, invokedBusinessInterface, invokedMethod, parameters); context.putPrivateData(InvocationContext.class, sessionInvocationContext); CurrentInvocationContext.push(sessionInvocationContext); try { return context.proceed(); } finally { CurrentInvocationContext.pop(); context.putPrivateData(InvocationContext.class, null); } }