You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2015/09/21 21:33:32 UTC
deltaspike git commit: DELTASPIKE-992 optional support for bv 1.1
Repository: deltaspike
Updated Branches:
refs/heads/master 6f3e6a10f -> c9de75a81
DELTASPIKE-992 optional support for bv 1.1
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/c9de75a8
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/c9de75a8
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/c9de75a8
Branch: refs/heads/master
Commit: c9de75a81f3e7fa49a89fd9ab760e85fe9e1e48d
Parents: 6f3e6a1
Author: gpetracek <gp...@apache.org>
Authored: Mon Sep 21 21:29:47 2015 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Mon Sep 21 21:29:47 2015 +0200
----------------------------------------------------------------------
.../CDIAwareConstraintValidatorFactory.java | 49 +++++++++++++++++++-
1 file changed, 47 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/c9de75a8/deltaspike/modules/bean-validation/impl/src/main/java/org/apache/deltaspike/beanvalidation/impl/CDIAwareConstraintValidatorFactory.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/bean-validation/impl/src/main/java/org/apache/deltaspike/beanvalidation/impl/CDIAwareConstraintValidatorFactory.java b/deltaspike/modules/bean-validation/impl/src/main/java/org/apache/deltaspike/beanvalidation/impl/CDIAwareConstraintValidatorFactory.java
index d481081..e0f21b8 100644
--- a/deltaspike/modules/bean-validation/impl/src/main/java/org/apache/deltaspike/beanvalidation/impl/CDIAwareConstraintValidatorFactory.java
+++ b/deltaspike/modules/bean-validation/impl/src/main/java/org/apache/deltaspike/beanvalidation/impl/CDIAwareConstraintValidatorFactory.java
@@ -18,6 +18,7 @@
*/
package org.apache.deltaspike.beanvalidation.impl;
+import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -26,6 +27,7 @@ import javax.validation.ConstraintValidatorFactory;
import javax.validation.Validation;
import org.apache.deltaspike.core.api.provider.BeanProvider;
+import org.apache.deltaspike.core.util.ReflectionUtils;
/**
* A factory for creating CDI Aware/Enabled ConstraintValidators.
@@ -34,6 +36,9 @@ import org.apache.deltaspike.core.api.provider.BeanProvider;
public class CDIAwareConstraintValidatorFactory implements
ConstraintValidatorFactory
{
+ private static final String RELEASE_INSTANCE_METHOD_NAME = "releaseInstance";
+ private static Boolean releaseInstanceMethodFound;
+ private static Method releaseInstanceMethod;
private final Logger log = Logger
.getLogger(CDIAwareConstraintValidatorFactory.class.toString());
@@ -53,8 +58,7 @@ public class CDIAwareConstraintValidatorFactory implements
@Override
public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> validatorClass)
{
- T resolvedInst = null;
- resolvedInst = BeanProvider.getContextualReference(validatorClass,true);
+ T resolvedInst = BeanProvider.getContextualReference(validatorClass, true);
if (resolvedInst == null)
{
if (log.isLoggable(Level.CONFIG))
@@ -67,4 +71,45 @@ public class CDIAwareConstraintValidatorFactory implements
return resolvedInst;
}
+ //BV v1.1+
+ public void releaseInstance(ConstraintValidator<?, ?> constraintValidator)
+ {
+ if (releaseInstanceMethodFound == null)
+ {
+ lazyInit();
+ }
+ if (Boolean.TRUE.equals(releaseInstanceMethodFound))
+ {
+ ReflectionUtils.invokeMethod(this.delegate, releaseInstanceMethod, Void.class, true, constraintValidator);
+ }
+ }
+
+ private synchronized void lazyInit()
+ {
+ if (releaseInstanceMethodFound != null)
+ {
+ return;
+ }
+
+ Class<?> currentClass = delegate.getClass();
+ while (currentClass != null && !Object.class.getName().equals(currentClass.getName()))
+ {
+ for (Method currentMethod : currentClass.getDeclaredMethods())
+ {
+ if (RELEASE_INSTANCE_METHOD_NAME.equals(currentMethod.getName()) &&
+ currentMethod.getParameterTypes().length == 1 &&
+ currentMethod.getParameterTypes()[0].equals(ConstraintValidator.class))
+ {
+ releaseInstanceMethod = currentMethod;
+ releaseInstanceMethodFound = true;
+ return;
+ }
+
+ }
+
+ currentClass = currentClass.getSuperclass();
+ }
+
+ releaseInstanceMethodFound = false;
+ }
}