[jboss-cvs] JBossAS SVN: r89667 - in projects/reloaded/trunk/injection/src: main/java/org/jboss/reloaded/injection/annotation and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jun 2 09:41:02 EDT 2009


Author: wolfc
Date: 2009-06-02 09:41:02 -0400 (Tue, 02 Jun 2009)
New Revision: 89667

Added:
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java
   projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/
   projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java
   projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/
   projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java
Modified:
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java
   projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java
   projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java
Log:
RELOADED-8: lifecycle and annotation meta data creation

Modified: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java	2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -22,9 +22,12 @@
 package org.jboss.reloaded.injection;
 
 import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -48,9 +51,11 @@
    private Class<T> beanClass;
    private Map<String, Binder> binders = new HashMap<String, Binder>();
    private Map<Class<?>, Set<Injector<T>>> injectors = new HashMap<Class<?>, Set<Injector<T>>>();
+   private List<Method> postConstructs = new ArrayList<Method>();
+   private List<Method> preDestroys = new ArrayList<Method>();
+   
+   private Context enc;
 
-   private Context enc;
-   
    public ManagedBeanFactory(String name, Class<T> beanClass)
    {
       this.name = name;
@@ -82,7 +87,11 @@
             injector.inject(bean);
          }
          
-         // TODO: lifecycle
+         for(Method postConstruct : postConstructs)
+         {
+            postConstruct.invoke(instance);
+         }
+         
          return bean;
       }
       catch (InstantiationException e)
@@ -95,11 +104,35 @@
       }
    }
    
-   public void destroyBean(ManagedBeanInstance<T> bean)
+   public void destroyBean(ManagedBeanInstance<T> bean) throws Exception
    {
-      throw new RuntimeException("NYI");
+      try
+      {
+         T instance = bean.getBean();
+         for(Method preDestroy : preDestroys)
+         {
+            preDestroy.invoke(instance);
+         }
+      }
+      catch(IllegalAccessException e)
+      {
+         throw new RuntimeException(e);
+      }
+      catch (IllegalArgumentException e)
+      {
+         throw new RuntimeException(e);
+      }
+      catch (InvocationTargetException e)
+      {
+         throw handleThrowable(e.getCause());
+      }
    }
    
+   protected Class<T> getBeanClass()
+   {
+      return beanClass;
+   }
+   
    protected Map<String, Binder> getBinders()
    {
       return binders;
@@ -134,6 +167,16 @@
       }
    }
    
+   protected void setPostConstructs(List<Method> postConstructs)
+   {
+      this.postConstructs = postConstructs;
+   }
+   
+   protected void setPreDestroys(List<Method> preDestroys)
+   {
+      this.preDestroys = preDestroys;
+   }
+   
    protected void setupComponentContext()
    {
       ENCFactory.pushContextId(name);

Modified: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java	2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -24,7 +24,9 @@
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.naming.Context;
 
@@ -36,6 +38,8 @@
 import org.jboss.metadata.javaee.spec.Environment;
 import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbackMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
 import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData;
 import org.jboss.metadata.javaee.spec.PersistenceContextReferenceMetaData;
 import org.jboss.metadata.javaee.spec.PersistenceContextReferencesMetaData;
@@ -83,6 +87,8 @@
       if(env == null)
          return builder.getBeanMetaData();
       
+      // TODO: make dynamically extensible
+      
       if(env instanceof Environment)
          process(builder, container, deploymentUnit, (Environment) env);
       
@@ -96,9 +102,8 @@
       
       // TODO: JBoss specific stuff
       
-      // TODO: lifecycle
-      //process(builder, container, deploymentUnit, env.getPostConstructs());
-      //process(builder, container, deploymentUnit, env.getPreDestroys());
+      processPostConstructs(builder, container, deploymentUnit, env.getPostConstructs());
+      processPreDestroys(builder, container, deploymentUnit, env.getPreDestroys());
       
       return builder.getBeanMetaData();
    }
@@ -182,6 +187,21 @@
       throw new RuntimeException("<injection-target> could not be found: " + injectionTarget.getName() + "." + target.getInjectionTargetName());
    }
    
