Author: andygumbrecht
Date: Thu Nov  8 15:32:44 2012
New Revision: 1407132

URL: http://svn.apache.org/viewvc?rev=1407132&view=rev
Log:
Not sure what the issue is but try this - IMHO much better for internal 
synchronization.

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidator.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidator.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidator.java?rev=1407132&r1=1407131&r2=1407132&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidator.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidator.java
 Thu Nov  8 15:32:44 2012
@@ -20,10 +20,13 @@ import javax.validation.Validator;
 import javax.validation.ValidatorFactory;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
+import java.util.concurrent.locks.ReentrantLock;
 
 public class LazyValidator implements InvocationHandler {
+
+    private final ReentrantLock lock = new ReentrantLock();
     private final ValidatorFactory factory;
-    private volatile Validator validator = null;
+    private Validator validator = null;
 
     public LazyValidator(final ValidatorFactory factory) {
         this.factory = factory;
@@ -31,13 +34,21 @@ public class LazyValidator implements In
 
     @Override
     public Object invoke(final Object proxy, final Method method, final 
Object[] args) throws Throwable {
+
         if (validator == null) {
-            synchronized (this) {
+
+            final ReentrantLock l = lock;
+            l.lock();
+
+            try {
                 if (validator == null) {
                     validator = factory.usingContext().getValidator();
                 }
+            } finally {
+                l.unlock();
             }
         }
+
         return method.invoke(validator, args);
     }
 }


Reply via email to