[jboss-cvs] JBossAS SVN: r88429 - in projects/microcontainer/trunk: kernel/src/main/java/org/jboss/beans/metadata/plugins and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri May 8 09:28:23 EDT 2009


Author: alesj
Date: 2009-05-08 09:28:23 -0400 (Fri, 08 May 2009)
New Revision: 88429

Added:
   projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTest.java
Removed:
   projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTestCase.java
Modified:
   projects/microcontainer/trunk/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/lazy/JBossAOPLazyInitializer.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLazyMetaData.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/AbstractLazyInitializer.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JDKLazyInitializer.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JavassistLazyInitializer.java
   projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JDKLazyInstantiationTestCase.java
   projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JavassistLazyInstantiationTestCase.java
Log:
Handle On_Demand via lazy beans.
TODO on On_Demand tests.

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/lazy/JBossAOPLazyInitializer.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/lazy/JBossAOPLazyInitializer.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/lazy/JBossAOPLazyInitializer.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -25,10 +25,11 @@
 
 import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
 import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory;
-import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.kernel.plugins.lazy.AbstractLazyInitializer;
+import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.metadata.spi.MetaData;
 
@@ -48,20 +49,21 @@
    public Object initializeProxy(Kernel kernel, String bean, boolean exposeClass, Set<String> interfaces, MetaData metaData) throws Throwable
    {
       KernelControllerContext context = getKernelControllerContext(kernel, bean);
-      BeanInfo beanInfo = context.getBeanInfo();
-      if (beanInfo == null)
-         throw new IllegalArgumentException("Cannot proxy factory beans.");
+      BeanMetaData bmd = context.getBeanMetaData();
+      KernelConfigurator configurator = kernel.getConfigurator();
+      ClassLoader cl = Configurator.getClassLoader(bmd);
 
+      // TODO - add lazy handler
       AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
       params.setMetaData(metaData);
       if (exposeClass)
       {
-         params.setProxiedClass(beanInfo.getClassInfo().getType());
+         Class<?> beanClass = getBeanClass(context, configurator, cl);
+         params.setProxiedClass(beanClass);
       }
       if (interfaces != null && interfaces.isEmpty() == false)
       {
-         ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
-         params.setInterfaces(getClasses(kernel.getConfigurator(), interfaces, cl));
+         params.setInterfaces(getClasses(configurator, interfaces, cl));
       }
 
       GeneratedAOPProxyFactory factory = new GeneratedAOPProxyFactory();

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLazyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLazyMetaData.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLazyMetaData.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -98,7 +98,8 @@
       constructor.setParameters(parameters);
       setConstructor(constructor);
 
-      vistor.addDependency(new AbstractDependencyItem(getName(), beanName, ControllerState.INSTANTIATED, ControllerState.DESCRIBED));
+      // we just need the original bean to be present --> Not_Installed state
+      vistor.addDependency(new AbstractDependencyItem(getName(), beanName, ControllerState.INSTANTIATED, ControllerState.NOT_INSTALLED));
       super.initialVisit(vistor);
    }
 

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/AbstractLazyInitializer.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/AbstractLazyInitializer.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/AbstractLazyInitializer.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -23,13 +23,17 @@
 
 import java.lang.reflect.Method;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.spi.lazy.LazyInitializer;
 import org.jboss.kernel.spi.registry.KernelBus;
@@ -51,6 +55,7 @@
       private String bean;
       private KernelBus bus;
       private Class<?> proxyClass;
