[jboss-cvs] JBossAS SVN: r81671 - in projects/microcontainer/branches/Branch_2_0/kernel/src: main/java/org/jboss/kernel/plugins/dependency and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Nov 26 16:34:03 EST 2008
Author: alesj
Date: 2008-11-26 16:34:03 -0500 (Wed, 26 Nov 2008)
New Revision: 81671
Added:
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/NullifyTestBean1.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/NullifyTestCase.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/NullifyTestCase.xml
Modified:
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ConfigureAction.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java
Log:
Port 396 changes.
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java 2008-11-26 21:28:44 UTC (rev 81670)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java 2008-11-26 21:34:03 UTC (rev 81671)
@@ -155,9 +155,11 @@
{
if (value instanceof AbstractTypeMetaData)
{
- return ((AbstractTypeMetaData)value).getType();
+ String valueType = ((AbstractTypeMetaData)value).getType();
+ if (valueType != null)
+ return valueType;
}
- return null;
+ return type;
}
public boolean isPreInstantiate()
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ConfigureAction.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ConfigureAction.java 2008-11-26 21:28:44 UTC (rev 81670)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ConfigureAction.java 2008-11-26 21:34:03 UTC (rev 81671)
@@ -78,10 +78,8 @@
Set<PropertyMetaData> propertys = metaData.getProperties();
if (propertys != null && propertys.isEmpty() == false)
{
- ClassLoader cl = null;
- if (nullify == false)
- cl = Configurator.getClassLoader(metaData);
-
+ ClassLoader cl = Configurator.getClassLoader(metaData);
+
for(PropertyMetaData property : propertys)
{
dispatchSetProperty(context, property, nullify, info, target, cl);
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java 2008-11-26 21:28:44 UTC (rev 81670)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java 2008-11-26 21:34:03 UTC (rev 81671)
@@ -22,15 +22,20 @@
package org.jboss.kernel.plugins.dependency;
import java.security.PrivilegedExceptionAction;
+import java.util.Set;
import org.jboss.beans.info.plugins.BeanInfoUtil;
import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.beans.info.spi.PropertyInfo;
import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.config.KernelConfigurator;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
import org.jboss.logging.Logger;
+import org.jboss.reflect.spi.MethodInfo;
import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.reflect.spi.PrimitiveInfo;
/**
* PropertyDispatchWrapper.
@@ -70,22 +75,35 @@
{
String name = property.getName();
PropertyInfo propertyInfo = BeanInfoUtil.getPropertyInfo(beanInfo, target, name);
- TypeInfo typeInfo = propertyInfo.getType();
+ TypeInfo propertyTypeInfo = propertyInfo.getType();
+ TypeInfo typeInfo = propertyTypeInfo;
+ if (typeInfo == null)
+ typeInfo = getTypeInfo();
+
if (nullify)
{
- // there might be nested property info
- if (typeInfo != null && typeInfo.isPrimitive() == false)
+ if (typeInfo != null)
{
- try
+ if (typeInfo.isPrimitive() == false)
{
- beanInfo.setProperty(target, name, null);
+ try
+ {
+ if (propertyTypeInfo != null)
+ beanInfo.setProperty(target, name, null);
+ else // e.g. NestedPropertyInfo
+ nullifyByMatchingType(propertyInfo.getUpperName(), typeInfo);
+ }
+ catch (Throwable t)
+ {
+ if (log.isTraceEnabled())
+ log.trace("Ignored for " + target + "." + name, t);
+ }
}
- catch (Throwable t)
- {
- if (log.isTraceEnabled())
- log.trace("Ignored for " + target + "." + name, t);
- }
}
+ else
+ {
+ log.warn("Cannot properly nullify property: " + property + ", beanInfo: " + beanInfo);
+ }
}
else
{
@@ -98,6 +116,54 @@
}
/**
+ * Try to get type info from property's class.
+ *
+ * @return type info
+ * @throws Throwable for any error
+ */
+ protected TypeInfo getTypeInfo() throws Throwable
+ {
+ String className = property.getType();
+ if (className == null)
+ return null;
+
+ Kernel kernel = context.getKernel();
+ KernelConfigurator configurator = kernel.getConfigurator();
+ return configurator.getTypeInfo(className, cl);
+ }
+
+ /**
+ * Nullify by matching type on .
+ *
+ * @param name the property name
+ * @param typeInfo the type info
+ * @throws Throwable for any error
+ */
+ protected void nullifyByMatchingType(String name, TypeInfo typeInfo) throws Throwable
+ {
+ // TODO - remove this Character.toUpperCase once Reflect is updated
+ String upperName = "set" + Character.toUpperCase(name.charAt(0));
+ if (name.length() > 1)
+ upperName += name.substring(1);
+
+ Set<MethodInfo> methods = beanInfo.getMethods();
+ for (MethodInfo minfo : methods)
+ {
+ String miName = minfo.getName();
+ if (upperName.equals(miName))
+ {
+ TypeInfo returnType = minfo.getReturnType();
+ TypeInfo[] parameters = minfo.getParameterTypes();
+ if (parameters.length == 1 && PrimitiveInfo.VOID.equals(returnType) && typeInfo.equals(parameters[0]))
+ {
+ minfo.invoke(target, new Object[]{null});
+ return;
+ }
+ }
+ }
+ }
+
+ /**
* Validate value injection.
* Use jsr303 constraints.
*
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/NullifyTestBean1.java (from rev 81669, projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/support/NullifyTestBean1.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/NullifyTestBean1.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/NullifyTestBean1.java 2008-11-26 21:34:03 UTC (rev 81671)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, 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.util.Map;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class NullifyTestBean1
+{
+ public void setSomething(Set set)
+ {
+ System.out.println(set);
+ }
+
+ public void setSomething(Map map)
+ {
+ System.out.println(map);
+ }
+}
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/NullifyTestCase.java (from rev 81669, projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/test/NullifyTestCase.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/NullifyTestCase.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/NullifyTestCase.java 2008-11-26 21:34:03 UTC (rev 81671)
@@ -0,0 +1,174 @@
+/*
+* 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.deployment.test;
+
+import java.util.Map;
+
+import junit.framework.Test;
+import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap;
+import org.jboss.kernel.plugins.config.property.PropertyKernelConfig;
+import org.jboss.kernel.plugins.dependency.AbstractKernelController;
+import org.jboss.kernel.plugins.dependency.ConfigureAction;
+import org.jboss.kernel.spi.config.KernelConfig;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.BaseTestCase;
+import org.jboss.test.kernel.deployment.support.NullifyTestBean1;
+
+/**
+ * NullifyTestCase
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class NullifyTestCase extends BaseTestCase
+{
+ private KernelController controller;
+ private ThrowableConfigureAction describe = new ThrowableConfigureAction();
+
+ public NullifyTestCase(String name) throws Throwable
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return suite(NullifyTestCase.class);
+ }
+
+ public void testNullifying() throws Throwable
+ {
+ KernelController controller = getController();
+ describe.error = false;
+
+ AbstractBeanMetaData abmd = new AbstractBeanMetaData("Bean1", NullifyTestBean1.class.getName());
+ BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(abmd);
+ AbstractPropertyMetaData property = new AbstractPropertyMetaData("something", builder.createMap(null, String.class.getName(), String.class.getName()));
+ property.setPropertyType(Map.class.getName());
+ abmd.addProperty(property);
+
+ KernelControllerContext context = controller.install(builder.getBeanMetaData());
+ controller.change(context, ControllerState.INSTANTIATED);
+ assertEquals(ControllerState.INSTANTIATED, context.getState());
+ assertFalse(describe.error);
+ }
+
+ // -----------------------
+
+ private class ThrowableConfigureAction extends ConfigureAction
+ {
+ public boolean error;
+
+ @Override
+ protected void setAttributes(KernelControllerContext context, Object target, BeanInfo info, BeanMetaData metaData, boolean nullify) throws Throwable
+ {
+ try
+ {
+ super.setAttributes(context, target, info, metaData, nullify);
+ }
+ catch (Throwable t)
+ {
+ error = true;
+ throw t;
+ }
+ }
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ controller = createController();
+ }
+
+ protected void tearDown() throws Exception
+ {
+ if (controller != null)
+ controller.shutdown();
+ controller = null;
+
+ super.tearDown();
+ }
+
+ protected KernelController createController() throws Exception
+ {
+ // bootstrap
+ KernelConfig config = createKernelConfig();
+ BasicBootstrap bootstrap = config != null ? new BasicBootstrap(config) : new BasicBootstrap();
+ bootstrap.run();
+ Kernel kernel = bootstrap.getKernel();
+ return kernel.getController();
+ }
+
+ protected KernelConfig createKernelConfig()
+ {
+ return new TestKernelConfig();
+ }
+
+ protected KernelController getController()
+ {
+ return controller;
+ }
+
+ private class TestKernelConfig extends PropertyKernelConfig
+ {
+ public TestKernelConfig()
+ {
+ super(null);
+ }
+
+ public KernelController createKernelController() throws Throwable
+ {
+ return new TestController();
+ }
+ }
+
+ private class TestController extends AbstractKernelController
+ {
+ public TestController() throws Exception
+ {
+ }
+
+ protected void install(ControllerContext context, ControllerState fromState, ControllerState toState) throws Throwable
+ {
+ if (ControllerState.CONFIGURED.equals(toState) && (context instanceof KernelControllerContext))
+ describe.install(context);
+ else
+ super.install(context, fromState, toState);
+ }
+
+ protected void uninstall(ControllerContext context, ControllerState fromState, ControllerState toState)
+ {
+ if (ControllerState.CONFIGURED.equals(fromState) && (context instanceof KernelControllerContext))
+ describe.uninstall(context);
+ else
+ super.uninstall(context, fromState, toState);
+ }
+ }
+}
\ No newline at end of file
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/NullifyTestCase.xml (from rev 81669, projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/NullifyTestCase.xml)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/NullifyTestCase.xml (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/NullifyTestCase.xml 2008-11-26 21:34:03 UTC (rev 81671)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="Bean1" class="org.jboss.test.kernel.deployment.support.NullifyTestBean1">
+ <property name="something" class="java.util.Map">
+ <map keyClass="java.lang.String" valueClass="java.lang.String">
+ <entry>
+ <key>1</key>
+ <value>2</value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+
+</deployment>
More information about the jboss-cvs-commits
mailing list