Skip to content

Commit

Permalink
WELD-290
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Dec 8, 2009
1 parent e13609a commit 1011c67
Show file tree
Hide file tree
Showing 14 changed files with 189 additions and 25 deletions.
2 changes: 1 addition & 1 deletion impl/src/main/java/org/jboss/weld/Validator.java
Expand Up @@ -272,7 +272,7 @@ public void validateInjectionPoint(InjectionPoint ij, BeanManagerImpl beanManage

public void validateInjectionPointPassivationCapable(InjectionPoint ij, Bean<?> resolvedBean, BeanManagerImpl beanManager)
{
if (!ij.isTransient() && !Beans.isPassivationCapableBean(resolvedBean))
if (!ij.isTransient() && !Beans.isPassivationCapableDependency(resolvedBean))
{
if (resolvedBean.getScope().equals(Dependent.class) && resolvedBean instanceof AbstractProducerBean<?, ?,?>)
{
Expand Down
30 changes: 25 additions & 5 deletions impl/src/main/java/org/jboss/weld/bean/AbstractProducerBean.java
Expand Up @@ -53,6 +53,7 @@
import javax.inject.Scope;

import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.Container;
import org.jboss.weld.DefinitionException;
import org.jboss.weld.IllegalProductException;
import org.jboss.weld.WeldException;
Expand All @@ -77,7 +78,8 @@ 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;
private boolean passivationCapableBean;
private boolean passivationCapableDependency;

/**
* Constructor
Expand Down Expand Up @@ -170,11 +172,23 @@ private void initPassivationCapable()
{
if (getAnnotatedItem().isFinal() && !Serializable.class.isAssignableFrom(getAnnotatedItem().getJavaClass()))
{
this.passivationCapable = false;
this.passivationCapableBean = false;
}
else
{
this.passivationCapable = true;
this.passivationCapableBean = true;
}
if (Container.instance().deploymentServices().get(MetaAnnotationStore.class).getScopeModel(getScope()).isNormal())
{
this.passivationCapableDependency = true;
}
else if (getScope().equals(Dependent.class) && passivationCapableBean)
{
this.passivationCapableDependency = true;
}
else
{
this.passivationCapableDependency = false;
}
}

Expand All @@ -185,9 +199,15 @@ protected void initAlternative()
}

@Override
public boolean isPassivationCapable()
public boolean isPassivationCapableBean()
{
return passivationCapableBean;
}

@Override
public boolean isPassivationCapableDependency()
{
return passivationCapable;
return passivationCapableDependency;
}

@Override
Expand Down
9 changes: 8 additions & 1 deletion impl/src/main/java/org/jboss/weld/bean/DisposalMethod.java
Expand Up @@ -148,7 +148,14 @@ public boolean isNullable()
}

@Override
public boolean isPassivationCapable()
public boolean isPassivationCapableBean()
{
// Not relevant
return false;
}

@Override
public boolean isPassivationCapableDependency()
{
// Not relevant
return false;
Expand Down
43 changes: 32 additions & 11 deletions impl/src/main/java/org/jboss/weld/bean/ManagedBean.java
Expand Up @@ -34,6 +34,7 @@
import java.util.List;
import java.util.Set;

import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Disposes;
Expand All @@ -48,6 +49,7 @@
import org.jboss.interceptor.registry.InterceptorRegistry;
import org.jboss.interceptor.util.InterceptionUtils;
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.Container;
import org.jboss.weld.DefinitionException;
import org.jboss.weld.DeploymentException;
import org.jboss.weld.ForbiddenStateException;
Expand Down Expand Up @@ -93,7 +95,8 @@ public class ManagedBean<T> extends AbstractClassBean<T>

private ManagedBean<?> specializedBean;

private boolean passivationCapable;
private boolean passivationCapableBean;
private boolean passivationCapableDependency;

/**
* Creates a simple, annotation defined Web Bean
Expand Down Expand Up @@ -277,35 +280,35 @@ protected T createInstance(CreationalContext<T> ctx)
public void initializeAfterBeanDiscovery()
{
super.initializeAfterBeanDiscovery();
if (this.passivationCapable && this.hasDecorators())
if (this.passivationCapableBean && this.hasDecorators())
{
for (Decorator<?> decorator : this.getDecorators())
{
if (!(PassivationCapable.class.isAssignableFrom(decorator.getClass())) || !Reflections.isSerializable(decorator.getBeanClass()))
{
this.passivationCapable = false;
this.passivationCapableBean = false;
break;
}
}
}
if (this.passivationCapable && hasCdiBoundInterceptors())
if (this.passivationCapableBean && hasCdiBoundInterceptors())
{
for (SerializableContextual<Interceptor<?>, ?> interceptor : getManager().getCdiInterceptorsRegistry().getInterceptionModel(getType()).getAllInterceptors())
{
if (!(PassivationCapable.class.isAssignableFrom(interceptor.get().getClass())) || !Reflections.isSerializable(interceptor.get().getBeanClass()))
{
this.passivationCapable = false;
this.passivationCapableBean = false;
break;
}
}
}
if (this.passivationCapable && hasDirectlyDefinedInterceptors())
if (this.passivationCapableBean && hasDirectlyDefinedInterceptors())
{
for (Class<?> interceptorClass : getManager().getClassDeclaredInterceptorsRegistry().getInterceptionModel(getType()).getAllInterceptors())
{
if (!Reflections.isSerializable(interceptorClass))
{
this.passivationCapable = false;
this.passivationCapableBean = false;
break;
}
}
Expand All @@ -314,13 +317,31 @@ public void initializeAfterBeanDiscovery()

private void initPassivationCapable()
{
this.passivationCapable = Reflections.isSerializable(getAnnotatedItem().getJavaClass());
this.passivationCapableBean = Reflections.isSerializable(getAnnotatedItem().getJavaClass());
if (Container.instance().deploymentServices().get(MetaAnnotationStore.class).getScopeModel(getScope()).isNormal())
{
this.passivationCapableDependency = true;
}
else if (getScope().equals(Dependent.class) && passivationCapableBean)
{
this.passivationCapableDependency = true;
}
else
{
this.passivationCapableDependency = false;
}
}

@Override
public boolean isPassivationCapableBean()
{
return passivationCapableBean;
}

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

private void initEEInjectionPoints()
Expand Down Expand Up @@ -349,7 +370,7 @@ public void checkType()
throw new DefinitionException(BEAN_MUST_BE_DEPENDENT, type);
}
boolean passivating = manager.getServices().get(MetaAnnotationStore.class).getScopeModel(scopeType).isPassivating();
if (passivating && !isPassivationCapable())
if (passivating && !isPassivationCapableBean())
{
throw new DefinitionException(PASSIVATING_BEAN_NEEDS_SERIALIZABLE_IMPL, this);
}
Expand Down
5 changes: 3 additions & 2 deletions impl/src/main/java/org/jboss/weld/bean/RIBean.java
Expand Up @@ -25,7 +25,6 @@

import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
import org.jboss.weld.bootstrap.api.Environment;
import org.jboss.weld.injection.WeldInjectionPoint;

/**
Expand Down Expand Up @@ -91,7 +90,9 @@ public boolean isDependent()

public abstract boolean isProxyable();

public abstract boolean isPassivationCapable();
public abstract boolean isPassivationCapableBean();

public abstract boolean isPassivationCapableDependency();

public boolean isProxyRequired()
{
Expand Down
8 changes: 7 additions & 1 deletion impl/src/main/java/org/jboss/weld/bean/SessionBean.java
Expand Up @@ -357,10 +357,16 @@ public String getDescription()
}

@Override
public boolean isPassivationCapable()
public boolean isPassivationCapableBean()
{
return getEjbDescriptor().isStateful();
}

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

public InternalEjbDescriptor<T> getEjbDescriptor()
{
Expand Down
Expand Up @@ -112,7 +112,13 @@ public boolean isProxyable()
}

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

@Override
public boolean isPassivationCapableDependency()
{
return true;
}
Expand Down
Expand Up @@ -68,7 +68,7 @@ public boolean isProxyable()
}

@Override
public boolean isPassivationCapable()
public boolean isPassivationCapableBean()
{
return passivationCapable;
}
Expand Down
Expand Up @@ -176,7 +176,7 @@ private T createUnderlying(CreationalContext<T> creationalContext)
}

@Override
public boolean isPassivationCapable()
public boolean isPassivationCapableBean()
{
return true;
}
Expand Down
33 changes: 32 additions & 1 deletion impl/src/main/java/org/jboss/weld/util/Beans.java
Expand Up @@ -52,6 +52,7 @@
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.decorator.Decorator;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
Expand Down Expand Up @@ -143,13 +144,43 @@ public static boolean isPassivationCapableBean(Bean<?> bean)
{
if (bean instanceof RIBean<?>)
{
return ((RIBean<?>) bean).isPassivationCapable();
return ((RIBean<?>) bean).isPassivationCapableBean();
}
else
{
return Reflections.isSerializable(bean.getBeanClass());
}
}

/**
* Tests if a bean is capable of having its state temporarily stored to
* secondary storage
*
* @param bean The bean to inspect
* @return True if the bean is passivation capable
*/
public static boolean isPassivationCapableDependency(Bean<?> bean)
{
if (bean instanceof RIBean<?>)
{
return ((RIBean<?>) bean).isPassivationCapableDependency();
}
else
{
if (Container.instance().deploymentServices().get(MetaAnnotationStore.class).getScopeModel(bean.getScope()).isNormal())
{
return true;
}
else if (bean.getScope().equals(Dependent.class) && isPassivationCapableBean(bean))
{
return true;
}
else
{
return false;
}
}
}

/**
* Indicates if a bean is proxyable
Expand Down
@@ -0,0 +1,24 @@
package org.jboss.weld.tests.enterprise.proxyability;

import org.jboss.testharness.impl.packaging.Artifact;
import org.jboss.testharness.impl.packaging.IntegrationTest;
import org.jboss.testharness.impl.packaging.Packaging;
import org.jboss.testharness.impl.packaging.PackagingType;
import org.jboss.weld.test.AbstractWeldTest;
import org.testng.annotations.Test;

@Artifact
@Packaging(PackagingType.EAR)
@IntegrationTest
public class EnterpriseBeanLifecycleTest extends AbstractWeldTest
{

@Test(description="WELD-290")
public void testSLSBInjectedIntoPassivatingManagedBean()
{
SimpleBean bean = getCurrentManager().getInstanceByType(SimpleBean.class);
assert bean.getMessage().equals("This is my message from my stateless bean");

}

}
@@ -0,0 +1,18 @@
package org.jboss.weld.tests.enterprise.proxyability;

import java.io.Serializable;

import javax.ejb.Stateless;

/**
* Session Bean implementation class MyStatelessBean
*/
@Stateless
public class MyStatelessBean implements MyStatelessBeanLocal, Serializable
{

public String getText()
{
return "This is my message from my stateless bean";
}
}
@@ -0,0 +1,10 @@
package org.jboss.weld.tests.enterprise.proxyability;

import javax.ejb.Local;

@Local
public interface MyStatelessBeanLocal
{

String getText();
}
@@ -0,0 +1,20 @@
package org.jboss.weld.tests.enterprise.proxyability;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;

@SessionScoped
public class SimpleBean implements Serializable
{

@Inject
private MyStatelessBeanLocal myStatelessBean;

public String getMessage()
{
return myStatelessBean.getText();
}

}

0 comments on commit 1011c67

Please sign in to comment.