Revert "Bug 487889 - Fix EclipseLink Bean Validation optimization and added tests from Bug 461880."

This reverts commit 403396d724a7727ace5a45ad6ba3088659014b77.
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/config/PersistenceUnitProperties.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/config/PersistenceUnitProperties.java
index 4e7d9ff..010f2f2 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/config/PersistenceUnitProperties.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/config/PersistenceUnitProperties.java
@@ -1140,18 +1140,6 @@
      */
     public static final String VALIDATION_GROUP_PRE_REMOVE = "javax.persistence.validation.group.pre-remove";
 
-    /**
-     * Property for disabling Bean Validation optimisations.
-     * Bean Validation features optimisations, which are used to skip BV processes on non-constrained objects.
-     *
-     * This is to make maintenance easier and to allow for debugging in case that some object is not validated,
-     * but should be.
-     *
-     * Usage: set to {@link Boolean#TRUE} to disable optimisations, set to {@link Boolean#FALSE} to re-enable them
-     * again.
-     */
-    public static final String BEAN_VALIDATION_NO_OPTIMISATION = "eclipselink.beanvalidation.no-optimisation";
-
     // Caching Properties
 
     /**
diff --git a/jpa/eclipselink.jpa.test/antbuild.properties b/jpa/eclipselink.jpa.test/antbuild.properties
index 0d0e571..2df6298 100644
--- a/jpa/eclipselink.jpa.test/antbuild.properties
+++ b/jpa/eclipselink.jpa.test/antbuild.properties
@@ -108,7 +108,6 @@
 eclipselink.delimited.model=eclipselink-delimited-model
 eclipselink.extensibility.model=eclipselink-extensibility-model
 eclipselink.beanvalidation.model=eclipselink-beanvalidation-model
-eclipselink.beanvalidation.dynamic.model=eclipselink-beanvalidation-dynamic-model
 
 eclipselink.composite.advanced.model=eclipselink-composite-advanced-model
 eclipselink.composite.advanced.model.member_1=eclipselink-composite-advanced-model-member_1
diff --git a/jpa/eclipselink.jpa.test/antbuild.xml b/jpa/eclipselink.jpa.test/antbuild.xml
index 02c7e98..caaa5c9 100644
--- a/jpa/eclipselink.jpa.test/antbuild.xml
+++ b/jpa/eclipselink.jpa.test/antbuild.xml
@@ -550,7 +550,6 @@
             <fileset file="${jpatest.basedir}/${eclipselink.delimited.model}.jar"/>
             <fileset file="${jpatest.basedir}/${eclipselink.extensibility.model}.jar"/>
             <fileset file="${jpatest.basedir}/${eclipselink.beanvalidation.model}.jar"/>
-            <fileset file="${jpatest.basedir}/${eclipselink.beanvalidation.dynamic.model}.jar"/>
             <fileset file="${jpatest.basedir}/${eclipselink.composite.advanced.model}.jar"/>
             <fileset file="${jpatest.basedir}/${eclipselink.composite.advanced.model.member_1}.jar"/>
             <fileset file="${jpatest.basedir}/${eclipselink.composite.advanced.model.member_2}.jar"/>
@@ -593,7 +592,6 @@
         <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.delimited.model}"/>
         <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.extensibility.model}"/>
         <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.model}"/>
-        <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.dynamic.model}"/>
         <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.composite.advanced.model}"/>
         <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.composite.advanced.model.member_1}"/>
         <mkdir dir="${jpatest.basedir}/${build.dir}/${eclipselink.composite.advanced.model.member_2}"/>
@@ -783,7 +781,7 @@
     </target>
 
     <!-- Packages JPA persistent unit test jars. -->
-    <target name="package" depends="config-classpath, package-annotation, package-ddl, package-xml-only, package-xml-merge, package-jpa21-model, package-xml-extended, package-validation-failed, package-jpa-advanced-field-access, package-jpa-advanced-properties, package-jpa-pu_with_spaces, package-partitioned, package-plsql, package-jpa-performance, package-jpa-performance2, package-cascade-deletes, package-jpa-metamodel, package-delimited, package-beanvalidation, package-beanvalidation-dynamic,
+    <target name="package" depends="config-classpath, package-annotation, package-ddl, package-xml-only, package-xml-merge, package-jpa21-model, package-xml-extended, package-validation-failed, package-jpa-advanced-field-access, package-jpa-advanced-properties, package-jpa-pu_with_spaces, package-partitioned, package-plsql, package-jpa-performance, package-jpa-performance2, package-cascade-deletes, package-jpa-metamodel, package-delimited, package-beanvalidation,
     package-composite-advanced, package-composite-advanced-member_1, package-composite-advanced-member_2, package-composite-advanced-member_3,
     package-xml-composite-advanced, package-xml-composite-advanced-member_1, package-xml-composite-advanced-member_2, package-xml-composite-advanced-member_3,
     package-xml-extended-composite-advanced, package-xml-extended-composite-advanced-member_1, package-xml-extended-composite-advanced-member_2, package-xml-extended-composite-advanced-member_3, package-extensibility, package-jpa-remote, package-xml-mapping-metadata-complete" description="build EclipseLink jar">
@@ -1206,7 +1204,7 @@
         </copy>
         <copy todir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.model}">
             <fileset dir="${jpatest.basedir}/${classes.dir}"
-                     includes="org/eclipse/persistence/testing/models/jpa/beanvalidation/BeanValidationJunitTest*"/>
+                     includes="org/eclipse/persistence/testing/models/jpa/beanvalidation/**"/>
         </copy>
         <jar jarfile="${jpatest.basedir}/${eclipselink.beanvalidation.model}.jar">
             <fileset dir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.model}">
@@ -1214,20 +1212,6 @@
         </jar>
     </target>
 
-    <target name="package-beanvalidation-dynamic" depends="">
-        <copy todir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.dynamic.model}/META-INF">
-            <fileset dir="${jpatest.basedir}/resource/${eclipselink.beanvalidation.dynamic.model}" includes="*.xml"/>
-        </copy>
-        <copy todir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.dynamic.model}">
-            <fileset dir="${jpatest.basedir}/${classes.dir}"
-                     includes="org/eclipse/persistence/testing/models/jpa/beanvalidation/dynamic/BeanValidationDynamicEntityJunitTest*"/>
-        </copy>
-        <jar jarfile="${jpatest.basedir}/${eclipselink.beanvalidation.dynamic.model}.jar">
-            <fileset dir="${jpatest.basedir}/${build.dir}/${eclipselink.beanvalidation.dynamic.model}">
-            </fileset>
-        </jar>
-    </target>
-
     <target name="package-composite-advanced" depends="">
         <copy todir="${jpatest.basedir}/${build.dir}/${eclipselink.composite.advanced.model}/META-INF">
             <fileset dir="${jpatest.basedir}/resource/${eclipselink.composite.advanced.model}" includes="*.xml"/>
@@ -1482,10 +1466,6 @@
             <pathelement path="${extensions.depend.dir}/${classmate.jar}"/>
             <pathelement path="${extensions.depend.dir}/${javax.validation.jar}"/>
         </path>
-        <path id="run.bean.validation.dynamic.classpath">
-            <path refid="run.bean.validation.classpath"/>            
-            <pathelement path="${jpatest.basedir}/${eclipselink.beanvalidation.dynamic.model}.jar"/>
-        </path>
         <path id="run.jpa21.classpath">
             <pathelement path="${jpatest.basedir}/${classes21.dir}"/>
             <path refid="jpa21.compile.path"/>
@@ -1678,15 +1658,6 @@
             <param name="RUN_PATH" value="run.bean.validation.classpath"/>
             <param name="DB_URL" value="${db.url}"/>
         </antcall>
-        <antcall target="run-test" inheritRefs="true">
-            <param name="TEST_CLASS" value="org.eclipse.persistence.testing.tests.jpa.beanvalidation.dynamic.BeanValidationDynamicEntityJunitTest"/>
-            <param name="TEST_AGENT" value="${test.agent}"/>
-            <param name="TEST_WEAVING" value="${test.weaving}"/>
-            <param name="TEST_WEAVING_OPTION" value="${test.weaving.option}"/>
-            <param name="ORM_TESTING" value="-Dorm.testing=jpa"/>
-            <param name="RUN_PATH" value="run.bean.validation.dynamic.classpath"/>
-            <param name="DB_URL" value="${db.url}"/>
-        </antcall>
     </target>
 
     <target name="oracle-test" if="is.oracle" depends="config-classpath">
@@ -1838,7 +1809,6 @@
             <pathelement path="${jpatest.basedir}/woven-${eclipselink.delimited.model}.jar"/>
             <pathelement path="${jpatest.basedir}/woven-${eclipselink.extensibility.model}.jar"/>
             <pathelement path="${jpatest.basedir}/woven-${eclipselink.beanvalidation.model}.jar"/>
-            <pathelement path="${jpatest.basedir}/woven-${eclipselink.beanvalidation.dynamic.model}.jar"/>
             <pathelement path="${jpatest.basedir}/${eclipselink.composite.advanced.model}.jar"/>
             <pathelement path="${jpatest.basedir}/woven-${eclipselink.composite.advanced.model.member_1}.jar"/>
             <pathelement path="${jpatest.basedir}/woven-${eclipselink.composite.advanced.model.member_2}.jar"/>
@@ -2424,20 +2394,6 @@
                     <path refid="run.classpath"/>
                </classpath>
         </weave>
-        <weave source= "${jpatest.basedir}/${eclipselink.beanvalidation.dynamic.model}.jar"
-               target = "${jpatest.basedir}/woven-${eclipselink.beanvalidation.dynamic.model}.jar"
-               loglevel="${logging.level}">
-               <classpath>
-                    <path refid="run.classpath"/>
-               </classpath>
-        </weave>
-        <weave source= "${jpatest.basedir}/${eclipselink.beanvalidation.dynamic.model}.jar"
-               target = "${jpatest.basedir}/woven-${eclipselink.beanvalidation.dynamic.model}.jar"
-               loglevel="${logging.level}">
-               <classpath>
-                    <path refid="run.classpath"/>
-               </classpath>
-        </weave>
         <weave source= "${jpatest.basedir}/${eclipselink.composite.advanced.model.member_1}.jar"
                target = "${jpatest.basedir}/woven-${eclipselink.composite.advanced.model.member_1}.jar"
                persistenceinfo="${jpatest.basedir}/${eclipselink.composite.advanced.model}.jar"
@@ -3782,23 +3738,12 @@
             <param name="PERSISTENCE_UNIT_NAME" value="beanvalidation"/>
             <param name="MODEL_DIR" value="org/eclipse/persistence/testing/models/jpa/beanvalidation"/>
             <param name="MODEL_NAME" value="eclipselink-beanvalidation-model"/>
-            <!-- This also includes dynamic entity test class - tests pass but maybe should separate -->
             <param name="TEST_DIR" value="org/eclipse/persistence/testing/tests/jpa/beanvalidation"/>
             <param name="TEST_NAME" value="eclipselink-beanvalidation-model"/>
             <param name="EAR_NAME" value="eclipselink-beanvalidation-model"/>
             <param name="TEST_SUITE" value="org.eclipse.persistence.testing.tests.jpa.beanvalidation.BeanValidationJunitTest"/>
             <param name="eclipselink.jpa.test.dir" value="."/>
         </antcall>
-        <!--<antcall target="server-run-all" inheritRefs="true">-->
-            <!--<param name="PERSISTENCE_UNIT_NAME" value="beanvalidation-dynamic"/>-->
-            <!--<param name="MODEL_DIR" value="org/eclipse/persistence/testing/models/jpa/beanvalidation-dynamic"/>-->
-            <!--<param name="MODEL_NAME" value="eclipselink-beanvalidation-dynamic-model"/>-->
-            <!--<param name="TEST_DIR" value="org/eclipse/persistence/testing/tests/jpa/beanvalidation/dynamic"/>-->
-            <!--<param name="TEST_NAME" value="eclipselink-beanvalidation-dynamic-model"/>-->
-            <!--<param name="EAR_NAME" value="eclipselink-beanvalidation-dynamic-model"/>-->
-            <!--<param name="TEST_SUITE" value="org.eclipse.persistence.testing.tests.jpa.beanvalidation.dynamic.BeanValidationDynamicEntityJunitTest"/>-->
-            <!--<param name="eclipselink.jpa.test.dir" value="."/>-->
-        <!--</antcall>-->
     </target>
 
     <target name="prepare-project-cache-persistence-xml">
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/employee-constraints.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/employee-constraints.xml
deleted file mode 100644
index cdba423..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/employee-constraints.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
-	xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
-	<default-package>org.eclipse.persistence.testing.models.jpa.beanvalidation</default-package>
-	<bean class="DynamicEmployee" ignore-annotations="true">
-		<getter name="name" ignore-annotations="true">
-			<constraint annotation="javax.validation.constraints.NotNull" />
-		</getter>
-		<getter name="surname" ignore-annotations="true">
-			<constraint annotation="javax.validation.constraints.NotNull" />
-		</getter>
-	</bean>
-</constraint-mappings>
\ No newline at end of file
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/employee-orm.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/employee-orm.xml
deleted file mode 100644
index a4c0539..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/employee-orm.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity-mappings version="2.1"
-	xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-	<package>org.eclipse.persistence.testing.models.jpa.beanvalidation</package>
-
-	<entity class="DynamicEmployee" access="VIRTUAL">
-		<attributes>
-			<id name="id" attribute-type="Integer">
-				<generated-value strategy="SEQUENCE" generator="employee-generator" />
-				<sequence-generator name="employee-generator" sequence-name="DYN_EMP_SEQ" />
-			</id>
-			<basic name="name" attribute-type="String"/>
-			<basic name="surname" attribute-type="String"/>
-			<version name="version" attribute-type="Long"/>
-		</attributes>
-	</entity>
-
-</entity-mappings>
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/persistence.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/persistence.xml
deleted file mode 100644
index 42d094a..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/persistence.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_2_0.xsd" version="2.0">
-    <persistence-unit name="beanvalidation-dynamic" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-        <mapping-file>META-INF/employee-orm.xml</mapping-file>
-        <exclude-unlisted-classes>true</exclude-unlisted-classes>
-        <validation-mode>CALLBACK</validation-mode>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="javax.persistence.schema-generation.database.action" value="create"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/employee-constraints.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/employee-constraints.xml
deleted file mode 100644
index cdba423..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/employee-constraints.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
-	xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
-	<default-package>org.eclipse.persistence.testing.models.jpa.beanvalidation</default-package>
-	<bean class="DynamicEmployee" ignore-annotations="true">
-		<getter name="name" ignore-annotations="true">
-			<constraint annotation="javax.validation.constraints.NotNull" />
-		</getter>
-		<getter name="surname" ignore-annotations="true">
-			<constraint annotation="javax.validation.constraints.NotNull" />
-		</getter>
-	</bean>
-</constraint-mappings>
\ No newline at end of file
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/employee-orm.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/employee-orm.xml
deleted file mode 100644
index a4c0539..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/employee-orm.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity-mappings version="2.1"
-	xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-	<package>org.eclipse.persistence.testing.models.jpa.beanvalidation</package>
-
-	<entity class="DynamicEmployee" access="VIRTUAL">
-		<attributes>
-			<id name="id" attribute-type="Integer">
-				<generated-value strategy="SEQUENCE" generator="employee-generator" />
-				<sequence-generator name="employee-generator" sequence-name="DYN_EMP_SEQ" />
-			</id>
-			<basic name="name" attribute-type="String"/>
-			<basic name="surname" attribute-type="String"/>
-			<version name="version" attribute-type="Long"/>
-		</attributes>
-	</entity>
-
-</entity-mappings>
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/persistence.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/persistence.xml
deleted file mode 100644
index 5a35000..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/persistence.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_2_0.xsd" version="2.0">
-    <persistence-unit name="%%default%%" transaction-type="%%transaction-type%%">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-        <%%datasource-type%%>%%data-source-name%%</%%datasource-type%%>
-        <mapping-file>META-INF/employee-orm.xml</mapping-file>
-        <exclude-unlisted-classes>true</exclude-unlisted-classes>
-        <validation-mode>CALLBACK</validation-mode>
-        <properties>
-            <property name="eclipselink.target-server" value="%%server-platform%%"/>
-            <property name="eclipselink.target-database" value="%%database-platform%%"/>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.validate-existence" value="true"/>
-            <property name="eclipselink.logging.logger" value="DefaultLogger"/>
-            <property name="eclipselink.jdbc.allow-native-sql-queries" value="true"/>
-            <property name="javax.persistence.schema-generation.database.action" value="create"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/validation.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/validation.xml
deleted file mode 100644
index 434c8d2..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/server/validation.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<validation-config version="1.1" xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration">
-    <default-provider>org.hibernate.validator.HibernateValidator</default-provider>
-    <message-interpolator>org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator</message-interpolator>
-    <traversable-resolver>org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver</traversable-resolver>
-    <constraint-validator-factory>org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl</constraint-validator-factory>
-    <constraint-mapping>META-INF/employee-constraints.xml</constraint-mapping>
-</validation-config>
diff --git a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/validation.xml b/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/validation.xml
deleted file mode 100644
index 434c8d2..0000000
--- a/jpa/eclipselink.jpa.test/resource/eclipselink-beanvalidation-dynamic-model/validation.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<validation-config version="1.1" xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration">
-    <default-provider>org.hibernate.validator.HibernateValidator</default-provider>
-    <message-interpolator>org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator</message-interpolator>
-    <traversable-resolver>org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver</traversable-resolver>
-    <constraint-validator-factory>org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl</constraint-validator-factory>
-    <constraint-mapping>META-INF/employee-constraints.xml</constraint-mapping>
-</validation-config>
diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/dynamic/BeanValidationDynamicEntityJunitTest.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/dynamic/BeanValidationDynamicEntityJunitTest.java
deleted file mode 100644
index dcb0014..0000000
--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/beanvalidation/dynamic/BeanValidationDynamicEntityJunitTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
- * which accompanies this distribution.
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- ******************************************************************************/
-package org.eclipse.persistence.testing.tests.jpa.beanvalidation.dynamic;
-
-import java.util.*;
-
-import javax.persistence.*;
-import javax.validation.ConstraintViolationException;
-import javax.validation.ConstraintViolation;
-
-import junit.framework.*;
-
-import junit.framework.Test;
-import org.eclipse.persistence.config.PersistenceUnitProperties;
-import org.eclipse.persistence.descriptors.ClassDescriptor;
-import org.eclipse.persistence.dynamic.DynamicClassLoader;
-import org.eclipse.persistence.dynamic.DynamicEntity;
-import org.eclipse.persistence.dynamic.DynamicType;
-import org.eclipse.persistence.internal.jpa.config.metadata.ReflectiveDynamicClassLoader;
-import org.eclipse.persistence.jpa.dynamic.JPADynamicHelper;
-import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
-import org.junit.Assert;
-
-public class BeanValidationDynamicEntityJunitTest extends JUnitTestCase {
-
-    public BeanValidationDynamicEntityJunitTest() {
-        super();
-    }
-
-    public BeanValidationDynamicEntityJunitTest(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.setName("BeanValidationDynamicEntityJunitTest");
-        if (! JUnitTestCase.isJPA10()) {
-            suite.addTest(new BeanValidationDynamicEntityJunitTest("testPersistDynamicEntityWithInvalidData"));
-        }
-        return suite;
-    }
-
-    /**
-     * Strategy:
-     * 1. Persist a dynamic entity with invalid values
-     * 2. Assert - a ConstraintViolationException is raised
-     * 3. Assert - transaction is rolled back
-     * 4. Assert - The validation exception is due to invalid value given by us.
-     */
-    @SuppressWarnings("unchecked")
-    public void testPersistDynamicEntityWithInvalidData() {        
-        // Create an entity manager factory with a dynamic class loader.
-        DynamicClassLoader dcl = new ReflectiveDynamicClassLoader(Thread.currentThread().getContextClassLoader());
-        Map<String,Object> properties = new HashMap<>(getPersistenceProperties());
-        properties.put(PersistenceUnitProperties.CLASSLOADER, dcl);
-//        properties.put(PersistenceUnitProperties.BEAN_VALIDATION_NO_OPTIMISATION, "true");
-        EntityManager em = createEntityManager("beanvalidation-dynamic", properties);
-        EntityManagerFactory entityManagerFactory = em.getEntityManagerFactory();
-
-        // Create types
-        JPADynamicHelper helper = new JPADynamicHelper(entityManagerFactory);
-        
-        DynamicType empType = helper.getType("DynamicEmployee");
-        ClassDescriptor empTypeDescriptor = empType.getDescriptor();
-        DynamicEntity employee = (DynamicEntity) empTypeDescriptor.getInstantiationPolicy().buildNewInstance();
-
-        employee.set("name", "Bob");
-        employee.set("surname", "Smith");
-
-        try {
-            beginTransaction(em);
-            em.persist(employee);
-            commitTransaction(em);
-        } catch (Exception e) {
-            if (isTransactionActive(em)) {
-                rollbackTransaction(em);
-            }
-            closeEntityManager(em);
-            Assert.fail(e.getMessage());
-        }
-        Integer employeeId = employee.<Integer>get("id");
-        assertTrue("Employee id not set!", employeeId > 0);
-
-        DynamicEntity emp = em.find(empType.getJavaClass(), employeeId);
-
-        emp.set("name", null);
-        emp.set("surname", null);
-
-        try {
-            beginTransaction(em);
-            em.flush();
-        } catch (ConstraintViolationException e) {
-            System.out.println("ConstraintException: " + e.getMessage());
-            for (ConstraintViolation<?> cv : e.getConstraintViolations()) {
-                System.out.println("\t>> " + cv.getPropertyPath() + "::" + cv.getMessage());
-            }
-            return;
-        } finally {
-            if (isTransactionActive(em)) {
-                rollbackTransaction(em);
-            }
-            closeEntityManager(em);
-        }
-        Assert.fail("ConstraintViolationException not thrown");
-    }
-
-//    public String getPersistenceUnitName() {
-//        return "beanvalidation-dynamic";
-//    }
-}
diff --git a/jpa/org.eclipse.persistence.jpa/META-INF/MANIFEST.MF b/jpa/org.eclipse.persistence.jpa/META-INF/MANIFEST.MF
index 638a59ee..94b19a9 100644
--- a/jpa/org.eclipse.persistence.jpa/META-INF/MANIFEST.MF
+++ b/jpa/org.eclipse.persistence.jpa/META-INF/MANIFEST.MF
@@ -55,7 +55,6 @@
  javax.transaction.xa;version="1.1.0";resolution:=optional,
  javax.validation;resolution:=optional,
  javax.validation.groups;resolution:=optional,
