Gurkan, I recapitulated our previous conversation and came to the conclusion 
that we really need to use references also in the NotificationManager, because 
otherwise something like 


@Transactional
public void onUserLogin(@Observes UserLoggedInEvent uli) {
  ... do something in the database ...
} 

would not work.

I will now look at the problem why my injection points are null if I only use 
field access (it works if I invoke methods).

LieGrue,
strub

--- On Fri, 1/22/10, [email protected] <[email protected]> wrote:

> From: [email protected] <[email protected]>
> Subject: svn commit: r902270 - in /openwebbeans/trunk/webbeans-impl/src: 
> main/java/org/apache/webbeans/event/ main/java/org/apache/webbeans/intercept/ 
> test/java/org/apache/webbeans/test/ 
> test/java/org/apache/webbeans/test/component/event/normal/ test/java/org/a...
> To: [email protected]
> Date: Friday, January 22, 2010, 10:17 PM
> Author: struberg
> Date: Fri Jan 22 21:17:31 2010
> New Revision: 902270
> 
> URL: http://svn.apache.org/viewvc?rev=902270&view=rev
> Log:
> OWB-249 use a bean reference instead of the internal
> instance to enable interceptors and decorators for eventing
> methods
> 
> Added:
>    
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/Transactional.java
>    
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/TransactionalInterceptor.java
> Modified:
>    
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
>    
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
>    
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
>    
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
>    
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/ObserversComponentTest.java
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=902270&r1=902269&r2=902270&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
> Fri Jan 22 21:17:31 2010
> @@ -160,7 +160,7 @@
>      
>    AbstractBean<Object>
> specializedComponent = null;
>          Object object =
> null;
>          
> -        CreationalContext<?>
> creationalContext = null;
> +       
> CreationalContext<Object> creationalContext = null;
>          
>          try
>          {
> @@ -189,15 +189,15 @@
>              
>    
>              
>    creationalContext =
> manager.createCreationalContext(specializedComponent);
>              
>    
> -                //
> lookup the contextual instance if one already exists
> -               
> object = context.get(specializedComponent);
> -                
> -               
> if(object == null && !this.ifExist)
> +                //
> on Reception.IF_EXISTS: ignore this bean if a the contextual
> instance doesn't already exist
> +                if
> (ifExist && context.get(specializedComponent) ==
> null) 
>              
>    {
> -               
>     // on Reception.ALWAYS we must get a
> contextual reference if we didn't find the contextual
> instance
> -               
>     object =
> manager.getReference(specializedComponent,
> specializedComponent.getBeanClass(), creationalContext);
> +               
>     return;
>              
>    }
>              
>    
> +                //
> on Reception.ALWAYS we must get a contextual reference if we
> didn't find the contextual instance
> +               
> object = manager.getReference(specializedComponent,
> specializedComponent.getBeanClass(), creationalContext);
> +                
>              
>    if (object != null)
>              
>    {
>                
>      //Invoke Method
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java?rev=902270&r1=902269&r2=902270&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
> Fri Jan 22 21:17:31 2010
> @@ -165,7 +165,7 @@
>      private static void
> addMethodInterceptors(Class<?> clazz,
> List<InterceptorData> stack,
> Set<Interceptor<?>> componentInterceptors)
>      {
>          Method[] methods =
> clazz.getDeclaredMethods();
> -        Set<Annotation> set =
> new HashSet<Annotation>();
> +        Set<Annotation>
> interceptorAnns = new HashSet<Annotation>();
>  
>          for (Method method :
> methods)
>          {
> @@ -176,12 +176,12 @@
>  
>              
>    for (Annotation ann : anns)
>              
>    {
> -               
>     set.add(ann);
> +               
>     interceptorAnns.add(ann);
>              
>    }
>  
>              
>    for (Annotation ann : annsClazz)
>              
>    {
> -               
>     set.add(ann);
> +               
>     interceptorAnns.add(ann);
>              
>    }
>              }
>  
> @@ -194,30 +194,33 @@
>  
>                
>      for (Annotation ann :
> steroInterceptorBindings)
>                
>      {
> -               
>         set.add(ann);
> +               
>         interceptorAnns.add(ann);
>                
>      }
>              
>    }
>              }
>  
> -            Annotation[]
> result = new Annotation[set.size()];
> -            result =
> set.toArray(result);
> -
> -           
> Set<Interceptor<?>> setInterceptors =
> findDeployedWebBeansInterceptor(result);
> -            
> -           
> if(componentInterceptors != null)
> -            {
> -               
> setInterceptors.removeAll(componentInterceptors);   
> -            }
> -
> -           
> Iterator<Interceptor<?>> it =
> setInterceptors.iterator();
> -
> -            while
> (it.hasNext())
> +            if
> (!interceptorAnns.isEmpty())
>              {
> -               
> WebBeansInterceptor<?> interceptor =
> (WebBeansInterceptor<?>) it.next();
> -
> -               
> WebBeansUtil.configureInterceptorMethods(interceptor,
> interceptor.getClazz(), AroundInvoke.class, true, true,
> stack, method, true);
> -               
> WebBeansUtil.configureInterceptorMethods(interceptor,
> interceptor.getClazz(), PostConstruct.class, true, true,
> stack, method, true);
> -               
> WebBeansUtil.configureInterceptorMethods(interceptor,
> interceptor.getClazz(), PreDestroy.class, true, true, stack,
> method, true);
> +               
> Annotation[] result = new
> Annotation[interceptorAnns.size()];
> +               
> result = interceptorAnns.toArray(result);
> +    
> +               
> Set<Interceptor<?>> setInterceptors =
> findDeployedWebBeansInterceptor(result);
> +                
> +               
> if(componentInterceptors != null)
> +                {
> +               
>    
> setInterceptors.removeAll(componentInterceptors);   
> +                }
> +    
> +               
> Iterator<Interceptor<?>> it =
> setInterceptors.iterator();
> +    
> +               
> while (it.hasNext())
> +                {
> +               
>     WebBeansInterceptor<?> interceptor =
> (WebBeansInterceptor<?>) it.next();
> +    
> +               
>    
> WebBeansUtil.configureInterceptorMethods(interceptor,
> interceptor.getClazz(), AroundInvoke.class, true, true,
> stack, method, true);
> +               
>    
> WebBeansUtil.configureInterceptorMethods(interceptor,
> interceptor.getClazz(), PostConstruct.class, true, true,
> stack, method, true);
> +               
>    
> WebBeansUtil.configureInterceptorMethods(interceptor,
> interceptor.getClazz(), PreDestroy.class, true, true, stack,
> method, true);
> +                }
>              }
>          }
>  
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java?rev=902270&r1=902269&r2=902270&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
> Fri Jan 22 21:17:31 2010
> @@ -419,17 +419,13 @@
>          ManagedBean<T>
> component = null;
>  
>      
>    ManagedBeanConfigurator.checkManagedBeanCondition(clazz);
> -        {
> -            // This is the
> interceptor class
> -            if
> (InterceptorsManager.getInstance().isInterceptorEnabled(clazz))
> -            {
> -               
> InterceptorUtil.checkInterceptorConditions(clazz);
> -               
> component = ManagedBeanConfigurator.define(clazz,
> WebBeansType.INTERCEPTOR);
> -               
> WebBeansInterceptorConfig.configureInterceptorClass((ManagedBean<Object>)
> component, 
> -               
>        
> AnnotationUtil.getInterceptorBindingMetaAnnotations(clazz.getDeclaredAnnotations()));
> -            }
> +        
> +       
> InterceptorsManager.getInstance().addNewInterceptor(clazz);
> +       
> InterceptorUtil.checkInterceptorConditions(clazz);
> +        component =
> ManagedBeanConfigurator.define(clazz,
> WebBeansType.INTERCEPTOR);
> +       
> WebBeansInterceptorConfig.configureInterceptorClass((ManagedBean<Object>)
> component, 
> +               
> AnnotationUtil.getInterceptorBindingMetaAnnotations(clazz.getDeclaredAnnotations()));
>  
> -        }
>  
>          return component;
>      }
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java?rev=902270&r1=902269&r2=902270&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
> Fri Jan 22 21:17:31 2010
> @@ -1,15 +1,18 @@
>  /*
> - * Licensed to the Apache Software Foundation (ASF) under
> one or more
> - * contributor license agreements. See the NOTICE file
> distributed with this
> - * work for additional information regarding copyright
> ownership. The ASF
> - * licenses this file to You under the Apache License,
> Version 2.0 (the
> - * "License"); you may not use this file except in
> compliance with the License.
> - * You may obtain a copy of the License at
> - * http://www.apache.org/licenses/LICENSE-2.0 Unless
> required by applicable law
> - * or agreed to in writing, software distributed under the
> License is
> - * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
> CONDITIONS OF ANY
> - * KIND, either express or implied. See the License for
> the specific language
> - * governing permissions and limitations under the
> License.
> + *  Licensed to the Apache Software Foundation (ASF)
> under one or more
> + *  contributor license agreements.  See the
> NOTICE file distributed with
> + *  this work for additional information regarding
> copyright ownership.
> + *  The ASF licenses this file to You under the
> Apache License, Version 2.0
> + *  (the "License"); you may not use this file except
> in compliance with
> + *  the License.  You may obtain a copy of the
> License at
> + * 
> + *       http://www.apache.org/licenses/LICENSE-2.0
> + * 
> + *  Unless required by applicable law or agreed to in
> writing, software
> + *  distributed under the License is distributed on
> an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
> either express or implied.
> + *  See the License for the specific language
> governing permissions and
> + *  limitations under the License.
>   */
>  package org.apache.webbeans.test.component.event.normal;
>  
> @@ -28,12 +31,20 @@
>  
>      private String user;
>  
> +    /** This gets set via the
> TransactionalInterceptor */
> +    public static boolean hasBeenIntercepted;
> +
>      public void afterLogin(@Observes
> @Role(value = "USER") LoggedInEvent event,
> PaymentProcessorComponent payment)
>      {
> +        hasBeenIntercepted = false;
>          this.payment =
> payment.getPaymentCheck();
>          this.user =
> event.getUserName();
>      }
>  
> +    /**
> +     * Test if observer functions can
> be intercepted
> +     */
> +    @Transactional
>      public void
> afterAdminLogin(@Observes @Role(value = "ADMIN")
> LoggedInEvent event, PaymentProcessorComponent payment)
>      {
>          this.payment =
> payment.getPaymentCheck();
> 
> Added:
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/Transactional.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/Transactional.java?rev=902270&view=auto
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/Transactional.java
> (added)
> +++
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/Transactional.java
> Fri Jan 22 21:17:31 2010
> @@ -0,0 +1,32 @@
> +/*
> + *  Licensed to the Apache Software Foundation (ASF)
> under one or more
> + *  contributor license agreements.  See the
> NOTICE file distributed with
> + *  this work for additional information regarding
> copyright ownership.
> + *  The ASF licenses this file to You under the
> Apache License, Version 2.0
> + *  (the "License"); you may not use this file except
> in compliance with
> + *  the License.  You may obtain a copy of the
> License at
> + * 
> + *       http://www.apache.org/licenses/LICENSE-2.0
> + * 
> + *  Unless required by applicable law or agreed to in
> writing, software
> + *  distributed under the License is distributed on
> an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
> either express or implied.
> + *  See the License for the specific language
> governing permissions and
> + *  limitations under the License.
> + */
> +package org.apache.webbeans.test.component.event.normal;
> +
> +import java.lang.annotation.ElementType;
> +import java.lang.annotation.Retention;
> +import java.lang.annotation.RetentionPolicy;
> +import java.lang.annotation.Target;
> +
> +import javax.interceptor.InterceptorBinding;
> +
> +...@interceptorbinding
> +...@retention(RetentionPolicy.RUNTIME)
> +...@target( { ElementType.TYPE, ElementType.METHOD })
> +public @interface Transactional 
> +{
> +
> +}
> 
> Added:
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/TransactionalInterceptor.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/TransactionalInterceptor.java?rev=902270&view=auto
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/TransactionalInterceptor.java
> (added)
> +++
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/TransactionalInterceptor.java
> Fri Jan 22 21:17:31 2010
> @@ -0,0 +1,43 @@
> +/*
> + *  Licensed to the Apache Software Foundation (ASF)
> under one or more
> + *  contributor license agreements.  See the
> NOTICE file distributed with
> + *  this work for additional information regarding
> copyright ownership.
> + *  The ASF licenses this file to You under the
> Apache License, Version 2.0
> + *  (the "License"); you may not use this file except
> in compliance with
> + *  the License.  You may obtain a copy of the
> License at
> + * 
> + *       http://www.apache.org/licenses/LICENSE-2.0
> + * 
> + *  Unless required by applicable law or agreed to in
> writing, software
> + *  distributed under the License is distributed on
> an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
> either express or implied.
> + *  See the License for the specific language
> governing permissions and
> + *  limitations under the License.
> + */
> +package org.apache.webbeans.test.component.event.normal;
> +
> +import javax.interceptor.AroundInvoke;
> +import javax.interceptor.Interceptor;
> +import javax.interceptor.InvocationContext;
> +
> +...@interceptor
> +...@transactional
> +public class TransactionalInterceptor
> +{
> +
> +    @AroundInvoke
> +    public Object caller(InvocationContext
> context) throws Exception
> +    {
> +        try
> +        {
> +           
> ComponentWithObserves2.hasBeenIntercepted = true;
> +            return
> context.proceed();
> +            
> +        }catch(Exception e)
> +        {
> +           
> ComponentWithObserves2.hasBeenIntercepted = false;
> +        }
> +        
> +        return null;
> +    }
> +}
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/ObserversComponentTest.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/ObserversComponentTest.java?rev=902270&r1=902269&r2=902270&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/ObserversComponentTest.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/ObserversComponentTest.java
> Fri Jan 22 21:17:31 2010
> @@ -1,15 +1,18 @@
>  /*
> - * Licensed to the Apache Software Foundation (ASF) under
> one or more
> - * contributor license agreements. See the NOTICE file
> distributed with this
> - * work for additional information regarding copyright
> ownership. The ASF
> - * licenses this file to You under the Apache License,
> Version 2.0 (the
> - * "License"); you may not use this file except in
> compliance with the License.
> - * You may obtain a copy of the License at
> - * http://www.apache.org/licenses/LICENSE-2.0 Unless
> required by applicable law
> - * or agreed to in writing, software distributed under the
> License is
> - * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
> CONDITIONS OF ANY
> - * KIND, either express or implied. See the License for
> the specific language
> - * governing permissions and limitations under the
> License.
> + *  Licensed to the Apache Software Foundation (ASF)
> under one or more
> + *  contributor license agreements.  See the
> NOTICE file distributed with
> + *  this work for additional information regarding
> copyright ownership.
> + *  The ASF licenses this file to You under the
> Apache License, Version 2.0
> + *  (the "License"); you may not use this file except
> in compliance with
> + *  the License.  You may obtain a copy of the
> License at
> + * 
> + *       http://www.apache.org/licenses/LICENSE-2.0
> + * 
> + *  Unless required by applicable law or agreed to in
> writing, software
> + *  distributed under the License is distributed on
> an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
> either express or implied.
> + *  See the License for the specific language
> governing permissions and
> + *  limitations under the License.
>   */
>  package
> org.apache.webbeans.test.unittests.event.component;
>  
> @@ -31,6 +34,7 @@
>  import
> org.apache.webbeans.test.component.event.normal.ComponentWithObservable1;
>  import
> org.apache.webbeans.test.component.event.normal.ComponentWithObserves1;
>  import
> org.apache.webbeans.test.component.event.normal.ComponentWithObserves2;
> +import
> org.apache.webbeans.test.component.event.normal.TransactionalInterceptor;
>  import org.apache.webbeans.test.event.LoggedInEvent;
>  import org.apache.webbeans.util.WebBeansUtil;
>  import org.junit.Before;
> @@ -152,6 +156,7 @@
>      {
>          clear();
>  
> +       
> defineInterceptor(TransactionalInterceptor.class);
>      
>    defineManagedBean(CheckWithCheckPayment.class);
>      
>    defineManagedBean(CheckWithMoneyPayment.class);
>      
>    defineManagedBean(PaymentProcessorComponent.class);
> @@ -180,21 +185,35 @@
>  
>          }
>  
> +       
> ComponentWithObserves2.hasBeenIntercepted = false;
> +        
>          Annotation[] anns =
> new Annotation[1];
>          anns[0] = new
> RoleUser();
>  
>      
>    getManager().fireEvent(event, anns);
>      
>    ComponentWithObserves2 instance =
> getManager().getInstance(component);
>  
> +       
> Assert.assertFalse(ComponentWithObserves2.hasBeenIntercepted);
> +        
>      
>    Assert.assertNotNull(instance.getPayment());
>      
>    Assert.assertEquals("USER",
> instance.getUser());
>  
>          anns[0] = new
> RoleAdmin();
>          event = new
> LoggedInEvent("ADMIN");
> +        
> +        getManager().fireEvent(event,
> anns);
> +        instance =
> getManager().getInstance(component);
> +
> +       
> Assert.assertTrue(ComponentWithObserves2.hasBeenIntercepted);
> +       
> Assert.assertNotNull(instance.getPayment());
> +        Assert.assertEquals("ADMIN",
> instance.getUser());
>  
> +        // lessons learned: do it
> again sam! ;)
> +       
> ComponentWithObserves2.hasBeenIntercepted = false;
>      
>    getManager().fireEvent(event, anns);
>          instance =
> getManager().getInstance(component);
>  
> +       
> Assert.assertTrue(ComponentWithObserves2.hasBeenIntercepted);
>      
>    Assert.assertNotNull(instance.getPayment());
>      
>    Assert.assertEquals("ADMIN",
> instance.getUser());
>  
> 
> 
> 



Reply via email to