Return-Path: X-Original-To: apmail-openwebbeans-commits-archive@www.apache.org Delivered-To: apmail-openwebbeans-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2FD5111BB8 for ; Fri, 6 Jun 2014 22:00:26 +0000 (UTC) Received: (qmail 28752 invoked by uid 500); 6 Jun 2014 22:00:26 -0000 Delivered-To: apmail-openwebbeans-commits-archive@openwebbeans.apache.org Received: (qmail 28725 invoked by uid 500); 6 Jun 2014 22:00:26 -0000 Mailing-List: contact commits-help@openwebbeans.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openwebbeans.apache.org Delivered-To: mailing list commits@openwebbeans.apache.org Received: (qmail 28715 invoked by uid 99); 6 Jun 2014 22:00:26 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Jun 2014 22:00:26 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Jun 2014 22:00:25 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 096F32388A5B; Fri, 6 Jun 2014 22:00:01 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1601023 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: config/BeansDeployer.java container/AbstractBeanManager.java intercept/InterceptorsManager.java portable/AnnotatedElementFactory.java Date: Fri, 06 Jun 2014 22:00:00 -0000 To: commits@openwebbeans.apache.org From: struberg@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140606220001.096F32388A5B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: struberg Date: Fri Jun 6 22:00:00 2014 New Revision: 1601023 URL: http://svn.apache.org/r1601023 Log: OWB-969 BeanManager#createAnnotatedType must not reflect Extension changes Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/AbstractBeanManager.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1601023&r1=1601022&r2=1601023&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Fri Jun 6 22:00:00 2014 @@ -932,7 +932,11 @@ public class BeansDeployer else { Annotation[] classAnnotations; - AnnotatedType annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz); + AnnotatedType annotatedType = webBeansContext.getAnnotatedElementFactory().getAnnotatedType(clazz); + if (annotatedType == null) + { + annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz); + } ProcessAnnotatedTypeImpl processAnnotatedEvent = webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(annotatedType); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/AbstractBeanManager.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/AbstractBeanManager.java?rev=1601023&r1=1601022&r2=1601023&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/AbstractBeanManager.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/AbstractBeanManager.java Fri Jun 6 22:00:00 2014 @@ -120,10 +120,15 @@ public abstract class AbstractBeanManage public Bean createBean(BeanAttributes attributes, Class type, InjectionTargetFactory factory) { + AnnotatedType annotatedType = getWebBeansContext().getAnnotatedElementFactory().getAnnotatedType(type); + if (annotatedType == null) + { + annotatedType = getWebBeansContext().getAnnotatedElementFactory().newAnnotatedType(type); + } return new InjectionTargetBean( getWebBeansContext(), WebBeansType.THIRDPARTY, - getWebBeansContext().getAnnotatedElementFactory().newAnnotatedType(type), + annotatedType, attributes, type, factory); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java?rev=1601023&r1=1601022&r2=1601023&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java Fri Jun 6 22:00:00 2014 @@ -123,7 +123,12 @@ public class InterceptorsManager Interceptor interceptor = (Interceptor) ejbInterceptors.get(interceptorClass); if (interceptor == null) { - AnnotatedType annotatedType = webBeansContext.getBeanManagerImpl().createAnnotatedType(interceptorClass); + AnnotatedType annotatedType = webBeansContext.getAnnotatedElementFactory().getAnnotatedType(interceptorClass); + if (annotatedType == null) + { + annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(interceptorClass); + } + BeanAttributesImpl beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build(); EjbInterceptorBeanBuilder buildr = new EjbInterceptorBeanBuilder(webBeansContext, annotatedType, beanAttributes); buildr.defineEjbInterceptorRules(); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java?rev=1601023&r1=1601022&r2=1601023&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java Fri Jun 6 22:00:00 2014 @@ -49,10 +49,18 @@ public final class AnnotatedElementFacto // Logger instance private final static Logger logger = WebBeansLoggerFacade.getLogger(AnnotatedElementFactory.class); - //Cache of the AnnotatedType + /** + * Cache of the initial AnnotatedTypes + */ private ConcurrentMap, ConcurrentMap>> annotatedTypeCache = new ConcurrentHashMap, ConcurrentMap>>(); - + + /** + * Cache of modified AnnotatedTypes. + */ + private ConcurrentMap, ConcurrentMap>> modifiedAnnotatedTypeCache = + new ConcurrentHashMap, ConcurrentMap>>(); + //Cache of AnnotatedConstructor private ConcurrentMap, AnnotatedConstructor> annotatedConstructorCache = new ConcurrentHashMap, AnnotatedConstructor>(); @@ -77,12 +85,22 @@ public final class AnnotatedElementFacto /** * Get an already registered AnnotatedType. This will NOT create a new one! - * @param annotatedClass - * @param - * @return AnnotatedType + * The returned AnnotatedType will reflect all the changes made during the + * boot process so far. + * If there was no AnnotatedType created yet for the given Class, + * null will be returned. */ public AnnotatedType getAnnotatedType(Class annotatedClass) { + ConcurrentMap> modifiedAnnotatedClasses = modifiedAnnotatedTypeCache.get(annotatedClass); + if (modifiedAnnotatedClasses != null) + { + AnnotatedType annotatedType = (AnnotatedType) modifiedAnnotatedClasses.get(OWB_DEFAULT_KEY); + if (annotatedType != null) + { + return annotatedType; + } + } return getAnnotatedTypeCache(annotatedClass).get(OWB_DEFAULT_KEY); } @@ -114,12 +132,27 @@ public final class AnnotatedElementFacto public AnnotatedType setAnnotatedType(AnnotatedType annotatedType, String id) { - ConcurrentMap> annotatedTypes = getAnnotatedTypeCache(annotatedType.getJavaClass()); + Class type = annotatedType.getJavaClass(); + ConcurrentMap> annotatedTypes = modifiedAnnotatedTypeCache.get(type); + if (annotatedTypes == null) + { + annotatedTypes = new ConcurrentHashMap>(); + } + ConcurrentMap> oldAnnotatedTypes = modifiedAnnotatedTypeCache.putIfAbsent(type, annotatedTypes); + if (oldAnnotatedTypes != null) + { + annotatedTypes = oldAnnotatedTypes; + } return (AnnotatedType) annotatedTypes.put(id, annotatedType); } /** - * Creates and configures new annotated type. + * Creates and configures a new annotated type. + * This always returns the fresh AnnotatedTypes without any modifications + * applied by Extensions!. + * + * To get any AnnotatedTypes which are modified during the boot process you shall use + * {@link #getAnnotatedType(Class)}. * * @param class info * @param annotatedClass annotated class