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);
}
}