Repository: tomee Updated Branches: refs/heads/master 51e607b81 -> 198d0a9eb
fixing LazyValidatorFactory serialization Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/198d0a9e Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/198d0a9e Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/198d0a9e Branch: refs/heads/master Commit: 198d0a9ebee768dc4d977e9201fb885f50e8b128 Parents: 51e607b Author: rmannibucau <rmannibu...@apache.org> Authored: Wed Jun 21 19:13:27 2017 +0200 Committer: rmannibucau <rmannibu...@apache.org> Committed: Wed Jun 21 19:13:27 2017 +0200 ---------------------------------------------------------------------- .../assembler/classic/LazyValidatorFactory.java | 4 +- .../assembler/classic/ValidatorBuilder.java | 43 ++++++++++++++------ 2 files changed, 32 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/198d0a9e/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidatorFactory.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidatorFactory.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidatorFactory.java index 57b2c42..5de3923 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidatorFactory.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/LazyValidatorFactory.java @@ -25,8 +25,8 @@ import java.util.concurrent.locks.ReentrantLock; // TODO: make it generic (LazyDelegate + Factory + refactor LazyValidator) public class LazyValidatorFactory implements InvocationHandler, Serializable { - private final ReentrantLock lock = new ReentrantLock(); - private final ClassLoader loader; + private transient final ReentrantLock lock = new ReentrantLock(); + private transient final ClassLoader loader; private final ValidationInfo info; private volatile ValidatorFactory factory; http://git-wip-us.apache.org/repos/asf/tomee/blob/198d0a9e/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ValidatorBuilder.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ValidatorBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ValidatorBuilder.java index d5c11d0..18c4e6f 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ValidatorBuilder.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ValidatorBuilder.java @@ -17,6 +17,7 @@ package org.apache.openejb.assembler.classic; +import org.apache.openejb.bval.ValidatorUtil; import org.apache.openejb.jee.bval.DefaultValidatedExecutableTypesType; import org.apache.openejb.jee.bval.ExecutableValidationType; import org.apache.openejb.jee.bval.PropertyType; @@ -31,6 +32,7 @@ import org.apache.webbeans.container.BeanManagerImpl; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.InjectionTarget; +import javax.naming.NamingException; import javax.validation.BootstrapConfiguration; import javax.validation.Configuration; import javax.validation.ConstraintValidatorFactory; @@ -415,55 +417,70 @@ public final class ValidatorBuilder { } } - private static final class OpenEJBValidatorFactory implements ValidatorFactory { - private final ValidatorFactory delegate; - private final Collection<Releasable<?>> toRelease; + private static final class OpenEJBValidatorFactory implements ValidatorFactory, Serializable { + private transient ValidatorFactory delegate; + private transient Collection<Releasable<?>> toRelease; public OpenEJBValidatorFactory(final ValidatorFactory validatorFactory, final Collection<Releasable<?>> releasables) { delegate = validatorFactory; toRelease = releasables; } + private ValidatorFactory delegate() { + if (delegate != null) { + return delegate; + } + try { + return ValidatorUtil.lookupFactory(); + } catch (final NamingException e) { + return Validation.buildDefaultValidatorFactory(); + } + } + @Override public Validator getValidator() { - return delegate.getValidator(); + return delegate().getValidator(); } @Override public ValidatorContext usingContext() { - return delegate.usingContext(); + return delegate().usingContext(); } @Override public MessageInterpolator getMessageInterpolator() { - return delegate.getMessageInterpolator(); + return delegate().getMessageInterpolator(); } @Override public TraversableResolver getTraversableResolver() { - return delegate.getTraversableResolver(); + return delegate().getTraversableResolver(); } @Override public ConstraintValidatorFactory getConstraintValidatorFactory() { - return delegate.getConstraintValidatorFactory(); + return delegate().getConstraintValidatorFactory(); } @Override public <T> T unwrap(final Class<T> type) { - return delegate.unwrap(type); + return delegate().unwrap(type); } @Override public ParameterNameProvider getParameterNameProvider() { - return delegate.getParameterNameProvider(); + return delegate().getParameterNameProvider(); } @Override public void close() { - delegate.close(); - for (final Releasable<?> r : toRelease) { - r.release(); + if (delegate != null) { + delegate.close(); + } + if (toRelease != null) { + for (final Releasable<?> r : toRelease) { + r.release(); + } } } }