You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/02/07 08:09:37 UTC

svn commit: r1565557 - /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java

Author: rmannibucau
Date: Fri Feb  7 07:09:37 2014
New Revision: 1565557

URL: http://svn.apache.org/r1565557
Log:
supporting mdb as well for bval interceptor + skipping this interceptor is bval 1.1 is on

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java?rev=1565557&r1=1565556&r2=1565557&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java Fri Feb  7 07:09:37 2014
@@ -16,11 +16,12 @@
  */
 package org.apache.openejb.bval;
 
+import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.ivm.naming.NamingException;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 
-import javax.ejb.SessionContext;
 import javax.interceptor.AroundInvoke;
 import javax.interceptor.InvocationContext;
 import javax.naming.InitialContext;
@@ -41,8 +42,27 @@ public class BeanValidationAppendixInter
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB, BeanValidationAppendixInterceptor.class);
     private static final Class<?> APACHE_BVAL_METHOD_CLASS = initApache();
     private static final Class<?> HIBERNATE_METHOD_CLASS = initHibernate();
-
-    private SessionContext sessionContext;
+    public static final Class<?>[] BVAL_ARG_TYPES = new Class<?>[]{
+            Class.class, Method.class, Object[].class, Class[].class
+    };
+    public static final Class<?>[] HIBERNATE_ARG_TYPES = new Class<?>[]{
+            Object.class, Method.class, Object[].class, Class[].class
+    };
+
+    private static final boolean ON;
+    static {
+        boolean on = true;
+        try {
+            BeanValidationAppendixInterceptor.class.getClassLoader().loadClass("javax.validation.executable.ExecutableValidator");
+            on = "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.bval.10.interceptor.force", "false"));
+            if (!on) {
+                logger.debug(BeanValidationAppendixInterceptor.class.getName() + " deactivated since BVal 1.1 is usable, use openejb.bval.10.interceptor.force=true to force it");
+            }
+        } catch (final Throwable e) {
+            // no-op
+        }
+        ON = on;
+    }
 
     @AroundInvoke
     public Object aroundInvoke(final InvocationContext ejbContext) throws Exception {
@@ -50,16 +70,16 @@ public class BeanValidationAppendixInter
         Validator validator = null;
         try {
             validator = (Validator) new InitialContext().lookup("java:comp/Validator");
-            sessionContext = (SessionContext) new InitialContext().lookup("java:comp/EJBContext"); // injection doesn't work
         } catch (NamingException ne) {
             // no-op
         }
 
-        // get bval annotation informations
+        final ThreadContext threadContext = ThreadContext.getThreadContext();
         Class<?> bvalClazzToValidate = ejbContext.getTarget().getClass();
-        if (sessionContext != null && ejbContext.getTarget().getClass().getInterfaces().length > 0) {
-            bvalClazzToValidate = sessionContext.getInvokedBusinessInterface();
+        if (threadContext != null && ejbContext.getTarget().getClass().getInterfaces().length > 0) {
+            bvalClazzToValidate = threadContext.getInvokedInterface();
         }
+
         Method method = ejbContext.getMethod();
         if (!bvalClazzToValidate.equals(ejbContext.getTarget().getClass())) {
             method = bvalClazzToValidate.getMethod(method.getName(), method.getParameterTypes());
@@ -72,18 +92,14 @@ public class BeanValidationAppendixInter
                     new Object[]{
                             bvalClazzToValidate, method, ejbContext.getParameters(), new Class[0]
                     },
-                    new Class<?>[]{
-                            Class.class, Method.class, Object[].class, Class[].class
-                    });
+                    BVAL_ARG_TYPES);
         } else if (HIBERNATE_METHOD_CLASS != null && validator != null) {
             validatorObject = validator.unwrap(HIBERNATE_METHOD_CLASS);
             violations = call(Set.class, validatorObject, "validateAllParameters",
                     new Object[]{
                             ejbContext.getTarget(), ejbContext.getMethod(), ejbContext.getParameters(), new Class[0]
                     },
-                    new Class<?>[]{
-                            Object.class, Method.class, Object[].class, Class[].class
-                    });
+                    HIBERNATE_ARG_TYPES);
         } else { // a warning message to inform Apache Bean Validation is not present
             if (validator == null) {
                 logger.error("can't find validator");
@@ -127,6 +143,7 @@ public class BeanValidationAppendixInter
         return returnedValue;
     }
 
+
     // just a simple EJBException for now
     private RuntimeException buildValidationException(Set<ConstraintViolation<?>> violations) {
         return new ConstraintViolationException(violations);