- javax.validation.metadata;resolution:=optional,
  javax.xml.parsers;resolution:=optional,
  javax.xml.transform;resolution:=optional,
  javax.xml.transform.stream;resolution:=optional,
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/beanvalidation/BeanValidationHelper.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/beanvalidation/BeanValidationHelper.java
new file mode 100644
index 0000000..3d96236
--- /dev/null
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/beanvalidation/BeanValidationHelper.java
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Marcel Valovy - 2.6 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.persistence.internal.jpa.metadata.beanvalidation;
+
+import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * INTERNAL:
+ *
+ * Utility class for bean validation related tasks.
+ *  - Singleton.
+ *  - Thread-safe.
+ */
+public enum BeanValidationHelper {
+    BEAN_VALIDATION_HELPER;
+
+    /**
+     * # default constraints in {@link #KNOWN_CONSTRAINTS} map.
+     *
+     * The value reflects the number of default constraints; if
+     * more default constraints are added, update the value.
+     */
+    private static final int DEFAULT_CONSTRAINTS_QUANTITY = 25;
+
+    /**
+     * Load factor for concurrent maps.
+     */
+    private static final float LOAD_FACTOR = 0.75f;
+
+    /**
+     * Size parameter for {@link #KNOWN_CONSTRAINTS} map.
+     */
+    private static final int KNOWN_CONSTRAINTS_DEFAULT_SIZE = nextPowerOfTwo(
+            (int) (DEFAULT_CONSTRAINTS_QUANTITY / LOAD_FACTOR));
+
+    /**
+     * Set of all default BeanValidation field annotations and discovered custom field constraints.
+     * Implemented as a ConcurrentHashMap with "Null Object" idiom.
+     */
+    private static final Set<String> KNOWN_CONSTRAINTS = Collections.newSetFromMap(new ConcurrentHashMap<String,
+            Boolean>( KNOWN_CONSTRAINTS_DEFAULT_SIZE, LOAD_FACTOR ));
+
+    /**
+     * Map of all classes that have undergone check for bean validation constraints.
+     * Maps the key with boolean value telling whether the class contains an annotation from {@link #KNOWN_CONSTRAINTS}.
+     */
+    private static final Map<Class<?>, Boolean> CONSTRAINTS_ON_CLASSES = Collections.synchronizedMap(new
+            WeakHashMap<Class<?>, Boolean>());
+
+    static {
+        initializeKnownConstraints();
+    }
+
+    /**
+     * Tells whether any of the class's fields are constrained by Bean Validation annotations or custom constraints.
+     *
+     * @param clazz checked class
+     * @return true or false
+     */
+    public boolean isConstrained(Class<?> clazz) {
+        Boolean annotated = CONSTRAINTS_ON_CLASSES.get(clazz);
+        if (annotated == null) {
+            annotated = detectConstraints(clazz);
+            CONSTRAINTS_ON_CLASSES.put(clazz, annotated);
+        }
+        return annotated;
+    }
+
+    /**
+     * INTERNAL:
+     * Reveals whether any of the class's fields are constrained by Bean Validation annotations or custom constraints.
+     * Uses reflection.
+     * @see Class#getDeclaredFields
+     */
+    private Boolean detectConstraints(Class<?> clazz) {
+        for (Field f : getDeclaredFields(clazz)) {
+            for (Annotation a : f.getDeclaredAnnotations()) {
+                final Class<? extends Annotation> type = a.annotationType();
+                final String typeCanonicalName = type.getCanonicalName();
+
+                if (KNOWN_CONSTRAINTS.contains(typeCanonicalName)) {
+                    return true;
+                }
+
+                // Check for custom annotations on the field (+ check inheritance on class annotations).
+                // Custom bean validation annotation is defined by having @Constraint annotation on its class.
+                for (Annotation typesClassAnnotation : type.getAnnotations()) {
+                    final Class<? extends Annotation> classAnnotationType = typesClassAnnotation.annotationType();
+                    if ("javax.validation.Constraint".equals(classAnnotationType.getCanonicalName())) {
+                        // Avoid adding anonymous class constraints.
+                        if (typeCanonicalName != null) {
+                            KNOWN_CONSTRAINTS.add(typeCanonicalName);
+                        }
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Retrieves declared fields.
+     * <p/>
+     * If security is enabled, makes {@linkplain java.security.AccessController#doPrivileged(PrivilegedAction)
+     * privileged calls}.
+     *
+     * @param clazz fields of that class will be returned
+     * @return array of declared fields
+     * @see Class#getDeclaredFields()
+     */
+    private Field[] getDeclaredFields(final Class<?> clazz) {
+        return PrivilegedAccessHelper.shouldUsePrivilegedAccess()
+                ? AccessController.doPrivileged(
+                new PrivilegedAction<Field[]>() {
+                    @Override
+                    public Field[] run() {
+                        return clazz.getDeclaredFields();
+                    }
+                })
+                : PrivilegedAccessHelper.getDeclaredFields(clazz);
+    }
+
+    /**
+     * Adds canonical names of bean validation constraints into set of known constraints (internally represented by
+     * map).
+     * Canonical name is the name that would be used in an import statement and uniquely identifies the class,
+     * i.e. anonymous classes receive a 'null' value as their canonical name,
+     * which allows no ambiguity and is what we are looking for.
+     */
+    private static void initializeKnownConstraints() {
+        KNOWN_CONSTRAINTS.add("javax.validation.Valid");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Max");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Min");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.DecimalMax");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.DecimalMin");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Digits");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.NotNull");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Pattern");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Size");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.AssertTrue");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.AssertFalse");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Future");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.Past");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Max");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Min");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.DecimalMax");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.DecimalMin");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Digits");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.NotNull");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Pattern");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Size");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.AssertTrue");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.AssertFalse");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Future");
+        KNOWN_CONSTRAINTS.add("javax.validation.constraints.List.Past");
+    }
+
+
+    /**
+     * Calculate the next power of 2, greater than or equal to x.<p>
+     * From Hacker's Delight, Chapter 3, Harry S. Warren Jr.
+     *
+     * @param x integer greater than 0
+     * @return next power of two
+     */
+    private static int nextPowerOfTwo(int x) {
+        assert x > 0;
+        x |= --x >> 1;
+        x |= x >> 2;
+        x |= x >> 4;
+        x |= x >> 8;
+        x |= x >> 16;
+        return x + 1;
+    }
+}
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/listeners/BeanValidationListener.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/listeners/BeanValidationListener.java
index 82a0e64..045f7f3 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/listeners/BeanValidationListener.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/listeners/BeanValidationListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2009, 2016 Sun Microsystems, Inc, IBM Corporation. All rights reserved.

