[jboss-cvs] JBossAS SVN: r73531 - in projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins: dependency and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue May 20 10:48:50 EDT 2008


Author: alesj
Date: 2008-05-20 10:48:50 -0400 (Tue, 20 May 2008)
New Revision: 73531

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/BeanValidatorBridge.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ConfigureAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstantiateAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java
Log:
Bean validation.

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java	2008-05-20 14:46:33 UTC (rev 73530)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -129,7 +129,7 @@
                for(Annotation annotation : annotations)
                {
                   Annotation mdAnnotation = metaData.getAnnotation(annotation.annotationType());
-                  if (mdAnnotation == null)
+                  if (mdAnnotation == null || annotation.equals(mdAnnotation) == false)
                   {
                      match = false;
                      break;

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java	2008-05-20 14:46:33 UTC (rev 73530)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -41,12 +41,14 @@
 import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.reflect.spi.MethodInfo;
 import org.jboss.util.JBossStringBuilder;
 
 /**
  * Controller context.
  *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
  * @version $Revision$
  */
 public class AbstractKernelControllerContext extends AbstractControllerContext implements KernelControllerContext
@@ -273,6 +275,7 @@
 
    public Object invoke(final String name, final Object[] parameters, final String[] signature) throws Throwable
    {
+      validateMethodValues(name, signature, parameters);
       return getInfo().invoke(getTarget(), name, signature, parameters);
    }
 
@@ -284,4 +287,23 @@
          sm.checkPermission(GET_CLASSLOADER_PERMISSION);
       return Configurator.getClassLoader(getBeanMetaData());
    }
+
+   /**
+    * Validate method invocation.
+    * Use jsr303 constraints.
+    *
+    * @param name the method name
+    * @param signature the method signature
+    * @param paramaters the parameter values
+    * @throws Throwable for any error
+    */
+   protected void validateMethodValues(String name, String[] signature, Object[] paramaters) throws Throwable
+   {
+      BeanValidatorBridge bridge = KernelControllerContextAction.getBeanValidatorBridge(this);
+      if (bridge != null)
+      {
+         MethodInfo methodInfo = Configurator.findMethodInfo(getInfo().getClassInfo(), name, signature);
+         bridge.validateMethodValues(this, getTarget(), methodInfo, paramaters);
+      }
+   }
 }
\ No newline at end of file

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/BeanValidatorBridge.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/BeanValidatorBridge.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/BeanValidatorBridge.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -0,0 +1,75 @@
+/*
+* 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.beans.info.spi.PropertyInfo;
+import org.jboss.joinpoint.spi.Joinpoint;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.reflect.spi.MethodInfo;
+
+/**
+ * The bridge between jsr303 and our pojo handling.
+ * 
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public interface BeanValidatorBridge
+{
+   /**
+    * Validate constructor values.
+    *
+    * @param context the owner context
+    * @param joinpoint the constructor joinpoint
+    * @throws Throwable for any error
+    */
+   void validateConstructorValues(KernelControllerContext context, Joinpoint joinpoint) throws Throwable;
+
+   /**
+    * Validate new instance.
+    *
+    * @param context the owner context
+    * @param target the target
+    * @throws Throwable for any error
+    */
+   void validateInstance(KernelControllerContext context, Object target) throws Throwable;
+
+   /**
+    * Validate property value.
+    *
+    * @param context the owner context
+    * @param target the target
+    * @param propertyInfo the property
+    * @param value the new value
+    * @throws Throwable for any error
+    */
+   void validatePropertyValue(KernelControllerContext context, Object target, PropertyInfo propertyInfo, Object value) throws Throwable;
+
+   /**
+    * Validate method values.
+    *
+    * @param context the owner context
+    * @param target the target
+    * @param methodInfo the method
+    * @param parameters the parameters
+    * @throws Throwable for any error
+    */
+   void validateMethodValues(KernelControllerContext context, Object target, MethodInfo methodInfo, Object[] parameters) throws Throwable;
+}

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ConfigureAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ConfigureAction.java	2008-05-20 14:46:33 UTC (rev 73530)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ConfigureAction.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -103,7 +103,7 @@
    protected void dispatchSetProperty(KernelControllerContext context, PropertyMetaData property, boolean nullify, BeanInfo info, Object target, ClassLoader cl)
          throws Throwable
    {
-      ExecutionWrapper wrapper = new PropertyDispatchWrapper(property, nullify, info, target, cl);
+      ExecutionWrapper wrapper = new PropertyDispatchWrapper(context, property, nullify, info, target, cl);
       try
       {
           dispatchExecutionWrapper(context, wrapper);

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-05-20 14:46:33 UTC (rev 73530)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstantiateAction.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -54,11 +54,17 @@
 
       BeanMetaData metaData = context.getBeanMetaData();
       BeanInfo info = context.getBeanInfo();
-      final Joinpoint joinPoint = configurator.getConstructorJoinPoint(info, metaData.getConstructor(), metaData);
+      Joinpoint joinPoint = configurator.getConstructorJoinPoint(info, metaData.getConstructor(), metaData);
 
+      BeanValidatorBridge bridge = getBeanValidatorBridge(context);
+      if (bridge != null)
+         bridge.validateConstructorValues(context, joinPoint);
       Object object = dispatchJoinPoint(context, joinPoint);
       if (object == null)
          throw new IllegalStateException("Instantiate joinpoint returned a null object: " + joinPoint);
+      if (bridge != null)
+         bridge.validateInstance(context, object);
+
       context.setTarget(object);
 
       try

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java	2008-05-20 14:46:33 UTC (rev 73530)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -26,6 +26,7 @@
 
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.dependency.plugins.action.SimpleControllerContextAction;
+import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.joinpoint.spi.Joinpoint;
 import org.jboss.kernel.plugins.config.Configurator;
@@ -245,4 +246,20 @@
          return new DispatchJoinPoint(joinpoint);
       }
    }
