On 3/21/07, David Blevins <[EMAIL PROTECTED]> wrote:
>
> On Mar 21, 2007, at 7:37 PM, Prasad Kashyap wrote:
>
> > However, can you please help me understand this better.
> >
> > Section 12.4 of the spec says, "Lifecycle callback interceptor
methods
> > may be defined on superclasses of the bean class or interceptor
> > classes. However, a given class may not have more than one
lifecycle
> > callback interceptor method for the same lifecycle event."
> >
> > Also Section 12.4.1 says,
> > • If a bean class has superclasses, any lifecycle callback
interceptor
> > methods defined on those superclasses are invoked, most general
> > superclass first.
> > • The lifecycle callback interceptor method, if any, on the
bean class
> > itself is invoked.
> >
> >
> > My understanding is that for a given lifecycle event, (say
> > PostConstruct), the bean's superclass' @PostConstruct is first
called
> > followed by the bean's @PostConstruct. Am I correct ?
> >
> > If correct, then how can the superclass' @PostConstruct invoke
the
> > InvocationContext.proceed() ? The method signature of a lifecycle
> > callback method on a bean or it's superclass should be void
> > <METHOD>() . Where can it get a handle on the InvocationContext
> > object ? How can it proceed down the chain ?
>
> Good question. Looking at the code, it seems like things will just
> come to a halt. We may need to add something in there to fix that.
>
Has a fix for this been added now ?
> -David
Cheers
Prasad
>
> >
> > On 3/21/07, David Blevins <[EMAIL PROTECTED]> wrote:
> >>
> >> On Mar 20, 2007, at 1:39 PM, Prasad Kashyap wrote:
> >>
> >> > https://issues.apache.org/jira/secure/attachment/12353787/
> >> > Interceptor-v2.patch
> >> >
> >> > I have attached a patch here that defines a stateless bean
and a
> >> > stateful bean with lifecycle interceptors at many levels.
Both the
> >> > beans have super class with in-bean lifecycle interceptors.
Then
> >> the
> >> > beans themselves have in-bean lifecycle interceptors.
> >> >
> >> > The beans declare a @Interceptor class that has lifecycle
> >> > interceptors. The interceptor has a super class with lifecycle
> >> > interceptor.
> >> >
> >> > There are printlns in the interceptor code to verify the
callbacks
> >> > order.
> >> >
> >> > StatefulInterceptorTests and StatelessInterceptorTests in the
> >> client
> >> > code invoke the beans though they don't have specific test
> >> methods to
> >> > test the callbacks. See the printlns above.
> >> >
> >> > Expected results: (interceptor callback in the following
order,
> >> as per
> >> > Section 12.4.1 of core spec)
> >> > -------------------------
> >> > SuperClassInterceptor
> >> > ClassInterceptor
> >> > SuperBeanInterceptor
> >> > InBeanInterceptor
> >> >
> >> >
> >> > Actual Result:
> >> > --------------------
> >> > SuperClassInterceptor
> >> >
> >> >
> >> > The top most interceptor in the chain executes. Then it
doesn't go
> >> > down the chain. You can verify that by removing each top
one and it
> >> > executes only the next one in the chain.
> >>
> >> This is strange as I seems to work in this test case:
> >>
> >> http://fisheye6.cenqua.com/browse/openejb/trunk/openejb3/
container/
> >> openejb-core/src/test/java/org/apache/openejb/core/stateless/
> >> StatelessInterceptorTest.java?r=519214
> >>
> >> Maybe my test case is flawed somehow.
> >>
> >> The code that should be working and perhaps does not is:
> >>
> >> 1. Get the callbacks (including @AroundInvoke) declared in the
> >> class and it's super class and add them to the descriptor tree
> >> (AnnotationDeployer:line 568)[1].
> >> 2. Block out callbacks from parents overridden by the child.
> >> (InterceptorBindingBuilder: lines 134)[2]
> >> 3. Sort the callbacks parent first, child last
> >> (InterceptorBindingBuilder: lines 147)[3]
> >>
> >> -David
> >>
> >> [1] http://fisheye6.cenqua.com/browse/openejb/trunk/openejb3/
> >> container/openejb-core/src/main/java/org/apache/openejb/config/
> >> AnnotationDeployer.java?r=519454#l568
> >> [2] http://fisheye6.cenqua.com/browse/openejb/trunk/openejb3/
> >> container/openejb-core/src/main/java/org/apache/openejb/
assembler/
> >> classic/InterceptorBindingBuilder.java?r=519454#l134
> >> [3] http://fisheye6.cenqua.com/browse/openejb/trunk/openejb3/
> >> container/openejb-core/src/main/java/org/apache/openejb/
assembler/
> >> classic/InterceptorBindingBuilder.java?r=519454#l147
> >>
> >>
> >>
> >>
> >
>
>