[jboss-cvs] JBossAS SVN: r71248 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/beans/metadata/spi/builder and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Mar 25 11:39:42 EDT 2008


Author: alesj
Date: 2008-03-25 11:39:42 -0400 (Tue, 25 Mar 2008)
New Revision: 71248

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AnnotationsAction.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/AfterInstantiateTester.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/OtherVerifier.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstantiateAnnotationsTestCase.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassDependencyItem.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstantiateAction.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractBeanAnnotationAdapterTest.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AnnotationSupportTestSuite.java
Log:
Apply IoC annotations for beans created through factory (w/o bean attribute on BeanMetaData).
Fixing the human readable info for contextual dependencies.



Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -154,6 +154,18 @@
       return beanMetaData;
    }
 
+   public BeanMetaDataBuilder setName(String name)
+   {
+      beanMetaData.setName(name);
+      return this;
+   }
+
+   public BeanMetaDataBuilder setBean(String bean)
+   {
+      beanMetaData.setBean(bean);
+      return this;
+   }
+
    public BeanMetaDataBuilder setAliases(Set<Object> aliases)
    {
       beanMetaData.setAliases(aliases);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -79,7 +79,8 @@
       {
          return BeanMetaDataBuilderFactory.createBuilder((AbstractBeanMetaData)beanMetaData);
       }
-      else throw new IllegalArgumentException("Invalid type of bean metadata");
+      else
+         throw new IllegalArgumentException("Invalid type of bean metadata");
    }
 
    /**
@@ -90,6 +91,22 @@
    public abstract BeanMetaData getBeanMetaData();
 
    /**
+    * Set the bean name.
+    *
+    * @param name the name
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setName(String name);
+
+   /**
+    * Set the bean.
+    *
+    * @param bean the bean class name
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setBean(String bean);
+
+   /**
     * Set the aliases
     * 
     * @param aliases the aliases

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -568,6 +568,7 @@
          setFactoryClass(GenericBeanFactory.class.getName());
 
       AbstractBeanMetaData beanMetaData = new AbstractBeanMetaData(name, getFactoryClass());
+      beanMetaData.setAnnotations(getAnnotations());
       beanMetaData.setDemands(getDemands());
       beanMetaData.setDepends(getDepends());
       beanMetaData.setSupplies(getSupplies());

Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AnnotationsAction.java (from rev 71237, projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallsAwareAction.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AnnotationsAction.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AnnotationsAction.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -0,0 +1,88 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.kernel.plugins.dependency;
+
+import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapter;
+import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapterFactory;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+
+/**
+ * Handles IoC annotations.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class AnnotationsAction extends InstallsAwareAction
+{
+   /**
+    * Handle IoC annotations.
+    *
+    * @param context the kernel controller context
+    * @throws Throwable for any error
+    */
+   protected void applyAnnotations(KernelControllerContext context) throws Throwable
+   {
+      AnnotationMetaDataVisitor annotationsVisitor = new AnnotationMetaDataVisitor(context);
+      annotationsVisitor.before();
+      try
+         {
+            getBeanAnnotationAdapter().applyAnnotations(annotationsVisitor);
+         }
+         finally
+         {
+            annotationsVisitor.after();
+         }
+   }
+
+   /**
+    * Clean IoC annotations.
+    *
+    * @param context the kernel controller context
+    */
+   protected void cleanAnnotations(KernelControllerContext context)
+   {
+      AnnotationMetaDataVisitor annotationsVisitor = new AnnotationMetaDataVisitor(context);
+      annotationsVisitor.before();
+      try
+      {
+         getBeanAnnotationAdapter().cleanAnnotations(annotationsVisitor);
+      }
+      catch(Throwable t)
+      {
+         log.debug("Error while cleaning the annotations: " + t);
+      }
+      finally
+      {
+         annotationsVisitor.after();
+      }
+   }
+
+   /**
+    * Get bean annotation adapter.
+    *
+    * @return bean annotation adapter
+    */
+   protected BeanAnnotationAdapter getBeanAnnotationAdapter()
+   {
+      BeanAnnotationAdapterFactory factory = BeanAnnotationAdapterFactory.getInstance();
+      return factory.getBeanAnnotationAdapter();
+   }
+}
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -131,6 +131,7 @@
          return first.equals(second) == false;
    }
 
