[jboss-cvs] JBossAS SVN: r101109 - in projects/kernel/trunk/kernel/src: test/java/org/jboss/test/kernel/dependency/test and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Feb 18 06:22:27 EST 2010


Author: kabir.khan at jboss.com
Date: 2010-02-18 06:22:27 -0500 (Thu, 18 Feb 2010)
New Revision: 101109

Added:
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/UninstallNoOptionalContextDependencyTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/support/LoggerDecorator.java
Modified:
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
Log:
[JBKERNEL-100] Check for null values in ungetValue()

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java	2010-02-18 06:28:44 UTC (rev 101108)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java	2010-02-18 11:22:27 UTC (rev 101109)
@@ -319,10 +319,13 @@
          ControllerState state = dependentState;
          if (state == null)
             state = ControllerState.INSTALLED;
-         ControllerContext lookup = getControllerContext(getUnderlyingValue(), state);
-         if (lookup != null)
+         if (getUnderlyingValue() != null)
          {
-            return ungetTarget(context, lookup);
+            ControllerContext lookup = getControllerContext(getUnderlyingValue(), state);
+            if (lookup != null)
+            {
+               return ungetTarget(context, lookup);
+            }
          }
       }
 

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2010-02-18 06:28:44 UTC (rev 101108)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2010-02-18 11:22:27 UTC (rev 101109)
@@ -272,11 +272,14 @@
    {
       if (getUnderlyingValue() == null)
       {
-         ControllerContext lookup = item.getControllerContext(context.getController());
-         if (lookup != null)
+         if (context != null && item != null)
          {
-            ungetTarget(context, lookup);
-            return null;
+            ControllerContext lookup = item.getControllerContext(context.getController());
+            if (lookup != null)
+            {
+               ungetTarget(context, lookup);
+               return null;
+            }
          }
       }
       return super.ungetValue(info, cl);

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/UninstallNoOptionalContextDependencyTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/UninstallNoOptionalContextDependencyTestCase.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/UninstallNoOptionalContextDependencyTestCase.java	2010-02-18 11:22:27 UTC (rev 101109)
@@ -0,0 +1,148 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.dependency.test;
+
+import java.lang.reflect.Field;
+import java.util.Map;
+
+import junit.framework.Test;
+
+import org.jboss.beans.metadata.api.model.InjectOption;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.dependency.plugins.action.ControllerContextAction;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.plugins.dependency.ConfigureAction;
+import org.jboss.kernel.plugins.dependency.KernelControllerContextAction;
+import org.jboss.kernel.plugins.dependency.KernelControllerContextActions;
+import org.jboss.logging.Logger;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.kernel.dependency.support.SimpleBeanImpl;
+import org.jboss.test.kernel.dependency.support.SimpleBeanWithDependency;
+import org.jboss.test.kernel.dependency.support.SimpleBeanWithDependencyImpl;
+import org.jboss.test.kernel.deployment.support.LoggerDecorator;
+
+/**
+ * Constructor Dependency Test Case.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 64400 $
+ */
+public class UninstallNoOptionalContextDependencyTestCase extends OldAbstractKernelDependencyTest
+{
+   public static Test suite()
+   {
+      return suite(UninstallNoOptionalContextDependencyTestCase.class);
+   }
+
+   public UninstallNoOptionalContextDependencyTestCase(String name) throws Throwable
+   {
+      super(name);
+   }
+
+   public UninstallNoOptionalContextDependencyTestCase(String name, boolean xmltest) throws Throwable
+   {
+      super(name, xmltest);
+   }
+
+   public void testUninstallOptionalInjectionNotPresent() throws Throwable
+   {
+      //Get hold of the ConfigureAction instance - UGLY but needed so we can replace its logger :-)
+      KernelControllerContextActions actions = KernelControllerContextActions.getInstance();
+      Field field =  getField(actions.getClass().getSuperclass(), "actions");
+      Map<ControllerState, ControllerContextAction> actionsMap = (Map<ControllerState, ControllerContextAction>)field.get(actions);
+      ConfigureAction action = (ConfigureAction)actionsMap.get(ControllerState.CONFIGURED);
+      Class<?> clazz = action.getClass();
+      while (clazz != null && clazz != KernelControllerContextAction.class)
+         clazz = clazz.getSuperclass();
+      assertNotNull(clazz);
+      field = getField(clazz, "log");
+
+      Logger old = (Logger) field.get(action);
+      LoggerDecorator newLogger = new LoggerDecorator(old);
+      try
+      {
+         field.set(action, newLogger);
+         uninstallOptionalInjectionNotPresent();
+         ControllerContext context1 = assertInstall(0, "Name1");
+         
+         SimpleBeanWithDependency bean1 = (SimpleBeanWithDependency) context1.getTarget();
+         assertNotNull(bean1);
+         assertNull(bean1.getSimpleBean());
+         
+         uninstall("Name1");
+         
+         assertFalse(newLogger.isWarnErrorCalled());
+      }
+      finally
+      {
+         field.set(action, old);
+      }
+   }
+
+   public void uninstallOptionalInjectionNotPresent() throws Throwable
+   {
+      BeanMetaDataBuilder builder1 = BeanMetaDataBuilder.createBuilder("Name1", SimpleBeanWithDependencyImpl.class.getName());
+      AbstractInjectionValueMetaData injection = new AbstractInjectionValueMetaData();
+      injection.setInjectionOption(InjectOption.OPTIONAL);
+      builder1.addPropertyMetaData("simpleBean", injection);
+      
+      BeanMetaDataBuilder builder2 = BeanMetaDataBuilder.createBuilder("Name2", SimpleBeanImpl.class.getName());
+
+      setBeanMetaDatas(new BeanMetaData[] {builder1.getBeanMetaData(), builder2.getBeanMetaData()});
+   }
+
+   public static Field getField(Class<?> clazz, String name)
+   {
+      Field field = null;
+       
+      while (field == null && clazz != null)
+      {
+         try
+         {
+            field = clazz.getDeclaredField(name);
+            field.setAccessible(true);
+            break;
+         }
+         catch (Exception e)
+         {
+         }
+         clazz = clazz.getSuperclass();
+      }
+
+      if (field == null)
+         throw new IllegalStateException("No field called '" + name + "' in " + clazz.getName());
+      return field; 
+   }
+
+   /**
+    * Don't use security for this test
+    */
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      AbstractTestDelegate delegate = new AbstractTestDelegate(clazz);
+      return delegate;
+   }
+
+}
\ No newline at end of file

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/support/LoggerDecorator.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/support/LoggerDecorator.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/support/LoggerDecorator.java	2010-02-18 11:22:27 UTC (rev 101109)
@@ -0,0 +1,451 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.deployment.support;
+
+import java.lang.reflect.Field;
+
+import org.jboss.logging.Logger;
+import org.jboss.logging.LoggerPlugin;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class LoggerDecorator extends Logger
+{
+   private static final long serialVersionUID = 1L;
+   
+   Logger delegate;
+   boolean warnErrorCalled;
+   
+   
+   public LoggerDecorator(Logger delegate)
+   {
+      // FIXME LoggerDecorator constructor
+      super(delegate.getName());
+      this.delegate = delegate;
+   }
+
+   public boolean isWarnErrorCalled()
+   {
+      return warnErrorCalled;
+   }
+
+   /**
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#debug(java.lang.Object, java.lang.Throwable)
+    */
+   public void debug(Object message, Throwable t)
+   {
+      delegate.debug(message, t);
+   }
+
+   /**
+    * @param message
+    * @see org.jboss.logging.Logger#debug(java.lang.Object)
+    */
+   public void debug(Object message)
+   {
+      delegate.debug(message);
+   }
+
+   /**
+    * @param loggerFqcn
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#debug(java.lang.String, java.lang.Object, java.lang.Throwable)
+    */
+   public void debug(String loggerFqcn, Object message, Throwable t)
+   {
+      delegate.debug(loggerFqcn, message, t);
+   }
+
+   /**
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#debugf(java.lang.String, java.lang.Object[])
+    */
+   public void debugf(String format, Object... params)
+   {
+      delegate.debugf(format, params);
+   }
+
+   /**
+    * @param t
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#debugf(java.lang.Throwable, java.lang.String, java.lang.Object[])
+    */
+   public void debugf(Throwable t, String format, Object... params)
+   {
+      delegate.debugf(t, format, params);
+   }
+
+   /**
+    * @param obj
+    * @return
+    * @see java.lang.Object#equals(java.lang.Object)
+    */
+   public boolean equals(Object obj)
+   {
+      return delegate.equals(obj);
+   }
+
+   /**
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#error(java.lang.Object, java.lang.Throwable)
+    */
+   public void error(Object message, Throwable t)
+   {
+      delegate.error(message, t);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param message
+    * @see org.jboss.logging.Logger#error(java.lang.Object)
+    */
+   public void error(Object message)
+   {
+      delegate.error(message);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param loggerFqcn
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#error(java.lang.String, java.lang.Object, java.lang.Throwable)
+    */
+   public void error(String loggerFqcn, Object message, Throwable t)
+   {
+      delegate.error(loggerFqcn, message, t);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#errorf(java.lang.String, java.lang.Object[])
+    */
+   public void errorf(String format, Object... params)
+   {
+      delegate.errorf(format, params);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param t
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#errorf(java.lang.Throwable, java.lang.String, java.lang.Object[])
+    */
+   public void errorf(Throwable t, String format, Object... params)
+   {
+      delegate.errorf(t, format, params);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#fatal(java.lang.Object, java.lang.Throwable)
+    */
+   public void fatal(Object message, Throwable t)
+   {
+      delegate.fatal(message, t);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param message
+    * @see org.jboss.logging.Logger#fatal(java.lang.Object)
+    */
+   public void fatal(Object message)
+   {
+      delegate.fatal(message);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param loggerFqcn
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#fatal(java.lang.String, java.lang.Object, java.lang.Throwable)
+    */
+   public void fatal(String loggerFqcn, Object message, Throwable t)
+   {
+      delegate.fatal(loggerFqcn, message, t);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#fatalf(java.lang.String, java.lang.Object[])
+    */
+   public void fatalf(String format, Object... params)
+   {
+      delegate.fatalf(format, params);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param t
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#fatalf(java.lang.Throwable, java.lang.String, java.lang.Object[])
+    */
+   public void fatalf(Throwable t, String format, Object... params)
+   {
+      delegate.fatalf(t, format, params);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @return
+    * @see org.jboss.logging.Logger#getLoggerPlugin()
+    */
+   public LoggerPlugin getLoggerPlugin()
+   {
+      return delegate.getLoggerPlugin();
+   }
+
+   /**
+    * @return
+    * @see org.jboss.logging.Logger#getName()
+    */
+   public String getName()
+   {
+      return delegate.getName();
+   }
+
+   /**
+    * @return
+    * @see java.lang.Object#hashCode()
+    */
+   public int hashCode()
+   {
+      return delegate.hashCode();
+   }
+
+   /**
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#info(java.lang.Object, java.lang.Throwable)
+    */
+   public void info(Object message, Throwable t)
+   {
+      delegate.info(message, t);
+   }
+
+   /**
+    * @param message
+    * @see org.jboss.logging.Logger#info(java.lang.Object)
+    */
+   public void info(Object message)
+   {
+      delegate.info(message);
+   }
+
+   /**
+    * @param loggerFqcn
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#info(java.lang.String, java.lang.Object, java.lang.Throwable)
+    */
+   public void info(String loggerFqcn, Object message, Throwable t)
+   {
+      delegate.info(loggerFqcn, message, t);
+   }
+
+   /**
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#infof(java.lang.String, java.lang.Object[])
+    */
+   public void infof(String format, Object... params)
+   {
+      delegate.infof(format, params);
+   }
+
+   /**
+    * @param t
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#infof(java.lang.Throwable, java.lang.String, java.lang.Object[])
+    */
+   public void infof(Throwable t, String format, Object... params)
+   {
+      delegate.infof(t, format, params);
+   }
+
+   /**
+    * @return
+    * @deprecated
+    * @see org.jboss.logging.Logger#isDebugEnabled()
+    */
+   public boolean isDebugEnabled()
+   {
+      return delegate.isDebugEnabled();
+   }
+
+   /**
+    * @return
+    * @deprecated
+    * @see org.jboss.logging.Logger#isInfoEnabled()
+    */
+   public boolean isInfoEnabled()
+   {
+      return delegate.isInfoEnabled();
+   }
+
+   /**
+    * @return
+    * @see org.jboss.logging.Logger#isTraceEnabled()
+    */
+   public boolean isTraceEnabled()
+   {
+      return delegate.isTraceEnabled();
+   }
+
+   /**
+    * @return
+    * @see java.lang.Object#toString()
+    */
+   public String toString()
+   {
+      return delegate.toString();
+   }
+
+   /**
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#trace(java.lang.Object, java.lang.Throwable)
+    */
+   public void trace(Object message, Throwable t)
+   {
+      delegate.trace(message, t);
+   }
+
+   /**
+    * @param message
+    * @see org.jboss.logging.Logger#trace(java.lang.Object)
+    */
+   public void trace(Object message)
+   {
+      delegate.trace(message);
+   }
+
+   /**
+    * @param loggerFqcn
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#trace(java.lang.String, java.lang.Object, java.lang.Throwable)
+    */
+   public void trace(String loggerFqcn, Object message, Throwable t)
+   {
+      delegate.trace(loggerFqcn, message, t);
+   }
+
+   /**
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#tracef(java.lang.String, java.lang.Object[])
+    */
+   public void tracef(String format, Object... params)
+   {
+      delegate.tracef(format, params);
+   }
+
+   /**
+    * @param t
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#tracef(java.lang.Throwable, java.lang.String, java.lang.Object[])
+    */
+   public void tracef(Throwable t, String format, Object... params)
+   {
+      delegate.tracef(t, format, params);
+   }
+
+   /**
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#warn(java.lang.Object, java.lang.Throwable)
+    */
+   public void warn(Object message, Throwable t)
+   {
+      delegate.warn(message, t);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param message
+    * @see org.jboss.logging.Logger#warn(java.lang.Object)
+    */
+   public void warn(Object message)
+   {
+      delegate.warn(message);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param loggerFqcn
+    * @param message
+    * @param t
+    * @see org.jboss.logging.Logger#warn(java.lang.String, java.lang.Object, java.lang.Throwable)
+    */
+   public void warn(String loggerFqcn, Object message, Throwable t)
+   {
+      delegate.warn(loggerFqcn, message, t);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#warnf(java.lang.String, java.lang.Object[])
+    */
+   public void warnf(String format, Object... params)
+   {
+      delegate.warnf(format, params);
+      warnErrorCalled = true;
+   }
+
+   /**
+    * @param t
+    * @param format
+    * @param params
+    * @see org.jboss.logging.Logger#warnf(java.lang.Throwable, java.lang.String, java.lang.Object[])
+    */
+   public void warnf(Throwable t, String format, Object... params)
+   {
+      delegate.warnf(t, format, params);
+      warnErrorCalled = true;
+   }
+
+   
+}




More information about the jboss-cvs-commits mailing list