FYI
Begin forwarded message:
From: Marina Vatkina <marina.vatkina(a)oracle.com>
Subject: [jsr345-experts] AroundConstruct interceptor
Date: 5 February 2013 13:41:01 EST
To: jsr345-experts(a)ejb-spec.java.net, users(a)interceptors-spec.java.net, Pete Muir
<pmuir(a)redhat.com>, Emmanuel Bernard <emmanuel(a)hibernate.org>
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