What happened?
Several of our handlers require a small slice of what is available on InvocationHandler:
TracingInvocationEventHandler only uses java.reflect.Method.getName() for operation names
MetricsInvocationEventHandler uses getStartTimeNanos() and getMethod()
CompositeInvocationEventHandler uses no values from InvocationContnext, only a array of contexts.
What did you want to happen?
We should consider loosening InvocationEventHandler generic to Object from InvocationContext. CompositeInvocationEventHandler may implement InvocationEventHandler<Object[]> and avoid copying argument arrays, additional System.nanoTime calls, etc.