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/02/24 01:10:34 UTC
svn commit: r915604 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/component/
main/java/org/apache/webbeans/config/
main/java/org/apache/webbeans/container/
main/java/org/apache/webbeans/decorator/ main/java/org/apache/webbea...
Author: gerdogdu
Date: Wed Feb 24 00:10:33 2010
New Revision: 915604
URL: http://svn.apache.org/viewvc?rev=915604&view=rev
Log:
Update for TCK
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.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/DecoratorUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/events/extensions/AddBeanExtension.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/scopeextension/ExternalTestScopedBean.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/common/Person.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java Wed Feb 24 00:10:33 2010
@@ -33,6 +33,8 @@
import org.apache.webbeans.config.inheritance.BeanInheritedMetaData;
import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
import org.apache.webbeans.context.creational.CreationalContextImpl;
+import org.apache.webbeans.decorator.WebBeansDecorator;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.inject.InjectableField;
import org.apache.webbeans.inject.InjectableMethods;
@@ -40,6 +42,7 @@
import org.apache.webbeans.intercept.InterceptorHandler;
import org.apache.webbeans.intercept.InterceptorType;
import org.apache.webbeans.intercept.InvocationContextImpl;
+import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.spi.ResourceInjectionService;
import org.apache.webbeans.spi.ServiceLoader;
@@ -657,6 +660,51 @@
public boolean isFullyInitialize()
{
return this.fullyInitialize;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.webbeans.component.AbstractOwbBean#validatePassivationDependencies()
+ */
+ @Override
+ public void validatePassivationDependencies()
+ {
+ if(isPassivationCapable())
+ {
+ super.validatePassivationDependencies();
+
+ //Check for interceptors and decorators
+ for(Decorator<?> dec : this.decorators)
+ {
+ WebBeansDecorator<?> decorator = (WebBeansDecorator<?>)dec;
+ if(!decorator.isPassivationCapable())
+ {
+ throw new WebBeansConfigurationException("Passivation bean : " + toString() + " decorators must be passivating capable");
+ }
+ else
+ {
+ decorator.validatePassivationDependencies();
+ }
+ }
+
+ for(InterceptorData interceptorData : this.interceptorStack)
+ {
+ if(interceptorData.isDefinedWithWebBeansInterceptor())
+ {
+ WebBeansInterceptor<?> interceptor = (WebBeansInterceptor<?>)interceptorData.getWebBeansInterceptor();
+ if(!interceptor.isPassivationCapable())
+ {
+ throw new WebBeansConfigurationException("Passivation bean : " + toString() + " interceptors must be passivating capable");
+ }
+ else
+ {
+ interceptor.validatePassivationDependencies();
+ }
+ }
+ }
+
+ }
}
+
+
}
\ No newline at end of file
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=915604&r1=915603&r2=915604&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 Wed Feb 24 00:10:33 2010
@@ -33,9 +33,11 @@
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.context.creational.CreationalContextFactory;
import org.apache.webbeans.context.creational.CreationalContextImpl;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.inject.AlternativesManager;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.WebBeansUtil;
/**
* Abstract implementation of the {@link OwbBean} contract.
@@ -587,4 +589,24 @@
return getScope().equals(Dependent.class);
}
+ @Override
+ public void validatePassivationDependencies()
+ {
+ if(isPassivationCapable())
+ {
+ Set<InjectionPoint> injectionPoints = getInjectionPoints();
+ for(InjectionPoint injectionPoint : injectionPoints)
+ {
+ if(!injectionPoint.isTransient())
+ {
+ if(!WebBeansUtil.isPassivationCapableDependency(injectionPoint))
+ {
+ throw new WebBeansConfigurationException("Passivation capable beans must satisfy passivation capable dependencies. " +
+ "Bean : " + toString() + " does not satisfy.");
+ }
+ }
+ }
+ }
+ }
+
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java Wed Feb 24 00:10:33 2010
@@ -20,6 +20,8 @@
import javax.enterprise.inject.spi.*;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
+
/**
* OWB specific extension of the {@link Bean} interface.
* It is used internally. Do not use it. Instead use {@link AbstractOwbBean}
@@ -179,4 +181,10 @@
* @return <code>true</code> if this is a dependent bean
*/
public boolean isDependent();
+
+ /**
+ * If bean is passivation capable, it validate all of its dependencies.
+ * @throws WebBeansConfigurationException if not satisfy passivation dependencies
+ */
+ public void validatePassivationDependencies();
}
\ No newline at end of file
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=915604&r1=915603&r2=915604&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 Wed Feb 24 00:10:33 2010
@@ -37,6 +37,7 @@
import org.apache.webbeans.component.InjectionTargetBean;
import org.apache.webbeans.component.ManagedBean;
import org.apache.webbeans.component.NewBean;
+import org.apache.webbeans.component.OwbBean;
import org.apache.webbeans.component.WebBeansType;
import org.apache.webbeans.component.creation.ManagedBeanCreatorImpl;
import org.apache.webbeans.component.creation.BeanCreator.MetaDataProvider;
@@ -297,17 +298,23 @@
{
for (Bean<?> bean : beans)
{
- checkPassivationScope(bean);
-
//Configure decorator and interceptor stack for ManagedBeans
if((bean instanceof AbstractInjectionTargetBean) &&
- !(bean instanceof NewBean) &&
- !(bean instanceof EnterpriseBeanMarker))
+ !(bean instanceof NewBean))
{
- DefinitionUtil.defineDecoratorStack((AbstractInjectionTargetBean<Object>)bean);
- DefinitionUtil.defineBeanInterceptorStack((AbstractInjectionTargetBean<Object>)bean);
+ if(!(bean instanceof Decorator) && !(bean instanceof javax.enterprise.inject.spi.Interceptor))
+ {
+ DefinitionUtil.defineDecoratorStack((AbstractInjectionTargetBean<Object>)bean);
+ }
+
+ if(!(bean instanceof javax.enterprise.inject.spi.Interceptor))
+ {
+ DefinitionUtil.defineBeanInterceptorStack((AbstractInjectionTargetBean<Object>)bean);
+ }
}
+ checkPassivationScope(bean);
+
//Bean injection points
Set<InjectionPoint> injectionPoints = bean.getInjectionPoints();
@@ -510,17 +517,7 @@
*/
protected void checkPassivationScope(Bean<?> beanObj)
{
- if (beanObj instanceof ManagedBean)
- {
- ManagedBean<?> bean = (ManagedBean<?>) beanObj;
- if(BeanManagerImpl.getManager().isPassivatingScope(bean.getScope()))
- {
- if(!bean.isPassivationCapable())
- {
- throw new WebBeansConfigurationException("Bean : " + bean.toString()+ " must be passivation capable becuase it defines passivation capable scope");
- }
- }
- }
+ ((OwbBean<?>)beanObj).validatePassivationDependencies();
}
/**
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Wed Feb 24 00:10:33 2010
@@ -841,6 +841,15 @@
{
for (Field field : fields)
{
+ //Check for public fields
+ if(ClassUtil.isPublic(field.getModifiers()) && !ClassUtil.isStatic(field.getModifiers()))
+ {
+ if(!component.getScope().equals(Dependent.class))
+ {
+ throw new WebBeansConfigurationException("If bean has a public field, bean scope must be defined as @Dependent");
+ }
+ }
+
if(!useOwbSpecificInjection)
{
if(!field.isAnnotationPresent(Inject.class))
@@ -849,14 +858,6 @@
}
}
- if(ClassUtil.isPublic(field.getModifiers()))
- {
- if(!component.getScope().equals(Dependent.class))
- {
- throw new WebBeansConfigurationException("If bean has a public modifier injection point, bean scope must be defined as @Dependent");
- }
- }
-
Annotation[] anns = field.getDeclaredAnnotations();
// Injected fields can not be @Produces
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=915604&r1=915603&r2=915604&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 Wed Feb 24 00:10:33 2010
@@ -48,6 +48,7 @@
import javax.enterprise.inject.spi.*;
import javax.enterprise.util.TypeLiteral;
import javax.inject.Scope;
+import javax.interceptor.InterceptorBinding;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.Referenceable;
@@ -691,12 +692,15 @@
@Override
public Set<Annotation> getInterceptorBindingDefinition(Class<? extends Annotation> binding)
{
- Annotation[] annotations = AnnotationUtil.getInterceptorBindingMetaAnnotations(binding.getDeclaredAnnotations());
+ Annotation[] annotations = binding.getDeclaredAnnotations();
Set<Annotation> set = new HashSet<Annotation>();
- for(Annotation ann : annotations)
+ if(binding.isAnnotationPresent(InterceptorBinding.class))
{
- set.add(ann);
+ for(Annotation ann : annotations)
+ {
+ set.add(ann);
+ }
}
return set;
@@ -816,12 +820,15 @@
@Override
public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation> stereotype)
{
- Annotation[] annotations = AnnotationUtil.getStereotypeMetaAnnotations(stereotype.getDeclaredAnnotations());
+ Annotation[] annotations = stereotype.getDeclaredAnnotations();
Set<Annotation> set = new HashSet<Annotation>();
- for(Annotation ann : annotations)
+ if(stereotype.isAnnotationPresent(Stereotype.class))
{
- set.add(ann);
+ for(Annotation ann : annotations)
+ {
+ set.add(ann);
+ }
}
return set;
@@ -842,10 +849,19 @@
@Override
public boolean isScope(Class<? extends Annotation> annotationType)
{
- if(AnnotationUtil.hasAnnotation(annotationType.getDeclaredAnnotations(), Scope.class))
+ if(AnnotationUtil.hasAnnotation(annotationType.getDeclaredAnnotations(), Scope.class) ||
+ AnnotationUtil.hasAnnotation(annotationType.getDeclaredAnnotations(), NormalScope.class))
{
return true;
}
+
+ for(ExternalScope ext : this.additionalScopes)
+ {
+ if(ext.getScope().equals(annotationType))
+ {
+ return true;
+ }
+ }
return false;
}
@@ -853,6 +869,14 @@
@Override
public boolean isNormalScope(Class<? extends Annotation> annotationType)
{
+ for (ExternalScope extScope : additionalScopes)
+ {
+ if (extScope.getScope().equals(annotationType))
+ {
+ return extScope.isNormal();
+ }
+ }
+
if(AnnotationUtil.hasAnnotation(annotationType.getDeclaredAnnotations(), NormalScope.class))
{
return true;
@@ -933,8 +957,7 @@
// check for InjectionPoint injection
if (rawType.equals(InjectionPoint.class))
{
- Annotated annotated = injectionPoint.getAnnotated();
- if (annotated.getAnnotations().size() == 1 && annotated.isAnnotationPresent(Default.class))
+ if (AnnotationUtil.hasAnnotation(AnnotationUtil.getAnnotationsFromSet(injectionPoint.getQualifiers()), Default.class))
{
if (!bean.getScope().equals(Dependent.class))
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorUtil.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorUtil.java Wed Feb 24 00:10:33 2010
@@ -14,7 +14,6 @@
package org.apache.webbeans.decorator;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.HashSet;
@@ -22,7 +21,6 @@
import java.util.List;
import java.util.Set;
-import javax.decorator.Delegate;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.Decorator;
@@ -84,70 +82,8 @@
decoratorSet.remove(java.io.Serializable.class);
}
- //No-Decorates found, check from super class
- if(!checkInternalDecoratorConditions(decoratorClazz, decoratorSet))
- {
- boolean found = checkInternalDecoratorConditionsRecursivley(decoratorClazz,decoratorSet);
-
- if(!found)
- {
- throw new WebBeansConfigurationException(logger.getTokenString(OWBLogConst.EXCEPT_0011) + decoratorClazz.getName());
- }
- }
- }
-
- private static boolean checkInternalDecoratorConditionsRecursivley(Class<?> decoratorClazz,Set<Type> decoratorSet)
- {
- Class<?> superClazz = decoratorClazz.getSuperclass();
- if(!superClazz.equals(Object.class))
- {
- boolean found = checkInternalDecoratorConditions(superClazz, decoratorSet);
- if(!found)
- {
- return checkInternalDecoratorConditionsRecursivley(superClazz, decoratorSet);
- }
- else
- {
- return true;
- }
- }
-
- return false;
- }
-
- private static boolean checkInternalDecoratorConditions(Class<?> decoratorClazz,Set<Type> decoratorSet)
- {
- Field[] fields = decoratorClazz.getDeclaredFields();
- boolean found = false;
- for (Field field : fields)
- {
- if (AnnotationUtil.hasAnnotation(field.getDeclaredAnnotations(), Delegate.class))
- {
- if (found)
- {
- throw new WebBeansConfigurationException("Decorator class : " + decoratorClazz.getName() + " can only contain one delegate attribute but find more than one!.");
- }
- else
- {
- Class<?> fieldType = field.getType();
-
- for (Type decType : decoratorSet)
- {
- if (!(ClassUtil.getClass(decType)).isAssignableFrom(fieldType))
- {
- throw new WebBeansConfigurationException("Decorator class : " + decoratorClazz.getName() + " delegate attribute must implement all of the decorator decorated types.");
- }
- }
-
- found = true;
- }
- }
- }
-
- return found;
-
}
-
+
public static void checkManagedBeanDecoratorConditions(ManagedBean<?> component)
{
Asserts.assertNotNull("component", "component parameter can not be null");
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=915604&r1=915603&r2=915604&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 Wed Feb 24 00:10:33 2010
@@ -147,7 +147,12 @@
}
-
+ @Override
+ public boolean isPassivationCapable()
+ {
+ return this.wrappedBean.isPassivationCapable();
+ }
+
private void initDelegateInternal(InjectionPoint ip)
{
this.delegateType = ip.getType();
@@ -165,7 +170,7 @@
throw new WebBeansConfigurationException("Delegate injection field is not found for decorator : " + toString());
}
- if(fields.length > 0)
+ if(fields.length > 1)
{
throw new WebBeansConfigurationException("More than one delegate injection field is found for decorator : " + toString());
}
@@ -471,4 +476,11 @@
{
return this.wrappedBean.isAlternative();
}
+
+ @Override
+ public void validatePassivationDependencies()
+ {
+ this.wrappedBean.validatePassivationDependencies();
+ }
+
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java Wed Feb 24 00:10:33 2010
@@ -13,6 +13,7 @@
*/
package org.apache.webbeans.inject;
+import java.io.Serializable;
import java.lang.reflect.Member;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -20,10 +21,12 @@
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Event;
+import javax.enterprise.inject.IllegalProductException;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Provider;
+import org.apache.webbeans.component.AbstractProducerBean;
import org.apache.webbeans.component.EventBean;
import org.apache.webbeans.component.InjectionPointBean;
import org.apache.webbeans.component.InstanceBean;
@@ -91,13 +94,33 @@
}
//Injection for dependent instance InjectionPoint fields
+ boolean dependentProducer = false;
if(WebBeansUtil.isDependent(injectedBean))
{
InjectionPointBean.local.set(injectionPoint);
+ if(!injectionPoint.isTransient())
+ {
+ if(injectedBean instanceof AbstractProducerBean)
+ {
+ if(this.injectionOwnerBean.isPassivationCapable())
+ {
+ dependentProducer = true;
+ }
+ }
+ }
}
injected = BeanManagerImpl.getManager().getInjectableReference(injectionPoint, this.injectionOwnerCreationalContext);
-
+
+ if(dependentProducer)
+ {
+ if(!Serializable.class.isAssignableFrom(injected.getClass()))
+ {
+ throw new IllegalProductException("If a producer method or field of scope @Dependent returns an serializable object for injection " +
+ "into an injection point "+ injectionPoint +" that requires a passivation capable dependency");
+ }
+ }
+
return injected;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Wed Feb 24 00:10:33 2010
@@ -13,6 +13,8 @@
*/
package org.apache.webbeans.inject.instance;
+import java.io.IOException;
+import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.HashSet;
@@ -34,7 +36,7 @@
*
* @param <T> specific instance type
*/
-class InstanceImpl<T> implements Instance<T>
+class InstanceImpl<T> implements Instance<T>, Serializable
{
/** Injected class type */
private Type injectionClazz;
@@ -235,4 +237,28 @@
return builder.toString();
}
+
+ private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException
+ {
+ this.injectionClazz = (Type)in.readObject();
+ int q = in.readByte();
+ if(q != 0)
+ {
+ this.qualifierAnnotations = new HashSet<Annotation>();
+ for(int i =0; i< q; i++)
+ {
+ this.qualifierAnnotations.add((Annotation)in.readObject());
+ }
+ }
+ }
+
+ private void writeObject(java.io.ObjectOutputStream out) throws IOException
+ {
+ out.writeObject(this.injectionClazz);
+ out.writeByte(this.qualifierAnnotations.size());
+ for(Annotation ann : this.qualifierAnnotations)
+ {
+ out.writeObject(ann);
+ }
+ }
}
\ No newline at end of file
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=915604&r1=915603&r2=915604&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 Wed Feb 24 00:10:33 2010
@@ -27,6 +27,7 @@
import javax.annotation.PreDestroy;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.Interceptor;
import javax.interceptor.AroundInvoke;
@@ -34,6 +35,7 @@
import org.apache.webbeans.component.AbstractInjectionTargetBean;
import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.util.AnnotationUtil;
@@ -69,14 +71,32 @@
logger.debug("Configuring interceptor class : " + delegate.getReturnType());
WebBeansInterceptor<T> interceptor = new WebBeansInterceptor<T>(delegate);
+ List<Annotation> anns = Arrays.asList(interceptorBindingTypes);
+
for (Annotation ann : interceptorBindingTypes)
{
+ checkAnns(anns, ann, delegate);
interceptor.addInterceptorBinding(ann.annotationType(), ann);
}
+
BeanManagerImpl.getManager().addInterceptor(interceptor);
}
+
+ private static void checkAnns(List<Annotation> list, Annotation ann, Bean<?> bean)
+ {
+ for(Annotation old : list)
+ {
+ if(old.annotationType().equals(ann.annotationType()))
+ {
+ if(!AnnotationUtil.hasAnnotationMember(ann.annotationType(), ann, old))
+ {
+ throw new WebBeansConfigurationException("Interceptor Binding types must be equal for interceptor : " + bean);
+ }
+ }
+ }
+ }
/**
* Configures the given class for applicable interceptors.
@@ -174,9 +194,16 @@
}
}
}
-
+
anns = new Annotation[bindingTypeSet.size()];
anns = bindingTypeSet.toArray(anns);
+
+ //Spec Section 9.5.2
+ List<Annotation> beanAnnots = Arrays.asList(anns);
+ for(Annotation checkAnn : anns)
+ {
+ checkAnns(beanAnnots, checkAnn, component);
+ }
if (anns.length > 0)
{
@@ -237,6 +264,21 @@
{
// All methods, not just those declared
Method[] methods = clazz.getMethods();
+ Set<Method> set = new HashSet<Method>();
+ for(Method m : methods)
+ {
+ set.add(m);
+ }
+
+ //GE : I added for private, protected etc. methods.
+ //Not just for public methods.
+ methods = clazz.getDeclaredMethods();
+ for(Method m : methods)
+ {
+ set.add(m);
+ }
+
+ methods = set.toArray(new Method[0]);
for (Method method : methods)
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java Wed Feb 24 00:10:33 2010
@@ -460,6 +460,14 @@
@Override
public boolean isPassivationCapable()
{
- return true;
+ return this.delegateBean.isPassivationCapable();
+ }
+
+ @Override
+ public void validatePassivationDependencies()
+ {
+ this.delegateBean.validatePassivationDependencies();
}
+
+
}
\ No newline at end of file
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Wed Feb 24 00:10:33 2010
@@ -115,6 +115,7 @@
import org.apache.webbeans.component.NewBean;
import org.apache.webbeans.component.ProducerFieldBean;
import org.apache.webbeans.component.ProducerMethodBean;
+import org.apache.webbeans.component.ResourceBean;
import org.apache.webbeans.component.WebBeansType;
import org.apache.webbeans.component.creation.ManagedBeanCreatorImpl;
import org.apache.webbeans.config.DefinitionUtil;
@@ -123,6 +124,7 @@
import org.apache.webbeans.config.OWBLogConst;
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.container.ExternalScope;
+import org.apache.webbeans.container.InjectionResolver;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.conversation.ConversationImpl;
import org.apache.webbeans.decorator.DecoratorUtil;
@@ -570,6 +572,7 @@
if (ManagedBeanConfigurator.isManagedBean(clazz))
{
comp = new NewBean<T>(clazz, WebBeansType.MANAGED);
+ comp.setImplScopeType(new DependentScopeLiteral());
comp.setConstructor(WebBeansUtil.defineConstructor(clazz));
DefinitionUtil.addConstructorInjectionPointMetaData(comp, comp.getConstructor());
@@ -579,13 +582,13 @@
else if (EJBWebBeansConfigurator.isSessionBean(clazz))
{
comp = new NewBean<T>(clazz, WebBeansType.ENTERPRISE);
+ comp.setImplScopeType(new DependentScopeLiteral());
}
else
{
throw new WebBeansConfigurationException("@New annotation on type : " + clazz.getName() + " must defined as a simple or an enterprise web bean");
}
- comp.setImplScopeType(new DependentScopeLiteral());
comp.addQualifier(new NewLiteral(clazz));
comp.setName(null);
comp.addApiType(clazz);
@@ -2070,20 +2073,15 @@
}
- public static void checkSerializableScopeType(Class<?> scopeType, boolean isSerializable, String errorMessage)
+ public static void checkSerializableScopeType(Class<? extends Annotation> scopeType, boolean isSerializable, String errorMessage)
{
- // Scope type check
- NormalScope scope = scopeType.getAnnotation(NormalScope.class);
- if(scope != null)
+ if (BeanManagerImpl.getManager().isPassivatingScope(scopeType))
{
- if (scope.passivating())
+ if (!isSerializable)
{
- if (!isSerializable)
- {
- throw new IllegalProductException(errorMessage);
- }
- }
- }
+ throw new IllegalProductException(errorMessage);
+ }
+ }
}
public static boolean isManagedBean(AbstractOwbBean<?> component)
@@ -2757,4 +2755,32 @@
return false;
}
+ public static boolean isPassivationCapableDependency(InjectionPoint injectionPoint)
+ {
+ Bean<?> bean = InjectionResolver.getInstance().getInjectionPointBean(injectionPoint);
+ if((bean instanceof EnterpriseBeanMarker) ||
+ (bean instanceof ResourceBean) ||
+ (bean instanceof InstanceBean) ||
+ (bean instanceof EventBean) ||
+ (bean instanceof InjectionPointBean) ||
+ (bean instanceof BeanManagerBean)
+ )
+ {
+ return true;
+ }
+
+ else if(BeanManagerImpl.getManager().isNormalScope(bean.getScope()))
+ {
+ return true;
+ }
+ else
+ {
+ if(isPassivationCapable(bean) != null)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
}
\ No newline at end of file
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/events/extensions/AddBeanExtension.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/events/extensions/AddBeanExtension.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/events/extensions/AddBeanExtension.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/events/extensions/AddBeanExtension.java Wed Feb 24 00:10:33 2010
@@ -30,6 +30,8 @@
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.ProcessBean;
+import org.apache.webbeans.annotation.DependentScopeLiteral;
+
public class AddBeanExtension implements Extension
{
public static class MyBean
@@ -82,8 +84,7 @@
@Override
public Class<? extends Annotation> getScope()
{
- // TODO Auto-generated method stub
- return null;
+ return new DependentScopeLiteral().annotationType();
}
@Override
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/scopeextension/ExternalTestScopedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/scopeextension/ExternalTestScopedBean.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/scopeextension/ExternalTestScopedBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/scopeextension/ExternalTestScopedBean.java Wed Feb 24 00:10:33 2010
@@ -25,7 +25,7 @@
private static final long serialVersionUID = -917790714891819356L;
- public int i = 0;
+ private int i = 0;
public int getI() {
return i;
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/common/Person.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/common/Person.java?rev=915604&r1=915603&r2=915604&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/common/Person.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/common/Person.java Wed Feb 24 00:10:33 2010
@@ -18,7 +18,9 @@
*/
package org.apache.webbeans.newtests.promethods.common;
-public class Person
+import java.io.Serializable;
+
+public class Person implements Serializable
{
}