jsr345-experts@ejb-spec.java.net

[jsr345-experts] Re: AroundConstruct interceptor

From: Marina Vatkina <marina.vatkina_at_oracle.com>
Date: Wed, 06 Feb 2013 10:58:48 -0800

If there are no objections, I'm rolling it in into the Interceptors spec.

-marina

On 2/5/13 10:41 AM, Marina Vatkina wrote:
> This is the extended description of the proposal:
>
> 1. AroundConsruct interceptor
>
> The AroundConstruct annotation denotes lifecycle callback interceptor
> methods that interpose on invocation of the target instance constructor.
>
> The AroundConstruct interceptor methods may be only defined on
> interceptor classes and/or superclasses of interceptor classes.
>
> When the AroundConstruct lifecycle callback, if any, is invoked the
> following rules apply:
> * The AroundConstruct lifecycle callback is invoked after the
> dependency injection has been completed on the interceptor instance.
> Injection of the target component into interceptor instances that are
> invoked during the AroundConstruct lifecycle callback, is not supported.
> * The target instance is created and its constructor injection is
> performed, if any, when the last interceptor method in the
> AroundConstruct interceptor chain invokes the
> InvocationContext.proceed method.
> * The AroundConstruct interceptor method can access the
> constructed instance using InvocationContext.getTarget method after
> the InvocationContext.proceed completes.
> * An AroundConstruct lifecycle callback interceptor method should
> not invoke any business methods of the target instance.
> * The dependency injection on the target instance is not completed
> until after invocation of all interceptor methods in the
> AroundConstruct interceptor chain complete successfully.
> * The PostConstruct lifecycle callback, if any, is invoked after
> the dependency injection has been completed on the target instance.
>
> If the AroundConstruct lifecycle callback is not associated with the
> target instance, all interceptor methods, including PostConstruct
> callbacks, if any, are invoked after dependency injection has been
> completed on both, the interceptor instances and the target instance.
>
>
> 2. Extending InvocationContext interface
>
> a) The InvocationContext interface will be extended with the
> getConstructor method:
>
> public Constructor getConstructor();
>
> The getConstructor method returns the constructor of the target class
> for which the AroundConstruct interceptor was invoked. For
> around-invoke, around-timeout and all other lifecycle callback
> interceptor methods, getConstructor returns null.
>
>
> b) The getTarget method description will be modified as follows:
>
> The getTarget method returns the associated target instance; for the
> AroundConstruct lifecycle callback interceptor method, getTarget
> returns null if called before proceed method returns.
>
> c) No changes are required for the getMethod and getTimer methods of
> the InvocationContext as they are already required to return null for
> lifecycle callback interceptor methods
>
> Best,
> -marina
>
>