You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/03/15 21:54:43 UTC
svn commit: r923435 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
component/ component/creation/ config/ container/ decorator/ intercept/
portable/events/discovery/ util/
Author: gerdogdu
Date: Mon Mar 15 20:54:43 2010
New Revision: 923435
URL: http://svn.apache.org/viewvc?rev=923435&view=rev
Log:
Update for TCK
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java (with props)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.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/events/discovery/AfterBeanDiscoveryImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java Mon Mar 15 20:54:43 2010
@@ -593,7 +593,7 @@ public abstract class AbstractOwbBean<T>
@Override
public void validatePassivationDependencies()
{
- if(isPassivationCapable())
+ if(isPassivationCapable() || (this instanceof AbstractProducerBean))
{
Set<InjectionPoint> injectionPoints = getInjectionPoints();
for(InjectionPoint injectionPoint : injectionPoints)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Mon Mar 15 20:54:43 2010
@@ -183,6 +183,7 @@ public abstract class AbstractInjectedTa
{
this.injectionTarget = injectionTarget;
this.injectionTargetSet = true;
+ //super.setProducer(injectionTarget);
}
/**
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=923435&r1=923434&r2=923435&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 Mon Mar 15 20:54:43 2010
@@ -43,12 +43,14 @@ import org.apache.webbeans.component.cre
import org.apache.webbeans.component.creation.BeanCreator.MetaDataProvider;
import org.apache.webbeans.config.OWBLogConst;
import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.decorator.DecoratorsManager;
import org.apache.webbeans.decorator.WebBeansDecorator;
import org.apache.webbeans.deployment.StereoTypeManager;
import org.apache.webbeans.deployment.StereoTypeModel;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.exception.WebBeansDeploymentException;
import org.apache.webbeans.exception.inject.InconsistentSpecializationException;
+import org.apache.webbeans.intercept.InterceptorsManager;
import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.plugins.OpenWebBeansJavaEEPlugin;
@@ -255,6 +257,9 @@ public class BeansDeployer
private void validateInjectionPoints()
{
logger.debug("Validation of injection points has started.");
+
+ DecoratorsManager.getInstance().validateDecoratorClasses();
+ InterceptorsManager.getInstance().validateInterceptorClasses();
BeanManagerImpl manager = BeanManagerImpl.getManager();
Set<Bean<?>> beans = new HashSet<Bean<?>>();
@@ -293,8 +298,7 @@ public class BeansDeployer
beans = manager.getBeans();
//Validate Others
- validate(beans);
-
+ validate(beans);
logger.info(OWBLogConst.INFO_0008);
}
@@ -343,7 +347,8 @@ public class BeansDeployer
}
else
{
- if(!bean.getBeanClass().isAnnotationPresent(javax.decorator.Decorator.class))
+ if(!bean.getBeanClass().isAnnotationPresent(javax.decorator.Decorator.class)
+ && !BeanManagerImpl.getManager().containsCustomDecoratorClass(bean.getBeanClass()))
{
throw new WebBeansConfigurationException("Delegate injection points can not defined by beans that are not decorator. Injection point : " + injectionPoint);
}
@@ -371,7 +376,7 @@ public class BeansDeployer
if (classIndex != null)
{
for(Class<?> implClass : classIndex)
- {
+ {
if (ManagedBeanConfigurator.isManagedBean(implClass))
{
ManagedBeanConfigurator.checkManagedBeanCondition(implClass);
@@ -544,7 +549,11 @@ public class BeansDeployer
throw new WebBeansConfigurationException("Passivation scoped defined bean must be passivation capable, " +
"but bean : " + beanObj.toString() + " is not passivation capable");
}
- }
+ else
+ {
+ ((OwbBean<?>)beanObj).validatePassivationDependencies();
+ }
+ }
((OwbBean<?>)beanObj).validatePassivationDependencies();
}
@@ -657,6 +666,12 @@ public class BeansDeployer
}
else
{
+ if(BeanManagerImpl.getManager().containsCustomDecoratorClass(annotatedType.getJavaClass()) ||
+ BeanManagerImpl.getManager().containsCustomInterceptorClass(annotatedType.getJavaClass()))
+ {
+ return;
+ }
+
logger.info(OWBLogConst.INFO_0009, new Object[]{annotatedType.getJavaClass().getName()});
WebBeansUtil.defineManagedBean(managedBeanCreator, annotatedType);
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Mon Mar 15 20:54:43 2010
@@ -126,6 +126,12 @@ public class BeanManagerImpl implements
/**XML configurator instance*/
private WebBeansXMLConfigurator xmlConfigurator = null;
+ /**Additional decorator class*/
+ private List<Class<?>> additionalDecoratorClasses = new CopyOnWriteArrayList<Class<?>>();
+
+ /**Additional interceptor class*/
+ private List<Class<?>> additionalInterceptorClasses = new CopyOnWriteArrayList<Class<?>>();
+
/**
* This list contains additional qualifiers which got set via the {@link BeforeBeanDiscovery#addQualifier(Class)}
* event function.
@@ -335,6 +341,30 @@ public class BeanManagerImpl implements
}
+ public void addCustomInterceptorClass(Class<?> clazz)
+ {
+ Asserts.nullCheckForClass(clazz);
+ this.additionalInterceptorClasses.add(clazz);
+ }
+
+ public void addCustomDecoratorClass(Class<?> clazz)
+ {
+ Asserts.nullCheckForClass(clazz);
+ this.additionalDecoratorClasses.add(clazz);
+ }
+
+ public boolean containsCustomInterceptorClass(Class<?> clazz)
+ {
+ Asserts.nullCheckForClass(clazz);
+ return this.additionalInterceptorClasses.contains(clazz);
+ }
+
+ public boolean containsCustomDecoratorClass(Class<?> clazz)
+ {
+ Asserts.nullCheckForClass(clazz);
+ return this.additionalDecoratorClasses.contains(clazz);
+ }
+
/**
* {@inheritDoc}
*/
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java Mon Mar 15 20:54:43 2010
@@ -19,6 +19,7 @@ import java.util.concurrent.CopyOnWriteA
import javax.decorator.Decorator;
import org.apache.webbeans.config.WebBeansFinder;
+import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.Asserts;
@@ -45,11 +46,12 @@ public class DecoratorsManager
{
if(!decoratorClazz.isAnnotationPresent(Decorator.class))
{
- throw new WebBeansConfigurationException("Given class : " + decoratorClazz + " is not a decorator class");
+ //Maybe custom
+ BeanManagerImpl.getManager().addCustomDecoratorClass(decoratorClazz);
}
enabledDecorators.add(decoratorClazz);
- }
+ }
}
public int compare(Class<?> src, Class<?> target)
@@ -79,5 +81,17 @@ public class DecoratorsManager
return enabledDecorators.contains(decoratorClazz);
}
+
+ public void validateDecoratorClasses()
+ {
+ for(Class<?> decoratorClazz : enabledDecorators)
+ {
+ //Validate decorator classes
+ if(!decoratorClazz.isAnnotationPresent(Decorator.class) && !BeanManagerImpl.getManager().containsCustomDecoratorClass(decoratorClazz))
+ {
+ throw new WebBeansConfigurationException("Given class : " + decoratorClazz + " is not a decorator class");
+ }
+ }
+ }
}
\ No newline at end of file
Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java?rev=923435&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java Mon Mar 15 20:54:43 2010
@@ -0,0 +1,40 @@
+/*
+ * 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.decorator;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Decorator;
+
+import org.apache.webbeans.component.AbstractOwbBean;
+
+public interface OwbDecorator<T> extends Decorator<T>
+{
+ public boolean isDecoratorMatch(Set<Type> apiTypes, Set<Annotation> annotations);
+
+ public void setDelegate(Object instance, Object delegate);
+
+ public void setInjections(Object proxy, CreationalContext<?> cretionalContext);
+
+ public AbstractOwbBean<T> getDelegateComponent();
+
+}
Propchange: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java Mon Mar 15 20:54:43 2010
@@ -18,6 +18,7 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.HashSet;
@@ -55,7 +56,7 @@ import org.apache.webbeans.util.ClassUti
*
* @param <T> decorator type info
*/
-public class WebBeansDecorator<T> extends AbstractInjectionTargetBean<T> implements Decorator<T>
+public class WebBeansDecorator<T> extends AbstractInjectionTargetBean<T> implements OwbDecorator<T>
{
private static WebBeansLogger logger = WebBeansLogger.getLogger(WebBeansDecorator.class);
@@ -76,6 +77,22 @@ public class WebBeansDecorator<T> extend
/** Wrapped bean*/
private AbstractInjectionTargetBean<T> wrappedBean;
+ /**Custom Decorator*/
+ private Decorator<T> customDecorator = null;
+
+ /**
+ * Creates a new decorator bean instance with the given wrapped bean.
+ * @param delegateComponent delegate bean instance
+ */
+ public WebBeansDecorator(AbstractInjectionTargetBean<T> wrappedBean, Decorator<T> customDecorator)
+ {
+ super(WebBeansType.DECORATOR,wrappedBean.getReturnType());
+ this.wrappedBean = wrappedBean;
+ this.customDecorator = customDecorator;
+ initDelegate();
+ }
+
+
/**
* Creates a new decorator bean instance with the given wrapped bean.
* @param delegateComponent delegate bean instance
@@ -89,7 +106,7 @@ public class WebBeansDecorator<T> extend
init();
}
-
+
protected void init()
{
ClassUtil.setInterfaceTypeHierarchy(this.decoratedTypes, this.clazz);
@@ -155,9 +172,17 @@ public class WebBeansDecorator<T> extend
private void initDelegateInternal(InjectionPoint ip)
{
- this.delegateType = ip.getType();
- this.delegateBindings = ip.getQualifiers();
-
+ if(this.customDecorator != null)
+ {
+ this.delegateType = this.customDecorator.getDelegateType();
+ this.delegateBindings = this.customDecorator.getDelegateQualifiers();
+ }
+ else
+ {
+ this.delegateType = ip.getType();
+ this.delegateBindings = ip.getQualifiers();
+ }
+
if(ip.getMember() instanceof Field)
{
this.delegateField = (Field)ip.getMember();
@@ -180,7 +205,7 @@ public class WebBeansDecorator<T> extend
Type fieldType = this.delegateField.getGenericType();
- for (Type decType : this.decoratedTypes)
+ for (Type decType : getDecoratedTypes())
{
if (!(ClassUtil.getClass(decType)).isAssignableFrom(ClassUtil.getClass(fieldType)))
{
@@ -225,7 +250,7 @@ public class WebBeansDecorator<T> extend
boolean ok = false;
for (Type apiType : apiTypes)
{
- if (ClassUtil.isAssignable(apiType, this.delegateType))
+ if (ClassUtil.isAssignable(apiType, getDelegateType()))
{
ok = true;
break;
@@ -248,7 +273,7 @@ public class WebBeansDecorator<T> extend
return false;
}
- for (Annotation bindingType : delegateBindings)
+ for (Annotation bindingType : getDelegateQualifiers())
{
if (!bindingMatchesAnnotations(bindingType, annotations))
{
@@ -262,12 +287,22 @@ public class WebBeansDecorator<T> extend
@Override
public Set<Annotation> getDelegateQualifiers()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getDelegateQualifiers();
+ }
+
return delegateBindings;
}
@Override
public Type getDelegateType()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getDelegateType();
+ }
+
return delegateType;
}
@@ -300,6 +335,11 @@ public class WebBeansDecorator<T> extend
@SuppressWarnings("unchecked")
protected T createInstance(CreationalContext<T> creationalContext)
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.create(creationalContext);
+ }
+
Context context = BeanManagerImpl.getManager().getContext(getScope());
Object actualInstance = context.get((Bean<Object>)this.wrappedBean, (CreationalContext<Object>)creationalContext);
T proxy = (T)JavassistProxyFactory.createDependentScopedBeanProxy(this.wrappedBean, actualInstance, creationalContext);
@@ -309,41 +349,66 @@ public class WebBeansDecorator<T> extend
public void setInjections(Object proxy, CreationalContext<?> cretionalContext)
{
- // Set injected fields
- ManagedBean<T> delegate = (ManagedBean<T>) this.wrappedBean;
-
- Set<Field> injectedFields = delegate.getInjectedFromSuperFields();
- for (Field injectedField : injectedFields)
+ if(this.customDecorator != null)
{
- boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
-
- if (!isDecorates)
+ Set<InjectionPoint> injections = this.customDecorator.getInjectionPoints();
+ if(injections != null)
{
- injectField(injectedField, proxy, cretionalContext);
+ for(InjectionPoint ip : injections)
+ {
+ if(!ip.isDelegate())
+ {
+ Member member = ip.getMember();
+ if(member instanceof Field)
+ {
+ injectField((Field)member , proxy, cretionalContext);
+ }
+ if(member instanceof Method)
+ {
+ injectMethod((Method)member , proxy, cretionalContext);
+ }
+ }
+ }
}
}
-
- Set<Method> injectedMethods = delegate.getInjectedFromSuperMethods();
- for (Method injectedMethod : injectedMethods)
+ else
{
- injectMethod(injectedMethod, proxy, cretionalContext);
- }
+ // Set injected fields
+ ManagedBean<T> delegate = (ManagedBean<T>) this.wrappedBean;
- injectedFields = delegate.getInjectedFields();
- for (Field injectedField : injectedFields)
- {
- boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
+ Set<Field> injectedFields = delegate.getInjectedFromSuperFields();
+ for (Field injectedField : injectedFields)
+ {
+ boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
+
+ if (!isDecorates)
+ {
+ injectField(injectedField, proxy, cretionalContext);
+ }
+ }
+
+ Set<Method> injectedMethods = delegate.getInjectedFromSuperMethods();
+ for (Method injectedMethod : injectedMethods)
+ {
+ injectMethod(injectedMethod, proxy, cretionalContext);
+ }
- if (!isDecorates)
+ injectedFields = delegate.getInjectedFields();
+ for (Field injectedField : injectedFields)
{
- injectField(injectedField, proxy, cretionalContext);
+ boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
+
+ if (!isDecorates)
+ {
+ injectField(injectedField, proxy, cretionalContext);
+ }
}
- }
-
- injectedMethods = delegate.getInjectedMethods();
- for (Method injectedMethod : injectedMethods)
- {
- injectMethod(injectedMethod, proxy, cretionalContext);
+
+ injectedMethods = delegate.getInjectedMethods();
+ for (Method injectedMethod : injectedMethods)
+ {
+ injectMethod(injectedMethod, proxy, cretionalContext);
+ }
}
}
@@ -363,36 +428,61 @@ public class WebBeansDecorator<T> extend
@Override
public Set<Annotation> getQualifiers()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getQualifiers();
+ }
+
return wrappedBean.getQualifiers();
}
@Override
public String getName()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getName();
+ }
+
return wrappedBean.getName();
}
@Override
public Class<? extends Annotation> getScope()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getScope();
+ }
+
return wrappedBean.getScope();
}
public Set<Type> getTypes()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getTypes();
+ }
+
return wrappedBean.getTypes();
}
@Override
public boolean isNullable()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.isNullable();
+ }
+
return wrappedBean.isNullable();
}
@Override
public boolean isSerializable()
- {
+ {
return wrappedBean.isSerializable();
}
@@ -406,6 +496,11 @@ public class WebBeansDecorator<T> extend
public Set<InjectionPoint> getInjectionPoints()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getInjectionPoints();
+ }
+
return wrappedBean.getInjectionPoints();
}
@@ -414,66 +509,55 @@ public class WebBeansDecorator<T> extend
*/
public Class<?> getClazz()
{
- return clazz;
- }
-
- /*
- * (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode()
- {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((clazz == null) ? 0 : clazz.hashCode());
- return result;
- }
-
- /*
- * (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- final WebBeansDecorator<?> other = (WebBeansDecorator<?>) obj;
- if (clazz == null)
+ if(this.customDecorator != null)
{
- if (other.clazz != null)
- return false;
+ return this.customDecorator.getBeanClass();
}
- else if (!clazz.equals(other.clazz))
- return false;
- return true;
+
+ return clazz;
}
@Override
public Class<?> getBeanClass()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getBeanClass();
+ }
+
return this.wrappedBean.getBeanClass();
}
@Override
public Set<Class<? extends Annotation>> getStereotypes()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getStereotypes();
+ }
+
return this.wrappedBean.getStereotypes();
}
@Override
- public Set<Type> getDecoratedTypes() {
+ public Set<Type> getDecoratedTypes()
+ {
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.getDecoratedTypes();
+ }
+
return this.decoratedTypes;
}
@Override
public boolean isAlternative()
{
+ if(this.customDecorator != null)
+ {
+ return this.customDecorator.isAlternative();
+ }
+
return this.wrappedBean.isAlternative();
}
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=923435&r1=923434&r2=923435&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 Mon Mar 15 20:54:43 2010
@@ -16,7 +16,12 @@ package org.apache.webbeans.intercept;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import javax.decorator.Decorator;
+import javax.interceptor.Interceptor;
+
import org.apache.webbeans.config.WebBeansFinder;
+import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.Asserts;
public class InterceptorsManager
@@ -39,7 +44,15 @@ public class InterceptorsManager
Asserts.nullCheckForClass(interceptorClazz, "interceptorClazz can not be null");
if (!enabledInterceptors.contains(interceptorClazz))
+ {
getInstance().enabledInterceptors.add(interceptorClazz);
+
+ if(!interceptorClazz.isAnnotationPresent(Interceptor.class))
+ {
+ //Maybe custom
+ BeanManagerImpl.getManager().addCustomInterceptorClass(interceptorClazz);
+ }
+ }
}
public int compare(Class<?> src, Class<?> target)
@@ -69,4 +82,16 @@ public class InterceptorsManager
return getInstance().enabledInterceptors.contains(interceptorClazz);
}
+
+ public void validateInterceptorClasses()
+ {
+ for(Class<?> decoratorClazz : enabledInterceptors)
+ {
+ //Validate decorator classes
+ if(!decoratorClazz.isAnnotationPresent(Interceptor.class) && !BeanManagerImpl.getManager().containsCustomInterceptorClass(decoratorClazz))
+ {
+ throw new WebBeansConfigurationException("Given class : " + decoratorClazz + " is not a interceptor class");
+ }
+ }
+ }
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java Mon Mar 15 20:54:43 2010
@@ -27,6 +27,7 @@ import org.apache.webbeans.component.Man
import org.apache.webbeans.component.WebBeansType;
import org.apache.webbeans.component.creation.ManagedBeanCreatorImpl;
import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.decorator.WebBeansDecorator;
import org.apache.webbeans.event.NotificationManager;
import org.apache.webbeans.intercept.custom.CustomInterceptor;
import org.apache.webbeans.portable.AnnotatedElementFactory;
@@ -77,7 +78,12 @@ public class AfterBeanDiscoveryImpl impl
else if(bean instanceof Decorator)
{
- this.beanManager.addDecorator((Decorator<?>)bean);
+ //Required for custom decorators
+ ManagedBean managedBean = new ManagedBean(bean.getBeanClass(),WebBeansType.MANAGED);
+ ManagedBeanCreatorImpl managedBeanCreator = new ManagedBeanCreatorImpl(managedBean);
+ managedBean = WebBeansUtil.defineManagedBean(managedBeanCreator, annotatedType);
+
+ this.beanManager.addDecorator(new WebBeansDecorator(managedBean, (Decorator)bean));
}
else
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java Mon Mar 15 20:54:43 2010
@@ -801,6 +801,11 @@ public final class WebBeansAnnotatedType
{
return true;
}
+ else if(DecoratorsManager.getInstance().isDecoratorEnabled(annotatedType.getJavaClass()))
+ {
+ return true;
+ }
+
return false;
}
Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
component/ component/creation/ config/ container/ decorator/ intercept/
portable/events/discovery/ util/
Posted by Eric Covener <co...@gmail.com>.
On Tue, Mar 23, 2010 at 9:26 AM, Gurkan Erdogdu <gu...@yahoo.com> wrote:
> This seems to be an old code. Did you checkout latest code from trunk?
yes, but I will scrap my sandbox and re-scrap my ~/.m2 -- thanks for looking.
--
Eric Covener
covener@gmail.com
Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/
Posted by Gurkan Erdogdu <gu...@yahoo.com>.
This seems to be an old code. Did you checkout latest code from trunk?
________________________________
From: Eric Covener <co...@gmail.com>
To: dev@openwebbeans.apache.org
Sent: Tue, March 23, 2010 2:53:44 PM
Subject: Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/
> instance of class
> org.apache.webbeans.servlet.WebBeansConfigurationListener
> Throwable occurred: java.lang.NullPointerException
> at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints( .java:259)
^^^^^^^^^^^^
> at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)
^^^^^^^^^^^^^^^^^
> at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
> at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
> at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
> at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
> at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
> at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
> at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
> at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)
It finally occurred to me how/why this backtrace doesn't make any
sense. Any idea on how I can be getting from
AbstractInjectionTargetBean to AbstractBeanCreator (instead of
AbstractOWBBean which just access a priave field) in my TCK env?
--
Eric Covener
covener@gmail.com
___________________________________________________________________
Yahoo! Türkiye açıldı! http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!
Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
component/ component/creation/ config/ container/ decorator/ intercept/
portable/events/discovery/ util/
Posted by Eric Covener <co...@gmail.com>.
> instance of class
> org.apache.webbeans.servlet.WebBeansConfigurationListener
> Throwable occurred: java.lang.NullPointerException
> at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints( .java:259)
^^^^^^^^^^^^
> at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)
^^^^^^^^^^^^^^^^^
> at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
> at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
> at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
> at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
> at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
> at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
> at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
> at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)
It finally occurred to me how/why this backtrace doesn't make any
sense. Any idea on how I can be getting from
AbstractInjectionTargetBean to AbstractBeanCreator (instead of
AbstractOWBBean which just access a priave field) in my TCK env?
--
Eric Covener
covener@gmail.com
Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/
Posted by Gurkan Erdogdu <gu...@yahoo.com>.
Main motivation was that:
Bean creators are used for creating the beans. And if InjectionTargets/Producers are set by the observers, AbstractInjectionTargetBean or AbstractProducerBean uses final objects to produce bean artifacts.
But there is an error/mistake in current code base in regard to 3Party overriden. If observer(ProcessInjectionTarget) wraps the original InjectionTarget, then StackOverFlow occurs. Becuase in current code base
AbstractInjectionTargetBean # getInjectionPoints --> AbstractBeanCreator # getInjectionPoints --> producer # getInjectionPoints
And if "producer" wraps original injection target like this,
ProducerInjectionTarget implement InjectionTarget
{
InjectionTarget wrapped ....
public Set getInjectionPoints()
{
wrapped.getInjectionPoints();
}
}
Then producer # getInjectionPoints agains calls AbstractInjectionTargetBean # getInjectionPoints to infinitely. Therefore I have commented out below producer.
I will look for further errors.
Thanks;
--Gurkan
________________________________
From: Eric Covener <co...@gmail.com>
To: dev@openwebbeans.apache.org
Sent: Sun, March 21, 2010 1:43:51 AM
Subject: Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/
On Mon, Mar 15, 2010 at 4:54 PM, <ge...@apache.org> wrote:
> Author: gerdogdu
> Date: Mon Mar 15 20:54:43 2010
> New Revision: 923435
> Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=923435&r1=923434&r2=923435&view=diff
> ==============================================================================
> --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
> +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Mon Mar 15 20:54:43 2010
> @@ -183,6 +183,7 @@ public abstract class AbstractInjectedTa
> {
> this.injectionTarget = injectionTarget;
> this.injectionTargetSet = true;
> + //super.setProducer(injectionTarget);
> }
I was looking at something in this neighborhood, Is
AbstractBeanCreator.producer() really just for third-party provided
impl registered via the event? Why does e.g.
AbstractBeanCreator.getInjectionPoint() and getProducer() seem to
expect this to always be available?
In similar vein, AbstractInjectedTargetBeanCreator.setInjectedTarget()
is only called when some third-party observer has reset it?
My TCK env still gets ~240 errors so I maybe missing something in the
setup, but I see this backtrace during deployment:
SEVERE: Exception sending context initialized event to listener
instance of class
org.apache.webbeans.servlet.WebBeansConfigurationListener
Throwable occurred: java.lang.NullPointerException
at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints(AbstractBeanCreator.java:259)
at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)
at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)
I am arbitrarily
onorg.jboss.jsr299.tck.tests.extensions.producer.ProducerTest.testDisposeDoesNothing
--
Eric Covener
covener@gmail.com
___________________________________________________________________
Yahoo! Türkiye açıldı! http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!
Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
component/ component/creation/ config/ container/ decorator/ intercept/
portable/events/discovery/ util/
Posted by Eric Covener <co...@gmail.com>.
On Mon, Mar 15, 2010 at 4:54 PM, <ge...@apache.org> wrote:
> Author: gerdogdu
> Date: Mon Mar 15 20:54:43 2010
> New Revision: 923435
> Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=923435&r1=923434&r2=923435&view=diff
> ==============================================================================
> --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
> +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Mon Mar 15 20:54:43 2010
> @@ -183,6 +183,7 @@ public abstract class AbstractInjectedTa
> {
> this.injectionTarget = injectionTarget;
> this.injectionTargetSet = true;
> + //super.setProducer(injectionTarget);
> }
I was looking at something in this neighborhood, Is
AbstractBeanCreator.producer() really just for third-party provided
impl registered via the event? Why does e.g.
AbstractBeanCreator.getInjectionPoint() and getProducer() seem to
expect this to always be available?
In similar vein, AbstractInjectedTargetBeanCreator.setInjectedTarget()
is only called when some third-party observer has reset it?
My TCK env still gets ~240 errors so I maybe missing something in the
setup, but I see this backtrace during deployment:
SEVERE: Exception sending context initialized event to listener
instance of class
org.apache.webbeans.servlet.WebBeansConfigurationListener
Throwable occurred: java.lang.NullPointerException
at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints(AbstractBeanCreator.java:259)
at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)
at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)
I am arbitrarily
onorg.jboss.jsr299.tck.tests.extensions.producer.ProducerTest.testDisposeDoesNothing
--
Eric Covener
covener@gmail.com