[cdi-dev] intercepted private @PostConstruct method behaviour?

Mark Struberg struberg at yahoo.de
Tue Jan 8 04:13:26 EST 2013


Oki, I see. Just wanted to make sure we are talking about the same 'physical' thing ;)


LieGrue,
strub



----- Original Message -----
> From: Martin Kouba <mkouba at redhat.com>
> To: Mark Struberg <struberg at yahoo.de>
> Cc: Pete Muir <pmuir at redhat.com>; "cdi-dev at lists.jboss.org" <cdi-dev at lists.jboss.org>
> Sent: Tuesday, January 8, 2013 9:56 AM
> Subject: Re: [cdi-dev] intercepted private @PostConstruct method behaviour?
> 
> Dne 7.1.2013 21:35, Mark Struberg napsal(a):
>>>  in this case there are two lifecycle callback
>>>  interceptor methods
>> 
>>  Well, it is not 100% to the point I fear. At least not if we stick to the 
> defined terms 
>> 
>>  The point is that a @PostConstruct on a bean is NOT a lifecycle callback 
> INTERCEPTOR but a lifecycle callback method.
>>  And the @PostConstruct on the Interceptor must have the InvocationContext 
> parameter. So this is essentially a different thing!
>> 
> 
> The Interceptors spec uses the term "lifecycle callback interceptor
> method" (see Interceptors for LifeCycle Event Callbacks):
> 
> "Lifecycle callback interceptor methods defined on an interceptor class
> have the following signature:
> void <METHOD>(InvocationContext)
> Lifecycle callback interceptor methods defined on a target class have
> the following signature:
> void <METHOD>()"
> 
> So it's a different thing but has the same name :-)
> 
>> 
>> 
>>  But after reading 7.2 again I agree that @PostConstruct, etc methods 
> automatically becomes a 'business method' if manually invoked.
>> 
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>> 
>>>  ________________________________
>>>  From: Pete Muir <pmuir at redhat.com>
>>>  To: Martin Kouba <mkouba at redhat.com> 
>>>  Cc: cdi-dev at lists.jboss.org
>>>  Sent: Monday, January 7, 2013 4:32 PM
>>>  Subject: Re: [cdi-dev] intercepted private @PostConstruct method 
> behaviour?
>>> 
>>>  I think Martin is right.
>>> 
>>>  On 7 Jan 2013, at 08:40, Martin Kouba wrote:
>>> 
>>>>  Hi,
>>>> 
>>>>  my interpretation is that in this case there are two lifecycle 
> callback
>>>>  interceptor methods. The first on the target class (MyService). The
>>>>  other one on the interceptor class (TransactionalInterceptor). Each 
> time
>>>>  a new contextual instance of MyService is initialized all the 
> lifecycle
>>>>  callback interceptor methods are invoked according to the rules 
> defined
>>>>  in the Interceptors spec (Multiple Callback Interceptor Methods for 
> a
>>>>  Life Cycle Callback Event) -> TransactionalInterceptor first.
>>>> 
>>>>  With regards the manual invocation of doTheInit (via a contextual
>>>>  reference to the bean):
>>>>  * according to the CDI spec (7.2 Container invocations and
>>>>  interception), such an invocation will result in a regular business
>>>>  method invocation (aroundInvoke intercepted, decorated, etc.)
>>>>  * and again both lifecycle callbacks will only be invoked if a new
>>>>  contextual instance of MyService is initialized
>>>> 
>>>>  Re TCK - raise an issue please :-)
>>>> 
>>>>  Martin
>>>> 
>>>> 
>>>>  Dne 5.1.2013 15:24, Mark Struberg napsal(a):
>>>>> 
>>>>> 
>>>>>  I guess I found the answer by studying the interceptors spec. 
> It states that
>>>>> 
>>>>>  "The PostConstruct and PreDestroy, annotations are used to 
> define an interceptor
>>>>>  method for a lifecycle callback event."
>>>>> 
>>>>>  I assume that those are really only meant for 'lifecycle 
> callback events' and must _not_ get invoked if they got called manually.
>>>>> 
>>>>>  Thus postConstructInterception will also get called for the 
> private method but NOT for a manual invocation if the doTheInit would be public.
>>>>> 
>>>>>  Is this interpretation correct?
>>>>>  Can we have a TCK for it? :D
>>>>> 
>>>>>  LieGrue,
>>>>>  strub
>>>>> 
>>>>> 
>>>>>  ----- Original Message -----
>>>>>>  From: Mark Struberg <struberg at yahoo.de>
>>>>>>  To: cdi-dev <cdi-dev at lists.jboss.org>
>>>>>>  Cc: 
>>>>>>  Sent: Saturday, January 5, 2013 2:56 PM
>>>>>>  Subject: [cdi-dev] intercepted private @PostConstruct 
> method behaviour?
>>>>>> 
>>>>>>  Hi folks!
>>>>>> 
>>>>>>  What happens if I have a 
>>>>>> 
>>>>>> 
>>>>>>  @Transactional
>>>>>>  public class MyService {
>>>>>>  @PostConstruct
>>>>>>  private void doTheInit() {...}
>>>>>> 
>>>>>>  Where the interceptor looks like
>>>>>>  @Interceptor @Transactional 
>>>>>>  public class TransactionalInterceptor {
>>>>>> 
>>>>>>  @PostConstruct
>>>>>>  public void postConstructInterception(InvocationContext ic) 
> {..}
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>  Question a.) does the @Transactional interceptor still 
> apply to the _private_ 
>>>>>>  doTheInit() method?
>>>>>> 
>>>>>>  Question b.) consider the doTheInit() method being changed 
> to public and it will 
>>>>>>  get invoked by a user. Does the postConstructInterception 
> still get invoked? Or 
>>>>>>  must it only get invoked for _real_ PostConstruct actions 
> triggered by the 
>>>>>>  container?
>>>>>> 
>>>>>>  LieGrue,
>>>>>>  strub
>>>>>> 
>>>> 
>>>>  _______________________________________________
>>>>  cdi-dev mailing list
>>>>  cdi-dev at lists.jboss.org
>>>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
>>> 
>>> 
>>>  _______________________________________________
>>>  cdi-dev mailing list
>>>  cdi-dev at lists.jboss.org
>>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
>>> 
>>> 
>>> 
>> 
> 


More information about the cdi-dev mailing list