[webbeans-commits] Webbeans SVN: r2395 - in ri/trunk/impl/src/main/java/org/jboss/webbeans: bootstrap and 1 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Fri Apr 10 19:14:42 EDT 2009
Author: danielc.roth
Date: 2009-04-10 19:14:42 -0400 (Fri, 10 Apr 2009)
New Revision: 2395
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/DisposalMethodBean.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java
Log:
Fixing WBRI-227
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/DisposalMethodBean.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/DisposalMethodBean.java 2009-04-10 23:03:06 UTC (rev 2394)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/DisposalMethodBean.java 2009-04-10 23:14:42 UTC (rev 2395)
@@ -9,8 +9,11 @@
import java.util.Set;
import javax.context.CreationalContext;
+import javax.context.Dependent;
+import javax.context.ScopeType;
import javax.event.Observes;
import javax.inject.DefinitionException;
+import javax.inject.DeploymentType;
import javax.inject.Disposes;
import javax.inject.Initializer;
import javax.inject.Produces;
@@ -23,6 +26,8 @@
import org.jboss.webbeans.injection.ParameterInjectionPoint;
import org.jboss.webbeans.introspector.AnnotatedMethod;
import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.log.LogProvider;
+import org.jboss.webbeans.log.Logging;
public class DisposalMethodBean<T> extends AbstractBean<T, Method>
{
@@ -40,12 +45,15 @@
}
+ private static final LogProvider log = Logging.getLogProvider(AbstractProducerBean.class);
protected AbstractClassBean<?> declaringBean;
- private ProducerMethodBean<?> specializedBean;
+ private DisposalMethodBean<?> specializedBean;
protected MethodInjectionPoint<T> disposalMethodInjectionPoint;
protected Set<AnnotatedInjectionPoint<?, ?>> disposalInjectionPoints;
private String id;
+
+ @SuppressWarnings("unchecked")
protected void initType()
{
this.type = (Class<T>) disposalMethodInjectionPoint.getAnnotatedParameters(Disposes.class).get(0).getRawType();
@@ -166,18 +174,13 @@
Object injectionObject = getManager().getInstanceToInject(injectionPoint);
parameters.add(injectionObject);
}
+
Object beanInstance = disposalMethodInjectionPoint.isStatic() ? declaringBean : getManager().getInstance(declaringBean);
- try
- {
- disposalMethodInjectionPoint.invoke(beanInstance, parameters.toArray());
- }
- catch (Exception e)
- {
- // TODO:
- }
+ disposalMethodInjectionPoint.invokeWithSpecialValue(beanInstance, Disposes.class, instance, manager, null, IllegalArgumentException.class);
+
}
private void checkDisposalMethod()
@@ -246,9 +249,9 @@
{
throw new IllegalStateException(toString() + " does not specialize a bean");
}
- this.specializedBean = environment.getProducerMethod(superClassMethod);
+ this.specializedBean = environment.getDisposalMethod(superClassMethod);
}
-
+
@Override
public Class<T> getType()
{
@@ -256,30 +259,6 @@
}
@Override
- public void initialize(BeanDeployerEnvironment environment)
- {
-
- }
-
- @Override
- public boolean isPrimitive()
- {
- return false;
- }
-
- @Override
- public boolean isProxyable()
- {
- return false;
- }
-
- @Override
- public boolean isSpecializing()
- {
- return false;
- }
-
- @Override
protected Class<? extends Annotation> getDefaultDeploymentType()
{
return declaringBean.getDeploymentType();
@@ -294,22 +273,61 @@
@Override
protected void initDeploymentType()
{
+ Set<Annotation> deploymentTypes = getAnnotatedItem().getMetaAnnotations(DeploymentType.class);
+ if (deploymentTypes.size() > 1)
+ {
+ throw new DefinitionException("At most one deployment type may be specified (" + deploymentTypes + " are specified) on " + getAnnotatedItem().toString());
+ }
+ else if (deploymentTypes.size() == 1)
+ {
+ this.deploymentType = deploymentTypes.iterator().next().annotationType();
+ log.trace("Deployment type " + deploymentType + " specified by annotation");
+ return;
+ }
+
+ initDeploymentTypeFromStereotype();
+
+ if (this.deploymentType == null)
+ {
+ this.deploymentType = getDefaultDeploymentType();
+ log.trace("Using default " + this.deploymentType + " deployment type");
+ return;
+ }
}
@Override
protected void initScopeType()
{
+ Set<Annotation> scopeAnnotations = getAnnotatedItem().getMetaAnnotations(ScopeType.class);
+ if (scopeAnnotations.size() > 1)
+ {
+ throw new DefinitionException("At most one scope may be specified");
+ }
+ if (scopeAnnotations.size() == 1)
+ {
+ this.scopeType = scopeAnnotations.iterator().next().annotationType();
+ log.trace("Scope " + scopeType + " specified by annotation");
+ return;
+ }
+
+ initScopeTypeFromStereotype();
+
+ if (this.scopeType == null)
+ {
+ this.scopeType = Dependent.class;
+ log.trace("Using default @Dependent scope");
+ }
}
@Override
public AbstractBean<?, ?> getSpecializedBean()
{
- return null;
+ return specializedBean;
}
public void destroy(T instance)
{
-
+ // No-op. Producer method dependent objects are destroyed in producer method bean
}
@Override
@@ -317,5 +335,5 @@
{
return id;
}
-
+
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java 2009-04-10 23:03:06 UTC (rev 2394)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java 2009-04-10 23:14:42 UTC (rev 2395)
@@ -31,6 +31,8 @@
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.context.DependentContext;
+import org.jboss.webbeans.context.DependentStorageRequest;
import org.jboss.webbeans.injection.MethodInjectionPoint;
import org.jboss.webbeans.injection.ParameterInjectionPoint;
import org.jboss.webbeans.introspector.AnnotatedMethod;
@@ -179,11 +181,27 @@
@Override
public void destroy(T instance)
{
- // Delegate destruction to disposal method
- if (disposalMethodBean != null)
- disposalMethodBean.invokeDisposeMethod(instance);
+ DependentStorageRequest dependentStorageRequest = DependentStorageRequest.of(dependentInstancesStore, new Object());
+ try
+ {
+ if (getDeclaringBean().isDependent())
+ {
+ DependentContext.instance().startCollectingDependents(dependentStorageRequest);
+ }
+ DependentContext.instance().setActive(true);
+ if (disposalMethodBean != null)
+ disposalMethodBean.invokeDisposeMethod(instance);
+ }
+ finally
+ {
+ if (getDeclaringBean().isDependent())
+ {
+ DependentContext.instance().stopCollectingDependents(dependentStorageRequest);
+ dependentInstancesStore.destroyDependentInstances(dependentStorageRequest.getKey());
+ }
+ DependentContext.instance().setActive(false);
+ }
- super.destroy(instance);
}
/**
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java 2009-04-10 23:03:06 UTC (rev 2394)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java 2009-04-10 23:14:42 UTC (rev 2395)
@@ -59,6 +59,21 @@
}
}
+
+ public DisposalMethodBean<?> getDisposalMethod(AnnotatedMethod<?> method)
+ {
+ if (!producerMethodBeanMap.containsKey(method))
+ {
+ return null;
+ }
+ else
+ {
+ DisposalMethodBean<?> bean = disposalMethodBeanMap.get(method);
+ bean.initialize(this);
+ return bean;
+ }
+ }
+
public AbstractClassBean<?> getClassBean(AnnotatedClass<?> clazz)
{
if (!classBeanMap.containsKey(clazz))
@@ -83,12 +98,14 @@
}
else if (value instanceof ProducerMethodBean)
{
- ProducerMethodBean<?> bean = (ProducerMethodBean<?>) value;
- producerMethodBeanMap.put(bean.getAnnotatedItem(), bean);
- } else if (value instanceof DisposalMethodBean) {
- DisposalMethodBean<?> bean = (DisposalMethodBean<?>) value;
- disposalMethodBeanMap.put(bean.getAnnotatedItem(), bean);
+ ProducerMethodBean<?> bean = (ProducerMethodBean<?>) value;
+ producerMethodBeanMap.put(bean.getAnnotatedItem(), bean);
}
+ else if (value instanceof DisposalMethodBean)
+ {
+ DisposalMethodBean<?> bean = (DisposalMethodBean<?>) value;
+ disposalMethodBeanMap.put(bean.getAnnotatedItem(), bean);
+ }
beans.add(value);
}
@@ -121,10 +138,10 @@
{
return resolvedDisposalBeans;
}
-
- public EjbDescriptorCache getEjbDescriptors()
+
+ public EjbDescriptorCache getEjbDescriptors()
{
- return ejbDescriptors;
+ return ejbDescriptors;
}
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java 2009-04-10 23:03:06 UTC (rev 2394)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java 2009-04-10 23:14:42 UTC (rev 2395)
@@ -121,7 +121,7 @@
{
try
{
- return invoke(declaringInstance, getParameterValues(getParameters(), annotatedParameter, parameter, manager, creationalContext), exceptionTypeToThrow);
+ return invoke(declaringInstance, getParameterValues(getParameters(), annotatedParameter, parameter, manager, creationalContext));
}
catch (IllegalArgumentException e)
{
More information about the weld-commits
mailing list