[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