+
+   /**
+    * Get bean validator bridge.
+    *
+    * @param context the owner context
+    * @return bean validator bridge instance if exists, null otherwise
+    */
+   static BeanValidatorBridge getBeanValidatorBridge(KernelControllerContext context)
+   {
+      Controller controller = context.getController();
+      if (controller == null)
+         return null;
+
+      ControllerContext bridge = controller.getInstalledContext(BeanValidatorBridge.class);
+      return bridge != null ? BeanValidatorBridge.class.cast(bridge.getTarget()) : null;
+   }
 }
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java	2008-05-20 14:46:33 UTC (rev 73530)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PropertyDispatchWrapper.java	2008-05-20 14:48:50 UTC (rev 73531)
@@ -23,12 +23,13 @@
 
 import java.security.PrivilegedExceptionAction;
 
-import org.jboss.logging.Logger;
+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.beans.info.spi.BeanInfo;
-import org.jboss.beans.info.spi.PropertyInfo;
-import org.jboss.beans.info.plugins.BeanInfoUtil;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.logging.Logger;
 
 /**
  * PropertyDispatchWrapper.
@@ -39,14 +40,18 @@
 {
    private static Logger log = Logger.getLogger(ConfigureAction.class);
 
+   private KernelControllerContext context;
    private PropertyMetaData property;
    private boolean nullify;
    private BeanInfo beanInfo;
    private Object target;
    private ClassLoader cl;
 
-   public PropertyDispatchWrapper(PropertyMetaData property, boolean nullify, BeanInfo beanInfo, Object target, ClassLoader cl)
+   public PropertyDispatchWrapper(KernelControllerContext context, PropertyMetaData property, boolean nullify, BeanInfo beanInfo, Object target, ClassLoader cl)
    {
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+      this.context = context;
       if (property == null)
          throw new IllegalArgumentException("Null property");
       this.property = property;
@@ -80,11 +85,29 @@
          PropertyInfo propertyInfo = BeanInfoUtil.getPropertyInfo(beanInfo, target, name);
          ValueMetaData valueMetaData = property.getValue();
          Object value = valueMetaData.getValue(propertyInfo.getType(), cl);
+         validatePropertyValue(context, target, propertyInfo, value);
          beanInfo.setProperty(target, name, value);
       }
       return null;
    }
 
+   /**
+    * Validate value injection.
+    * Use jsr303 constraints.
+    *
+    * @param context the owner context
+    * @param target the target
+    * @param pi the property info
+    * @param value the new value
+    * @throws Throwable for any error
+    */
+   protected void validatePropertyValue(KernelControllerContext context, Object target, PropertyInfo pi, Object value) throws Throwable
+   {
+      BeanValidatorBridge bridge = KernelControllerContextAction.getBeanValidatorBridge(context);
+      if (bridge != null)
+         bridge.validatePropertyValue(context, target, pi, value);
+   }
+
    protected PrivilegedExceptionAction<Object> getAction()
    {
       return new PrivilegedExceptionAction<Object>()




More information about the jboss-cvs-commits mailing list