+   @Override
    public void toString(JBossStringBuilder buffer)
    {
       super.toString(buffer);
@@ -140,7 +141,6 @@
    @Override
    public String toHumanReadableString()
    {
-      // TODO toHumanReadableString
-      return super.toString();
+      return "Cardinality usage: '" + cardinality + "' and " + super.toHumanReadableString();
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -52,7 +52,6 @@
       }
       return isResolved();
    }
-
 }
 
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassDependencyItem.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ClassDependencyItem.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -62,7 +62,11 @@
 
    public void toShortString(JBossStringBuilder buffer)
    {
-      buffer.append(getName()).append(" demands ").append(getIDependOn());
+      buffer.append(getName()).append(" demandsClass ").append(getIDependOn());
    }
 
+   public String toHumanReadableString()
+   {
+      return getIDependOn() + " (NOTE: using autowiring to resolve this dependency)";
+   }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -24,8 +24,6 @@
 import java.util.List;
 
 import org.jboss.beans.info.spi.BeanInfo;
-import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapterFactory;
-import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapter;
 import org.jboss.kernel.spi.config.KernelConfig;
 import org.jboss.kernel.spi.dependency.DependencyBuilder;
 import org.jboss.kernel.spi.dependency.DependencyBuilderListItem;
@@ -41,7 +39,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class DescribeAction extends InstallsAwareAction
+public class DescribeAction extends AnnotationsAction
 {
    @SuppressWarnings("unchecked")
    protected void installActionInternal(KernelControllerContext context) throws Throwable
@@ -66,40 +64,18 @@
             }
          }
          // handle custom annotations
-         AnnotationMetaDataVisitor annotationsVisitor = new AnnotationMetaDataVisitor(context);
-         annotationsVisitor.before();
-         try
-         {
-            getBeanAnnotationAdapter().applyAnnotations(annotationsVisitor);
-         }
-         finally
-         {
-            annotationsVisitor.after();
-         }
+         applyAnnotations(context);
       }
    }
 
    protected void uninstallActionInternal(KernelControllerContext context)
    {
-      // handle custom annotations
-      AnnotationMetaDataVisitor annotationsVisitor = new AnnotationMetaDataVisitor(context);
-      annotationsVisitor.before();
-      try
-      {
-         getBeanAnnotationAdapter().cleanAnnotations(annotationsVisitor);
-      }
-      catch(Throwable t)
-      {
-         log.debug("Error while cleaning the annotations: " + t);
-      }
-      finally
-      {
-         annotationsVisitor.after();
-      }
-      
       BeanInfo info = context.getBeanInfo();
       if (info != null)
       {
+         // handle custom annotations
+         cleanAnnotations(context);
+
          KernelController controller = (KernelController)context.getController();
          KernelConfig config = controller.getKernel().getConfig();
          DependencyBuilder dependencyBuilder;
@@ -128,12 +104,6 @@
       }      
    }
 
