Skip to content

Commit

Permalink
WELD-214, WELD-64, WELD-250, WELD-227, WELD-231
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Nov 7, 2009
1 parent 1b928db commit c35c7af
Show file tree
Hide file tree
Showing 61 changed files with 1,447 additions and 828 deletions.
15 changes: 0 additions & 15 deletions impl/src/main/java/org/jboss/weld/bean/AbstractBean.java
Expand Up @@ -101,8 +101,6 @@ public abstract class AbstractBean<T, S> extends RIBean<T>
// The Bean manager
protected BeanManagerImpl manager;

private boolean _serializable;

private boolean initialized;


Expand Down Expand Up @@ -143,7 +141,6 @@ public void initialize(BeanDeployerEnvironment environment)
log.trace(CREATING_BEAN, getType());
initName();
initScopeType();
initSerializable();
initProxyable();
checkDelegateInjectionPoints();
}
Expand Down Expand Up @@ -492,18 +489,6 @@ public boolean isPrimitive()
return primitive;
}

public boolean isSerializable()
{
// TODO WTF - why are we not caching the serializability of injection
// points!
return _serializable && checkInjectionPointsAreSerializable();
}

protected void initSerializable()
{
_serializable = Reflections.isSerializable(type);
}

@Override
public boolean isProxyable()
{
Expand Down
23 changes: 7 additions & 16 deletions impl/src/main/java/org/jboss/weld/bean/AbstractClassBean.java
Expand Up @@ -22,15 +22,12 @@
import static org.jboss.weld.logging.messages.BeanMessage.USING_SCOPE;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;

import javax.enterprise.context.Dependent;
Expand All @@ -52,22 +49,23 @@
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.DefinitionException;
import org.jboss.weld.DeploymentException;
import org.jboss.weld.serialization.spi.helpers.SerializableContextualInstance;
import org.jboss.weld.serialization.spi.helpers.SerializableContextual;
import org.jboss.weld.context.SerializableContextualInstanceImpl;
import org.jboss.weld.context.SerializableContextualImpl;
import org.jboss.weld.ejb.EJBApiAbstraction;
import org.jboss.weld.bean.proxy.DecoratorProxyMethodHandler;
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
import org.jboss.weld.context.SerializableContextualImpl;
import org.jboss.weld.context.SerializableContextualInstanceImpl;
import org.jboss.weld.ejb.EJBApiAbstraction;
import org.jboss.weld.injection.FieldInjectionPoint;
import org.jboss.weld.injection.MethodInjectionPoint;
import org.jboss.weld.introspector.WeldClass;
import org.jboss.weld.introspector.WeldMethod;
import org.jboss.weld.metadata.cache.MetaAnnotationStore;
import org.jboss.weld.serialization.spi.helpers.SerializableContextual;
import org.jboss.weld.serialization.spi.helpers.SerializableContextualInstance;
import org.jboss.weld.util.Beans;
import org.jboss.weld.util.Proxies;
import org.jboss.weld.util.Reflections;
import org.jboss.weld.util.Strings;
import org.jboss.weld.util.Proxies.TypeInfo;
import org.slf4j.cal10n.LocLogger;

/**
Expand Down Expand Up @@ -173,14 +171,7 @@ public boolean hasDecorators()

protected void initProxyClassForDecoratedBean()
{
Set<Type> types = new LinkedHashSet<Type>(getTypes());
types.add(TargetInstanceProxy.class);
ProxyFactory proxyFactory = Proxies.getProxyFactory(types);

@SuppressWarnings("unchecked")
Class<T> proxyClass = proxyFactory.createClass();

this.proxyClassForDecorators = proxyClass;
this.proxyClassForDecorators = Proxies.createProxyClass(TypeInfo.of(getTypes()).add(TargetInstanceProxy.class));
}

protected T applyDecorators(T instance, CreationalContext<T> creationalContext, InjectionPoint originalInjectionPoint)
Expand Down
35 changes: 22 additions & 13 deletions impl/src/main/java/org/jboss/weld/bean/AbstractProducerBean.java
Expand Up @@ -21,6 +21,7 @@
import static org.jboss.weld.logging.messages.BeanMessage.USING_DEFAULT_SCOPE;
import static org.jboss.weld.logging.messages.BeanMessage.USING_SCOPE;

import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
Expand Down Expand Up @@ -65,6 +66,7 @@ public abstract class AbstractProducerBean<X, T, S extends Member> extends Abstr
private static final LocLogger log = loggerFactory().getLogger(BEAN);

private Producer<T> producer;
private boolean passivationCapable;

/**
* Constructor
Expand Down Expand Up @@ -152,6 +154,25 @@ public void initialize(BeanDeployerEnvironment environment)
getDeclaringBean().initialize(environment);
super.initialize(environment);
checkProducerReturnType();
initPassivationCapable();
}

private void initPassivationCapable()
{
if (getAnnotatedItem().isFinal() && !Serializable.class.isAssignableFrom(getAnnotatedItem().getJavaClass()))
{
this.passivationCapable = false;
}
else
{
this.passivationCapable = true;
}
}

@Override
public boolean isPassivationCapable()
{
return passivationCapable;
}

@Override
Expand Down Expand Up @@ -183,7 +204,7 @@ else if (instance != null)
{
return;
}
if (!Reflections.isSerializable(instance.getClass()) && Beans.isPassivationCapableBean(injectionPoint.getBean()))
if (!Reflections.isSerializable(instance.getClass()) && Beans.isPassivatingScope(injectionPoint.getBean(), manager))
{
if (injectionPoint.getMember() instanceof Field)
{
Expand Down Expand Up @@ -238,18 +259,6 @@ protected void initScopeType()
}
}

@Override
protected void initSerializable()
{
// No-op
}

@Override
public boolean isSerializable()
{
return true;
}

/**
* This operation is *not* threadsafe, and should not be called outside bootstrap
*
Expand Down
6 changes: 3 additions & 3 deletions impl/src/main/java/org/jboss/weld/bean/DisposalMethod.java
Expand Up @@ -96,7 +96,7 @@ protected void initBindings()
{
// At least 1 parameter exists, already checked in constructor
this.bindings = new HashSet<Annotation>();
this.bindings.addAll(disposalMethodInjectionPoint.getWBParameters().get(0).getQualifiers());
this.bindings.addAll(disposalMethodInjectionPoint.getWeldParameters().get(0).getQualifiers());
initDefaultBindings();
}

Expand Down Expand Up @@ -144,7 +144,7 @@ public boolean isNullable()
}

@Override
public boolean isSerializable()
public boolean isPassivationCapable()
{
// Not relevant
return false;
Expand Down Expand Up @@ -179,7 +179,7 @@ public void invokeDisposeMethod(Object instance)

private void checkDisposalMethod()
{
if (!disposalMethodInjectionPoint.getWBParameters().get(0).isAnnotationPresent(Disposes.class))
if (!disposalMethodInjectionPoint.getWeldParameters().get(0).isAnnotationPresent(Disposes.class))
{
throw new DefinitionException(disposalMethodInjectionPoint.toString() + " doesn't have @Dispose as first parameter");
}
Expand Down
17 changes: 16 additions & 1 deletion impl/src/main/java/org/jboss/weld/bean/ManagedBean.java
Expand Up @@ -83,6 +83,8 @@ public class ManagedBean<T> extends AbstractClassBean<T>
private Set<WeldInjectionPoint<?, ?>> resourceInjectionPoints;

private ManagedBean<?> specializedBean;

private boolean passivationCapable;

/**
* Creates a simple, annotation defined Web Bean
Expand Down Expand Up @@ -186,6 +188,7 @@ public void initialize(BeanDeployerEnvironment environment)
initPostConstruct();
initPreDestroy();
initEEInjectionPoints();
initPassivationCapable();
if (isInterceptionCandidate())
{
initDirectlyDefinedInterceptors();
Expand Down Expand Up @@ -255,6 +258,18 @@ public T produce(CreationalContext<T> ctx)
}
}

private void initPassivationCapable()
{
this.passivationCapable = Reflections.isSerializable(getAnnotatedItem().getJavaClass());
// TODO Add in interceptor and decorator checks
}

@Override
public boolean isPassivationCapable()
{
return passivationCapable;
}

private void initEEInjectionPoints()
{
this.ejbInjectionPoints = Beans.getEjbInjectionPoints(this, getAnnotatedItem(), getManager());
Expand Down Expand Up @@ -296,7 +311,7 @@ protected void checkType()
DecoratorImpl<?> decoratorBean = (DecoratorImpl<?>) decorator;
for (WeldMethod<?, ?> decoratorMethod : decoratorBean.getAnnotatedItem().getWeldMethods())
{
WeldMethod<?, ?> method = getAnnotatedItem().getWBMethod(decoratorMethod.getSignature());
WeldMethod<?, ?> method = getAnnotatedItem().getWeldMethod(decoratorMethod.getSignature());
if (method != null && !method.isStatic() && !method.isPrivate() && method.isFinal())
{
throw new DefinitionException("Decorated bean method " + method + " (decorated by "+ decoratorMethod + ") cannot be declarted final");
Expand Down
2 changes: 1 addition & 1 deletion impl/src/main/java/org/jboss/weld/bean/ProducerMethod.java
Expand Up @@ -133,7 +133,7 @@ public T produce(CreationalContext<T> creationalContext)
*/
protected void initProducerMethodInjectableParameters()
{
for (WeldParameter<?, ?> parameter : method.getWBParameters())
for (WeldParameter<?, ?> parameter : method.getWeldParameters())
{
addInjectionPoint(ParameterInjectionPoint.of(this, parameter));
}
Expand Down
2 changes: 2 additions & 0 deletions impl/src/main/java/org/jboss/weld/bean/RIBean.java
Expand Up @@ -85,6 +85,8 @@ public boolean isDependent()
}

public abstract boolean isProxyable();

public abstract boolean isPassivationCapable();

public boolean isProxyRequired()
{
Expand Down
30 changes: 6 additions & 24 deletions impl/src/main/java/org/jboss/weld/bean/SessionBean.java
Expand Up @@ -24,13 +24,9 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;

import javax.decorator.Decorator;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.spi.CreationalContext;
Expand All @@ -49,7 +45,6 @@
import org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler;
import org.jboss.weld.bean.proxy.Marker;
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
import org.jboss.weld.serialization.spi.helpers.SerializableContextual;
import org.jboss.weld.ejb.InternalEjbDescriptor;
import org.jboss.weld.ejb.api.SessionObjectReference;
import org.jboss.weld.ejb.spi.BusinessInterfaceDescriptor;
Expand All @@ -58,8 +53,10 @@
import org.jboss.weld.introspector.WeldClass;
import org.jboss.weld.introspector.WeldMethod;
import org.jboss.weld.resources.ClassTransformer;
import org.jboss.weld.serialization.spi.helpers.SerializableContextual;
import org.jboss.weld.util.Beans;
import org.jboss.weld.util.Proxies;
import org.jboss.weld.util.Proxies.TypeInfo;

/**
* An enterprise bean representation
Expand Down Expand Up @@ -169,8 +166,7 @@ public T produce(CreationalContext<T> ctx)
{
T instance = proxyClass.newInstance();
ctx.push(instance);
((ProxyObject) instance).setHandler(new EnterpriseBeanProxyMethodHandler<T>(SessionBean.this, ctx));
return instance;
return Proxies.attachMethodHandler(instance, new EnterpriseBeanProxyMethodHandler<T>(SessionBean.this, ctx));
}
catch (InstantiationException e)
{
Expand Down Expand Up @@ -211,15 +207,7 @@ protected void initTypes()

protected void initProxyClass()
{
Set<Type> types = new LinkedHashSet<Type>(getTypes());
types.add(EnterpriseBeanInstance.class);
types.add(Serializable.class);
ProxyFactory proxyFactory = Proxies.getProxyFactory(types);

@SuppressWarnings("unchecked")
Class<T> proxyClass = proxyFactory.createClass();

this.proxyClass = proxyClass;
this.proxyClass = Proxies.createProxyClass(TypeInfo.of(getTypes()).add(EnterpriseBeanInstance.class).add(Serializable.class));
}

/**
Expand Down Expand Up @@ -351,15 +339,9 @@ public String getDescription()
}

@Override
protected void initSerializable()
public boolean isPassivationCapable()
{
// No-op
}

@Override
public boolean isSerializable()
{
return true;
return getEjbDescriptor().isStateful();
}

public InternalEjbDescriptor<T> getEjbDescriptor()
Expand Down
Expand Up @@ -111,6 +111,12 @@ public boolean isProxyable()
return true;
}

@Override
public boolean isPassivationCapable()
{
return true;
}

@Override
public String getDescription()
{
Expand Down

0 comments on commit c35c7af

Please sign in to comment.