+      private AtomicBoolean onDemandInitialized = new AtomicBoolean(false);
 
       protected AbstractInvokeHandler(String bean, KernelBus bus, Class<?> proxyClass)
       {
@@ -85,6 +90,32 @@
          if ("toString".equals(methodName))
             return bean + "Proxy";
 
+         if (onDemandInitialized.getAndSet(true) == false)
+         {
+            Kernel kernel = bus.getKernel();
+            KernelController controller = kernel.getController();
+            ControllerContext context = controller.getContext(bean, null);
+            if (context == null)
+               throw new IllegalArgumentException("No such context: " + bean);
+
+            if (ControllerState.INSTALLED.equals(context.getState()) == false)
+            {
+               ControllerMode mode = context.getMode();
+               if (ControllerMode.ON_DEMAND.equals(mode))
+               {
+                  controller.enableOnDemand(context);
+                  controller.change(context, ControllerState.INSTALLED);
+               }
+               else if (ControllerMode.MANUAL.equals(mode))
+               {
+                  controller.change(context, ControllerState.INSTALLED);
+               }
+            }
+
+            if (ControllerState.INSTALLED.equals(context.getState()) == false)
+               throw new IllegalArgumentException("Bean " + bean + " cannot be fully installed: " + context);
+         }
+
          if (isGetter(method))
          {
             return bus.get(bean, getLowerPropertyName(methodName));
@@ -180,21 +211,50 @@
    protected KernelControllerContext getKernelControllerContext(Kernel kernel, String bean)
    {
       Controller controller = kernel.getController();
-      ControllerContext context = controller.getContext(bean, ControllerState.DESCRIBED);
+      ControllerContext context = controller.getContext(bean, null);
       if (context == null)
-         throw new IllegalArgumentException("Should not be here, dependency failed.");
+         throw new IllegalArgumentException("Should not be here, dependency failed, no such context: " + bean);
       if (context instanceof KernelControllerContext == false)
          throw new IllegalArgumentException("Context not KernelControllerContext: " + context);
+
       return KernelControllerContext.class.cast(context);
    }
 
    /**
+    * Gte bean's class.
+    *
+    * @param context the kernel controller context
+    * @param configurator the configurator
+    * @param cl the classloader
+    * @return bean's class
+    * @throws Throwable for any error
+    */
+   protected Class<?> getBeanClass(KernelControllerContext context, KernelConfigurator configurator, ClassLoader cl) throws Throwable
+   {
+      BeanMetaData bmd = context.getBeanMetaData();
+
+      Class<?> beanClass = null;
+      String beanClassName = bmd.getBean();
+      if (beanClassName != null)
+         beanClass = configurator.getClassInfo(beanClassName, cl).getType();
+      else if (context.getBeanInfo() != null)
+         beanClass = context.getBeanInfo().getClassInfo().getType();
+
+      if (beanClass == null)
+         throw new IllegalArgumentException("Not enough info to get bean class: " + context);
+
+      return beanClass;
+   }
+
+   /**
     * Get bean info.
     *
     * @param kernel the kernel
     * @param bean the bean name
     * @return bean info instance
+    * @deprecated not used any more
     */
+   @Deprecated
    protected BeanInfo getBeanInfo(Kernel kernel, String bean)
    {
       KernelControllerContext context = getKernelControllerContext(kernel, bean);

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JDKLazyInitializer.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JDKLazyInitializer.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JDKLazyInitializer.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -21,14 +21,15 @@
 */
 package org.jboss.kernel.plugins.lazy;
 
-import java.lang.reflect.Proxy;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.util.Set;
 
-import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.spi.registry.KernelBus;
 
@@ -48,12 +49,13 @@
          throw new IllegalArgumentException("Null interfaces.");
 
       KernelControllerContext context = getKernelControllerContext(kernel, bean);
-      BeanInfo beanInfo = context.getBeanInfo();
-      if (beanInfo == null)
-         throw new IllegalArgumentException("Cannot proxy factory beans.");
-      LazyHandler lazyHandler = new LazyHandler(bean, kernel.getBus(), beanInfo.getClassInfo().getType());
-      ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
-      return Proxy.newProxyInstance(getClass().getClassLoader(), getClasses(kernel.getConfigurator(), interfaces, cl), lazyHandler);
+      BeanMetaData bmd = context.getBeanMetaData();
+      KernelConfigurator configurator = kernel.getConfigurator();
+      ClassLoader cl = Configurator.getClassLoader(bmd);
+      Class<?> beanClass = getBeanClass(context, configurator, cl);
+
+      LazyHandler lazyHandler = new LazyHandler(bean, kernel.getBus(), beanClass);
+      return Proxy.newProxyInstance(getClass().getClassLoader(), getClasses(configurator, interfaces, cl), lazyHandler);
    }
 
    /**

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JavassistLazyInitializer.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JavassistLazyInitializer.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/lazy/JavassistLazyInitializer.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -22,17 +22,18 @@
 package org.jboss.kernel.plugins.lazy;
 
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Set;
-import java.security.PrivilegedAction;
-import java.security.AccessController;
 
 import javassist.util.proxy.MethodFilter;
 import javassist.util.proxy.MethodHandler;
 import javassist.util.proxy.ProxyFactory;
 import javassist.util.proxy.ProxyObject;
-import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.spi.registry.KernelBus;
 
@@ -47,24 +48,24 @@
    public Object initializeProxy(Kernel kernel, String bean, boolean exposeClass, Set<String> interfaces) throws Throwable
    {
       KernelControllerContext context = getKernelControllerContext(kernel, bean);
-      BeanInfo beanInfo = context.getBeanInfo();
-      if (beanInfo == null)
-         throw new IllegalArgumentException("Cannot proxy factory beans.");
+      BeanMetaData bmd = context.getBeanMetaData();
+      KernelConfigurator configurator = kernel.getConfigurator();
+      ClassLoader cl = Configurator.getClassLoader(bmd);
+      Class<?> beanClass = getBeanClass(context, configurator, cl);
 
       ProxyFactory factory = new ProxyFactory();
       factory.setFilter(FINALIZE_FILTER);
       if (exposeClass)
       {
-         factory.setSuperclass(beanInfo.getClassInfo().getType());
+         factory.setSuperclass(beanClass);
       }
       if (interfaces != null && interfaces.size() > 0)
       {
-         ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
-         factory.setInterfaces(getClasses(kernel.getConfigurator(), interfaces, cl));
+         factory.setInterfaces(getClasses(configurator, interfaces, cl));
       }
       Class<?> proxyClass = getProxyClass(factory);
       ProxyObject proxy = (ProxyObject)proxyClass.newInstance();
-      proxy.setHandler(new LazyHandler(bean, kernel.getBus(), beanInfo.getClassInfo().getType()));
+      proxy.setHandler(new LazyHandler(bean, kernel.getBus(), beanClass));
       return proxy;
    }
 

Modified: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JDKLazyInstantiationTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JDKLazyInstantiationTestCase.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JDKLazyInstantiationTestCase.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -29,7 +29,7 @@
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
-public class JDKLazyInstantiationTestCase extends LazyInstantiationTestCase
+public class JDKLazyInstantiationTestCase extends LazyInstantiationTest
 {
    public JDKLazyInstantiationTestCase(String name)
    {

Modified: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JavassistLazyInstantiationTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JavassistLazyInstantiationTestCase.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/JavassistLazyInstantiationTestCase.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -29,7 +29,7 @@
  * 
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
-public class JavassistLazyInstantiationTestCase extends LazyInstantiationTestCase
+public class JavassistLazyInstantiationTestCase extends LazyInstantiationTest
 {
    public JavassistLazyInstantiationTestCase(String name)
    {

Copied: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTest.java (from rev 88335, projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTestCase.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTest.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTest.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -0,0 +1,123 @@
+/*
+* 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.lazy.test;
+
+import java.util.Collections;
+
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractDemandMetaData;
+import org.jboss.beans.metadata.plugins.AbstractLazyMetaData;
+import org.jboss.beans.metadata.spi.DemandMetaData;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.kernel.AbstractKernelTest;
+import org.jboss.test.kernel.lazy.support.IRare;
+import org.jboss.test.kernel.lazy.support.RareBean;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class LazyInstantiationTest extends AbstractKernelTest
+{
+   public LazyInstantiationTest(String name)
+   {
+      super(name);
+   }
+
+   /**
+    * Default setup w/o security manager enabled
+    *
+    * @param clazz the class
+    * @return the delegate
+    * @throws Exception for any error
+    */
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      return new AbstractTestDelegate(clazz);
+   }
+
+   protected abstract String getFactoryClassName();
+
+   public void testLazy() throws Throwable
+   {
+      Kernel kernel = bootstrap();
+      KernelController controller = kernel.getController();
+
+      AbstractBeanMetaData bean = new AbstractBeanMetaData("bean", RareBean.class.getName());
+      bean.setMode(ControllerMode.MANUAL);
+      DemandMetaData demand = new AbstractDemandMetaData("foobar");
+      ((AbstractDemandMetaData)demand).setWhenRequired(ControllerState.INSTANTIATED);
+      bean.setDemands(Collections.singleton(demand));
+
+      KernelControllerContext beanContext = controller.install(bean);
+      controller.change(beanContext, ControllerState.NOT_INSTALLED);
+
+      ModifiedLazyMetaData lazy = new ModifiedLazyMetaData("bean", getFactoryClassName());
+      lazy.setInterfaces(Collections.singleton(IRare.class.getName()));
+      KernelControllerContext lazyContext = controller.install(lazy);
+
+      assertNotNull(lazyContext);
+      assertEquals(ControllerState.INSTALLED, lazyContext.getState());
+
+      controller.change(beanContext, ControllerState.DESCRIBED);
+      controller.change(lazyContext, ControllerState.INSTALLED);
+
+      IRare lazyRare = (IRare)lazyContext.getTarget();
+      assertNotNull(lazyRare);
+
+      try
+      {
+         lazyRare.getHits();
+         throw new RuntimeException("Should not be here.");
+      }
+      catch(Throwable t)
+      {
+         assertInstanceOf(t, IllegalArgumentException.class);
+      }
+
+      controller.install(new AbstractBeanMetaData("foobar", Object.class.getName()));
+      controller.change(beanContext, ControllerState.INSTALLED);
+
+      assertEquals(0, lazyRare.getHits());
+      lazyRare.setHits(10);
+      assertEquals(5, lazyRare.checkHits(15));
+
+      controller.uninstall(beanContext.getName());
+      assertEquals(ControllerState.DESCRIBED, lazyContext.getState());
+   }
+
+   private class ModifiedLazyMetaData extends AbstractLazyMetaData
+   {
+      /** The serialVersionUID */
+      private static final long serialVersionUID = 1L;
+
+      public ModifiedLazyMetaData(String beanName, String factoryClassName)
+      {
+         super(beanName);
+         setFactoryClassName(factoryClassName);
+      }
+   }
+}