+ * Copyright (c) 2009, 2015 Sun Microsystems, Inc, IBM Corporation. All rights reserved.

  * This program and the accompanying materials are made available under the

  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0

  * which accompanies this distribution.

@@ -11,8 +11,6 @@
  *     08/20/2014-2.5 Rick Curtis

  *       - 441890: Cache Validator instances.

  *     Marcel Valovy - 2.6 - skip validation of objects that are not constrained.

- *     02/17/2016-2.6 Dalia Abo Sheasha

- *       - 487889: Fix EclipseLink Bean Validation optimization 

  ******************************************************************************/

 

 package org.eclipse.persistence.internal.jpa.metadata.listeners;

@@ -25,7 +23,6 @@
 import javax.validation.ValidatorFactory;

 import javax.validation.groups.Default;

 

-import org.eclipse.persistence.config.PersistenceUnitProperties;

 import org.eclipse.persistence.descriptors.DescriptorEventAdapter;

 import org.eclipse.persistence.descriptors.DescriptorEvent;

 import org.eclipse.persistence.descriptors.ClassDescriptor;

@@ -39,6 +36,8 @@
 import java.util.concurrent.ConcurrentHashMap;

 import java.lang.annotation.ElementType;

 

+import static org.eclipse.persistence.internal.jpa.metadata.beanvalidation.BeanValidationHelper.BEAN_VALIDATION_HELPER;

+

 /**

  * Responsible for performing automatic bean validation on call back events.

  * @author Mitesh Meswani

@@ -98,9 +97,7 @@
 

     private void validateOnCallbackEvent(DescriptorEvent event, String callbackEventName, Class[] validationGroup) {

         Object source = event.getSource();

-        boolean noOptimization = "true".equalsIgnoreCase((String) event.getSession().getProperty(PersistenceUnitProperties.BEAN_VALIDATION_NO_OPTIMISATION));

-        boolean isBeanConstrained = getValidator(event).getConstraintsForClass(source.getClass()).isBeanConstrained();

-        boolean shouldValidate = noOptimization || isBeanConstrained;

+        boolean shouldValidate = BEAN_VALIDATION_HELPER.isConstrained(source.getClass());

         if (shouldValidate) {

             Set<ConstraintViolation<Object>> constraintViolations = getValidator(event).validate(source, validationGroup);

             if (constraintViolations.size() > 0) {