+   private static final Method findMethod(Class<?> cls, String methodName)
+   {
+      if(cls == null || cls == Object.class)
+         return null;
+      
+      Method methods[] = cls.getDeclaredMethods();
+      for(Method method : methods)
+      {
+         if(method.getName().equals(methodName) && method.getParameterTypes().length == 0)
+            return method;
+      }
+      
+      return findMethod(cls.getSuperclass(), methodName);
+   }
+   
    protected <T> void injectionTargets(ClassLoader loader, String jndiName, final ManagedBeanFactory<T> container, Collection<ResourceInjectionTargetMetaData> targets)
    {
       if(targets == null)
@@ -217,6 +237,17 @@
       return new ManagedBeanFactory<T>(name, beanClass);
    }
    
+   /**
+    * This method is to please coverage tools.
+    */
+   private static final boolean isEmpty(Collection<?> c)
+   {
+      return c == null || c.isEmpty();
+   }
+   
+   /**
+    * This method is to please coverage tools.
+    */
    private static final boolean isEmpty(String s)
    {
       // can't use s.isEmpty, that's Java 6
@@ -225,7 +256,7 @@
    
    protected void process(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, Collection<? extends AbstractEJBReferenceMetaData> ejbReferences)
    {
-      if(ejbReferences == null)
+      if(ejbReferences == null || ejbReferences.isEmpty())
          return;
       
       if(ejbReferenceResolver == null)
@@ -294,7 +325,7 @@
 
    protected void process(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, PersistenceContextReferencesMetaData persistenceContextRefs)
    {
-      if(persistenceContextRefs == null)
+      if(isEmpty(persistenceContextRefs))
          return;
       
       if(persistenceUnitDependencyResolver == null)
@@ -310,7 +341,7 @@
    
    protected void process(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, PersistenceUnitReferencesMetaData persistenceUnitRefs)
    {
-      if(persistenceUnitRefs == null)
+      if(isEmpty(persistenceUnitRefs))
          return;
       
       // TODO Auto-generated method stub
@@ -335,5 +366,74 @@
       throw new RuntimeException("NYI");
    }
 
+   protected void processLifecycleCallbacks(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, LifecycleCallbacksMetaData lifecycleCallbacks, List<Method> callbacks)
+   {
+      for(LifecycleCallbackMetaData callback : lifecycleCallbacks)
+      {
+         String className = callback.getClassName();
+         String methodName = callback.getMethodName();
+         
+         Class<?> cls = null;
+         if(isEmpty(className))
+         {
+            cls = container.getBeanClass();
+            Method method = findMethod(cls, methodName);
+            if(method == null)
+               throw new RuntimeException("Can't find method " + methodName + " in " + cls + " as specified in " + callback);
+            callbacks.add(method);
+         }
+         else
+         {
+            try
+            {
+               cls = deploymentUnit.getClassLoader().loadClass(className);
+            }
+            catch(ClassNotFoundException e)
+            {
+               throw new RuntimeException("Can't load class " + className + " specified in " + callback, e);
+            }
+            
+            try
+            {
+               Method method = cls.getDeclaredMethod(methodName);
+               callbacks.add(method);
+            }
+            catch (SecurityException e)
+            {
+               throw new RuntimeException(e);
+            }
+            catch (NoSuchMethodException e)
+            {
+               throw new RuntimeException("Can't find method " + methodName + " in " + cls + " as specified in " + callback, e);
+            }
+         }
+      }
+      // TODO: EJB 3.0 12.4.1: if overridden, do not invoke
+      // TODO: sort super first
+   }
    
+   protected void processPostConstructs(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, LifecycleCallbacksMetaData lifecycleCallbacks)
+   {
+      if(isEmpty(lifecycleCallbacks))
+         return;
+      
+      List<Method> postConstructs = new ArrayList<Method>();
+      
+      processLifecycleCallbacks(builder, container, deploymentUnit, lifecycleCallbacks, postConstructs);
+      
+      container.setPostConstructs(postConstructs);
+   }
+
+   protected void processPreDestroys(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, LifecycleCallbacksMetaData lifecycleCallbacks)
+   {
+      if(isEmpty(lifecycleCallbacks))
+         return;
+      
+      List<Method> preDestroys = new ArrayList<Method>();
+      
+      processLifecycleCallbacks(builder, container, deploymentUnit, lifecycleCallbacks, preDestroys);
+      
+      container.setPreDestroys(preDestroys);
+   }
+
 }

Added: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java	                        (rev 0)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.annotation.creator;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+
+import org.jboss.metadata.annotation.creator.AbstractCreator;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ManagedBeanJarCreator extends AbstractCreator<ManagedBeanJarMetaData>
+{
+   public ManagedBeanJarCreator(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+      
+      addProcessor(new ManagedBeanProcessor(finder));
+   }
+
+   @Override
+   public ManagedBeanJarMetaData create(Collection<Class<?>> classes)
+   {
+      if(classes == null || classes.isEmpty())
+         return null;
+      
+      ManagedBeanJarMetaData jarMetaData = new ManagedBeanJarMetaData();
+      
+      processMetaData(classes, jarMetaData);
+      
+      return jarMetaData;
+   }
+
+   @Override
+   protected boolean validateClass(Class<?> clazz)
+   {
+      return true;
+   }
+}

Added: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java	                        (rev 0)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,90 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.annotation.creator;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.creator.ProcessorUtils;
+import org.jboss.metadata.annotation.creator.jboss.AbstractComponentProcessor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
+import org.jboss.reloaded.injection.metadata.ManagedBeanMetaData;
+import org.jboss.reloaded.injection.test.common.ManagedBean;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ManagedBeanProcessor extends AbstractComponentProcessor<ManagedBeanMetaData> 
+   implements Processor<ManagedBeanJarMetaData, Class<?>>
+{
+   public ManagedBeanProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   protected ManagedBeanMetaData create(Class<?> beanClass)
+   {
+      ManagedBean annotation = finder.getAnnotation(beanClass, ManagedBean.class);
+      if(annotation == null)
+         return null;
+      
+      ManagedBeanMetaData beanMetaData = new ManagedBeanMetaData();
+      String name = annotation.value();
+      if(name == null || name.length() == 0)
+         name = beanClass.getSimpleName();
+      beanMetaData.setBeanClass(beanClass.getName());
+      beanMetaData.setName(name);
+      return beanMetaData;
+   }
+   
+   public Collection<Class<? extends Annotation>> getAnnotationTypes()
+   {
+      return ProcessorUtils.createAnnotationSet(ManagedBean.class);
+   }
+
+   public void process(ManagedBeanJarMetaData metaData, Class<?> beanClass)
+   {
+      ManagedBeanMetaData beanMetaData = create(beanClass);
+      if(beanMetaData == null)
+         return;
+      
+      List<ManagedBeanMetaData> beans = metaData.getManagedBeans();
+      if(beans == null)
+      {
+         beans = new ArrayList<ManagedBeanMetaData>();
+         metaData.setManagedBeans(beans);
+      }
+      beans.add(beanMetaData);
+      
+      JBossEnvironmentRefsGroupMetaData env = new JBossEnvironmentRefsGroupMetaData();
+      beanMetaData.setJndiEnvironmentRefsGroup(env);
+      super.process(env, beanClass);
+   }
+
+}

Modified: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java	2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -24,8 +24,8 @@
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
+import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
 import org.jboss.metadata.javaee.spec.Environment;
-import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
 import org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptionGroup;
 
 /**
@@ -40,7 +40,7 @@
 
    private String beanClass;
 
-   private EnvironmentRefsGroupMetaData environment;
+   private JBossEnvironmentRefsGroupMetaData environment;
    
    public String getBeanClass()
    {
@@ -53,7 +53,7 @@
       return environment;
    }
    
-   public EnvironmentRefsGroupMetaData getJndiEnvironmentRefsGroup()
+   public JBossEnvironmentRefsGroupMetaData getJndiEnvironmentRefsGroup()
    {
       return environment;
    }
@@ -63,7 +63,7 @@
       this.beanClass = beanClass;
    }
    
-   public void setJndiEnvironmentRefsGroup(EnvironmentRefsGroupMetaData env)
+   public void setJndiEnvironmentRefsGroup(JBossEnvironmentRefsGroupMetaData env)
    {
       this.environment = env;
    }

Modified: projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java
===================================================================
--- projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java	2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -22,7 +22,9 @@
 package org.jboss.reloaded.injection.test.common;
 
 import java.io.IOException;
+import java.lang.reflect.AnnotatedElement;
 import java.net.URL;
+import java.util.Arrays;
 
 import org.jboss.bootstrap.spi.lifecycle.LifecycleState;
 import org.jboss.bootstrap.spi.mc.config.MCServerConfig;
@@ -38,6 +40,10 @@
 import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
+import org.jboss.reloaded.injection.annotation.creator.ManagedBeanJarCreator;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
 import org.jboss.virtual.VFS;
 import org.jboss.virtual.VirtualFile;
 import org.junit.AfterClass;
@@ -156,4 +162,25 @@
          throw new IllegalStateException("Bean not found " + name + " at state " + state + " in controller " + controller);
       return context;
    }
+   
+   protected static ManagedBeanJarMetaData managedBeans(Class<?>... managedBeans)
+   {
+      AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+      ManagedBeanJarCreator creator = new ManagedBeanJarCreator(finder);
+      return creator.create(Arrays.asList(managedBeans));
+   }
+   
+   /*
+   protected static WebBeanDiscoveryEnvironment webBeans(Class<?>... webBeans)
+   {
+      final Collection<Class<?>> c = Arrays.asList(webBeans);
+      return new WebBeanDiscoveryEnvironment() {
+         @Override
+         public Iterable<Class<?>> getWebBeanClasses()
+         {
+            return c;
+         }
+      };
+   }
+   */
 }

Added: projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java
===================================================================
--- projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java	                        (rev 0)
+++ projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.test.lifecycle;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.jboss.reloaded.injection.test.common.ManagedBean;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at ManagedBean
+public class LifecycleBean
+{
+   // exposed for unit test
+   public int postConstructs;
+   public int preDestroys;
+   
+   @PostConstruct
+   public void postConstruct()
+   {
+      postConstructs++;
+   }
+   
+   @PreDestroy
+   public void preDestroy()
+   {
+      preDestroys++;
+   }
+}

Added: projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java
===================================================================
--- projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java	                        (rev 0)
+++ projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java	2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.test.lifecycle.unit;
+
+import static org.junit.Assert.assertEquals;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.reloaded.injection.ManagedBeanFactory;
+import org.jboss.reloaded.injection.ManagedBeanInstance;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
+import org.jboss.reloaded.injection.test.common.AbstractInjectionTestCase;
+import org.jboss.reloaded.injection.test.lifecycle.LifecycleBean;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class LifecycleTestCase extends AbstractInjectionTestCase
+{
+   @BeforeClass
+   public static void beforeClass() throws Exception
+   {
+      AbstractInjectionTestCase.beforeClass();
+      
+      deploy(deployment("lifecycle", ManagedBeanJarMetaData.class, managedBeans(LifecycleBean.class)));
+      //deploy(deployment("lifecycle", WebBeanDiscoveryEnvironment.class, webBeans(LifecycleBean.class)));
+   }
+   
+   @Test
+   public void testPostConstruct() throws Exception
+   {
+      ManagedBeanFactory<LifecycleBean> container = getBean("jboss:service=ManagedBean,name=LifecycleBean", ControllerState.INSTALLED, ManagedBeanFactory.class);
+      
+      ManagedBeanInstance<LifecycleBean> bean = container.createBean();
+      
+      int postConstructs = bean.getBean().postConstructs;
+      assertEquals(1, postConstructs);
+   }
+
+   
+   @Test
+   public void testPreDestroy() throws Exception
+   {
+      ManagedBeanFactory<LifecycleBean> container = getBean("jboss:service=ManagedBean,name=LifecycleBean", ControllerState.INSTALLED, ManagedBeanFactory.class);
+      
+      ManagedBeanInstance<LifecycleBean> bean = container.createBean();
+      
+      container.destroyBean(bean);
+      
+      int preDestroys = bean.getBean().preDestroys;
+      assertEquals(1, preDestroys);
+   }
+}




More information about the jboss-cvs-commits mailing list