Deleted: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTestCase.java	2009-05-08 13:26:24 UTC (rev 88428)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/lazy/test/LazyInstantiationTestCase.java	2009-05-08 13:28:23 UTC (rev 88429)
@@ -1,117 +0,0 @@
-/*
-* 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.lazy.test;
-
-import java.util.Collections;
-
-import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
-import org.jboss.beans.metadata.plugins.AbstractLazyMetaData;
-import org.jboss.dependency.spi.ControllerMode;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.kernel.Kernel;
-import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.test.AbstractTestDelegate;
-import org.jboss.test.kernel.AbstractKernelTest;
-import org.jboss.test.kernel.lazy.support.IRare;
-import org.jboss.test.kernel.lazy.support.RareBean;
-
-/**
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public abstract class LazyInstantiationTestCase extends AbstractKernelTest
-{
-   public LazyInstantiationTestCase(String name)
-   {
-      super(name);
-   }
-
-   /**
-    * Default setup w/o security manager enabled
-    *
-    * @param clazz the class
-    * @return the delegate
-    * @throws Exception for any error
-    */
-   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
-   {
-      return new AbstractTestDelegate(clazz);
-   }
-
-   protected abstract String getFactoryClassName();
-
-   public void testLazy() throws Throwable
-   {
-      Kernel kernel = bootstrap();
-      KernelController controller = kernel.getController();
-
-      AbstractBeanMetaData bean = new AbstractBeanMetaData("bean", RareBean.class.getName());
-      bean.setMode(ControllerMode.MANUAL);
-
-      KernelControllerContext beanContext = controller.install(bean);
-      controller.change(beanContext, ControllerState.NOT_INSTALLED);
-
-      ModifiedLazyMetaData lazy = new ModifiedLazyMetaData("bean", getFactoryClassName());
-      lazy.setInterfaces(Collections.singleton(IRare.class.getName()));
-      KernelControllerContext lazyContext = controller.install(lazy);
-
-      assertNotNull(lazyContext);
-      assertEquals(ControllerState.DESCRIBED, lazyContext.getState());
-
-      controller.change(beanContext, ControllerState.DESCRIBED);
-      controller.change(lazyContext, ControllerState.INSTALLED);
-
-      IRare lazyRare = (IRare)lazyContext.getTarget();
-      assertNotNull(lazyRare);
-
-      try
-      {
-         lazyRare.getHits();
-         throw new RuntimeException("Should not be here.");
-      }
-      catch(Throwable t)
-      {
-         assertInstanceOf(t, IllegalArgumentException.class);
-      }
-
-      controller.change(beanContext, ControllerState.INSTALLED);
-
-      assertEquals(0, lazyRare.getHits());
-      lazyRare.setHits(10);
-      assertEquals(5, lazyRare.checkHits(15));
-
-      controller.change(beanContext, ControllerState.PRE_INSTALL);
-      assertEquals(ControllerState.DESCRIBED, lazyContext.getState());
-   }
-
-   private class ModifiedLazyMetaData extends AbstractLazyMetaData
-   {
-      /** The serialVersionUID */
-      private static final long serialVersionUID = 1L;
-
-      public ModifiedLazyMetaData(String beanName, String factoryClassName)
-      {
-         super(beanName);
-         setFactoryClassName(factoryClassName);
-      }
-   }
-}




More information about the jboss-cvs-commits mailing list