[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