-   protected BeanAnnotationAdapter getBeanAnnotationAdapter()
-   {
-      BeanAnnotationAdapterFactory factory = BeanAnnotationAdapterFactory.getInstance();
-      return factory.getBeanAnnotationAdapter();
-   }
-
    protected ControllerState getState()
    {
       return ControllerState.DESCRIBED;

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstantiateAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstantiateAction.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstantiateAction.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -25,6 +25,7 @@
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.dependency.spi.ScopeInfo;
 import org.jboss.joinpoint.spi.Joinpoint;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.spi.config.KernelConfigurator;
@@ -32,6 +33,9 @@
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
 import org.jboss.kernel.spi.dependency.InstantiateKernelControllerContextAware;
+import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.scope.CommonLevels;
 
 /**
  * InstantiateAction.
@@ -39,8 +43,9 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class InstantiateAction extends InstallsAwareAction
+public class InstantiateAction extends AnnotationsAction
 {
+   @SuppressWarnings("deprecation")
    protected void installActionInternal(KernelControllerContext context) throws Throwable
    {
       KernelController controller = (KernelController) context.getController();
@@ -62,6 +67,21 @@
          {
             info = configurator.getBeanInfo(object.getClass(), metaData.getAccessMode());
             context.setBeanInfo(info);
+
+            // update class scope with class info
+            ScopeInfo scopeInfo = context.getScopeInfo();
+            KernelMetaDataRepository repository = kernel.getMetaDataRepository();
+            // remove old context
+            repository.removeMetaData(context);
+            // create new scope key
+            ScopeKey scopeKey = new ScopeKey(scopeInfo.getScope().getScopes());
+            scopeKey.addScope(CommonLevels.CLASS, info.getClassInfo().getType());
+            scopeInfo.setScope(scopeKey);
+            // re-register
+            repository.addMetaData(context);
+
+            // handle custom annotations
+            applyAnnotations(context);
          }
 
          DependencyInfo dependencyInfo = context.getDependencyInfo();
@@ -82,15 +102,11 @@
          Object object = context.getTarget();
          if (object != null)
          {
-//            if (object instanceof KernelControllerContextAware)
-//               ((KernelControllerContextAware) object).unsetKernelControllerContext(context);
-
             KernelController controller = (KernelController) context.getController();
             DependencyInfo dependencyInfo = context.getDependencyInfo();
             if (dependencyInfo != null && dependencyInfo.isAutowireCandidate())
                controller.removeInstantiatedContext(context);
          }
-
       }
       catch (Throwable ignored)
       {

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/AfterInstantiateTester.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/AfterInstantiateTester.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/AfterInstantiateTester.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -0,0 +1,115 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.test.kernel.annotations.support;
+
+import java.util.Set;
+import java.io.PrintStream;
+
+import org.jboss.beans.metadata.api.annotations.Aliases;
+import org.jboss.beans.metadata.api.annotations.Demands;
+import org.jboss.beans.metadata.api.annotations.Demand;
+import org.jboss.beans.metadata.api.annotations.Supply;
+import org.jboss.beans.metadata.api.annotations.Depends;
+import org.jboss.beans.metadata.api.annotations.ExternalInstalls;
+import org.jboss.beans.metadata.api.annotations.ExternalInstall;
+import org.jboss.beans.metadata.api.annotations.ExternalUninstalls;
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.beans.metadata.api.annotations.Create;
+import org.jboss.beans.metadata.api.annotations.Start;
+import org.jboss.beans.metadata.api.annotations.Stop;
+import org.jboss.beans.metadata.api.annotations.Destroy;
+import org.jboss.beans.metadata.api.annotations.ValueFactory;
+import org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+import org.jboss.beans.metadata.api.annotations.InstallMethod;
+import org.jboss.beans.metadata.api.annotations.UninstallMethod;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+ at Aliases("qwert")
+ at Demands(@Demand("other"))
+ at Supply("qaz")
+ at Depends("other")
+ at ExternalInstalls(@ExternalInstall(bean = "other", method = "touch"))
+ at ExternalUninstalls(@ExternalInstall(bean = "other", method = "touch"))
+public class AfterInstantiateTester
+{
+   public static AfterInstantiateTester getTester()
+   {
+      return new AfterInstantiateTester();  
+   }
+
+   @Inject(bean = "other", property = "currentTime")
+   public int time;
+
+   @Create
+   public void createMe()
+   {
+   }
+
+   @Start
+   public void startMe()
+   {
+   }
+
+   @Stop
+   public void stopMe()
+   {
+   }
+
+   @Destroy
+   public void destroyMe()
+   {
+   }
+
+   @ValueFactory(bean = "other", method = "getSystemErr")
+   public void setSystemErr(PrintStream err)
+   {
+   }
+
+   @Install
+   @Uninstall
+   public void setVerifiers(Set<AfterInstallVerifier<?>> verifiers)
+   {
+   }
+
+   @Install
+   public void addVerifier(AfterInstallVerifier<?> verifier)
+   {      
+   }
+
+   @Uninstall
+   public void removeVerifier(AfterInstallVerifier<?> verifier)
+   {
+   }
+
+   @InstallMethod
+   public void applyAfterAtInstall()
+   {
+   }
+
+   @UninstallMethod
+   public void applyAfterAtUninstall()
+   {
+   }
+}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/OtherVerifier.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/OtherVerifier.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/OtherVerifier.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -0,0 +1,74 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.test.kernel.annotations.support;
+
+import java.util.Set;
+import java.io.PrintStream;
+
+import org.jboss.beans.metadata.api.annotations.Aliases;
+import org.jboss.beans.metadata.api.annotations.Demands;
+import org.jboss.beans.metadata.api.annotations.Demand;
+import org.jboss.beans.metadata.api.annotations.Supply;
+import org.jboss.beans.metadata.api.annotations.Depends;
+import org.jboss.beans.metadata.api.annotations.ExternalInstalls;
+import org.jboss.beans.metadata.api.annotations.ExternalInstall;
+import org.jboss.beans.metadata.api.annotations.ExternalUninstalls;
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.beans.metadata.api.annotations.Create;
+import org.jboss.beans.metadata.api.annotations.Start;
+import org.jboss.beans.metadata.api.annotations.Stop;
+import org.jboss.beans.metadata.api.annotations.Destroy;
+import org.jboss.beans.metadata.api.annotations.ValueFactory;
+import org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+import org.jboss.beans.metadata.api.annotations.InstallMethod;
+import org.jboss.beans.metadata.api.annotations.UninstallMethod;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class OtherVerifier implements AfterInstallVerifier<Object>
+{
+   public void verify(Object target)
+   {
+   }
+
+   public Class<Object> getTargetClass()
+   {
+      return Object.class;
+   }
+
+   public PrintStream getSystemErr()
+   {
+      return System.err;
+   }
+
+   public long getCurrentTime()
+   {
+      return System.currentTimeMillis();
+   }
+
+   public void touch()
+   {
+      System.out.println(getCurrentTime());
+   }
+}
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractBeanAnnotationAdapterTest.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractBeanAnnotationAdapterTest.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractBeanAnnotationAdapterTest.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -32,6 +32,7 @@
 import org.jboss.kernel.plugins.dependency.AbstractKernelController;
 import org.jboss.kernel.plugins.dependency.DescribeAction;
 import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.spi.config.KernelConfig;
 
 /**
@@ -81,7 +82,7 @@
 
       protected void install(ControllerContext context, ControllerState fromState, ControllerState toState) throws Throwable
       {
-         if (ControllerState.DESCRIBED.equals(toState))
+         if (ControllerState.DESCRIBED.equals(toState) && (context instanceof KernelControllerContext))
             describe.install(context);
          else
             super.install(context, fromState, toState);
@@ -89,7 +90,7 @@
 
       protected void uninstall(ControllerContext context, ControllerState fromState, ControllerState toState)
       {
-         if (ControllerState.DESCRIBED.equals(fromState))
+         if (ControllerState.DESCRIBED.equals(fromState) && (context instanceof KernelControllerContext))
             describe.uninstall(context);
          else
             super.uninstall(context, fromState, toState);

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstantiateAnnotationsTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstantiateAnnotationsTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstantiateAnnotationsTestCase.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -0,0 +1,129 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.test.kernel.annotations.test;
+
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.Test;
+import org.jboss.beans.info.spi.BeanAccessMode;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.CallbackMetaData;
+import org.jboss.beans.metadata.spi.InstallMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapter;
+import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapterFactory;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.kernel.annotations.support.AfterInstantiateTester;
+import org.jboss.test.kernel.annotations.support.OtherVerifier;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class AfterInstantiateAnnotationsTestCase extends AbstractBeanAnnotationAdapterTest
+{
+   public AfterInstantiateAnnotationsTestCase(String name)
+   {
+      super(name);
+   }
+
+   protected BeanAnnotationAdapter getBeanAnnotationAdapterClass()
+   {
+      return BeanAnnotationAdapterFactory.getInstance().getBeanAnnotationAdapter();
+   }
+
+   public static Test suite()
+   {
+      return suite(AfterInstantiateAnnotationsTestCase.class);
+   }
+
+   public void testAfterInstantiationBeanInfo() throws Throwable
+   {
+      KernelController controller = getController();
+      // other
+      KernelControllerContext occ = controller.install(new AbstractBeanMetaData("other", OtherVerifier.class.getName()));
+      assertNotNull(occ);
+      Object tcc = occ.getTarget();
+      assertNotNull(tcc);
+
+      // tester
+      AbstractBeanMetaData abmd = new AbstractBeanMetaData();
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(abmd);
+      builder.setName("tester");
+      builder.setAccessMode(BeanAccessMode.ALL);
+      builder.setFactoryClass(AfterInstantiateTester.class.getName());
+      builder.setFactoryMethod("getTester");
+
+      KernelControllerContext kcc = controller.install(builder.getBeanMetaData());
+      try
+      {
+         assertNotNull(kcc);
+         BeanMetaData beanMetaData = kcc.getBeanMetaData();
+         // test aliases
+         assertNotNull(controller.getContext("qwert", null));
+         // propertys
+         Set<PropertyMetaData> properties = beanMetaData.getProperties();
+         assertNotNull(properties);
+         assertEquals(2, properties.size());
+         // lifecycle
+         LifecycleMetaData create = beanMetaData.getCreate();
+         assertNotNull(create);
+         assertEquals("createMe", create.getMethodName());
+         LifecycleMetaData start = beanMetaData.getStart();
+         assertNotNull(start);
+         assertEquals("startMe", start.getMethodName());
+         LifecycleMetaData stop = beanMetaData.getStop();
+         assertNotNull(stop);
+         assertEquals("stopMe", stop.getMethodName());
+         LifecycleMetaData destroy = beanMetaData.getDestroy();
+         assertNotNull(destroy);
+         assertEquals("destroyMe", destroy.getMethodName());
+         // callbacks
+         List<CallbackMetaData> incallbacks = beanMetaData.getInstallCallbacks();
+         assertNotNull(incallbacks);
+         assertEquals(2, incallbacks.size());
+         List<CallbackMetaData> uncallbacks = beanMetaData.getUninstallCallbacks();
+         assertNotNull(uncallbacks);
+         assertEquals(2, uncallbacks.size());
+         // installs
+         List<InstallMetaData> installs = beanMetaData.getInstalls();
+         assertNotNull(installs);
+         assertEquals(2, installs.size());
+         List<InstallMetaData> uninstalls = beanMetaData.getUninstalls();
+         assertNotNull(uninstalls);
+         assertEquals(2, uninstalls.size());
+
+         Object tkcc = kcc.getTarget();
+         assertNotNull(tkcc);
+         AfterInstantiateTester tester = assertInstanceOf(tkcc, AfterInstantiateTester.class);
+         assertTrue(tester.time != 0);
+      }
+      finally
+      {
+         controller.uninstall(kcc.getName());
+      }
+   }
+}

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AnnotationSupportTestSuite.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AnnotationSupportTestSuite.java	2008-03-25 15:35:05 UTC (rev 71247)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AnnotationSupportTestSuite.java	2008-03-25 15:39:42 UTC (rev 71248)
@@ -45,6 +45,7 @@
       suite.addTest(FactoryMethodXMLTestCase.suite());
       suite.addTest(FactoryMethodBadTestCase.suite());
       suite.addTest(CleanupAnnotationTestCase.suite());
+      suite.addTest(AfterInstantiateAnnotationsTestCase.suite());
 
       return suite;
    }




More information about the jboss-cvs-commits mailing list