You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by dw...@apache.org on 2009/05/14 23:14:47 UTC
svn commit: r774930 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/conf/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/
openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/...
Author: dwoods
Date: Thu May 14 21:14:45 2009
New Revision: 774930
URL: http://svn.apache.org/viewvc?rev=774930&view=rev
Log:
OPENJPA-1077 Validation-mode element support added to persistence.xml and to createEMF properties Map
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/TestValidationMode.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/
openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/persistence.xml (with props)
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java?rev=774930&r1=774929&r2=774930&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java Thu May 14 21:14:45 2009
@@ -1645,4 +1645,20 @@
* @since 2.0.0
*/
public void setFinderCache(String cache);
+
+ /**
+ * The bean validation mode to use for managed classes.
+ * Defaults to <code>AUTO</code>.
+ *
+ * @since 2.0.0
+ */
+ public String getValidationMode();
+
+ /**
+ * Set the bean validation mode to use for managed classes.
+ * If not set, defaults to <code>AUTO</code>.
+ *
+ * @since 2.0.0
+ */
+ public void setValidationMode(String mode);
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?rev=774930&r1=774929&r2=774930&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java Thu May 14 21:14:45 2009
@@ -152,6 +152,7 @@
public PluginValue preparedQueryCachePlugin;
public PluginValue finderCachePlugin;
public ObjectValue specification;
+ public StringValue validationMode;
// custom values
public BrokerFactoryValue brokerFactoryPlugin;
@@ -550,7 +551,21 @@
queryTimeout = addInt("javax.persistence.query.timeout");
queryTimeout.setDefault("-1");
queryTimeout.setDynamic(true);
-
+
+ // kernel can't access javax.persistence.ValidationMode enums here
+ validationMode = addString("javax.persistence.validation.mode");
+ aliases =
+ new String[] {
+ "AUTO", "auto",
+ "CALLBACK", "callback",
+ "NONE", "none"
+ };
+ validationMode.setAliases(aliases);
+ validationMode.setAliasListComprehensive(true);
+ validationMode.setDefault(aliases[0]);
+ validationMode.set(aliases[0]);
+ validationMode.setDynamic(true);
+
// initialize supported options that some runtimes may not support
supportedOptions.add(OPTION_NONTRANS_READ);
supportedOptions.add(OPTION_OPTIMISTIC);
@@ -1509,6 +1524,14 @@
eagerInitialization.set(retry);
}
+ public void setValidationMode(String mode) {
+ validationMode.setString(mode);
+ }
+
+ public String getValidationMode() {
+ return validationMode.getString();
+ }
+
public void instantiateAll() {
super.instantiateAll();
getMetaDataRepositoryInstance();
Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/TestValidationMode.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/TestValidationMode.java?rev=774930&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/TestValidationMode.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/TestValidationMode.java Thu May 14 21:14:45 2009
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
+ * or agreed to in writing, software distributed under the License is
+ * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.openjpa.persistence.validation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.ValidationMode;
+
+import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.query.SimpleEntity;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+/**
+ * Tests the new Bean Validation Mode support in the JPA 2.0 spec.
+ * Basic (no provider) Validation scenarios being tested:
+ * 1) By default, validation mode is AUTO
+ * 2) Validation mode of AUTO in persistence.xml is the same as default
+ * 3) Validation mode of NONE in persistence.xml overrides default AUTO
+ * 4) Validation mode of CALLBACK in persistence.xml overrides default AUTO
+ * 5) Validation mode in createEMF(Map props) overrides no persistence.xml
+ * 6) Validation mode in createEMF(Map props) overrides persistence.xml
+ * 7) Validation mode in createEMF(Map props) can be a ValidationMode enum
+ *
+ * @version $Rev$ $Date$
+ */
+public class TestValidationMode extends SingleEMFTestCase {
+
+ @Override
+ public void setUp() {
+ super.setUp(CLEAR_TABLES, SimpleEntity.class);
+ }
+
+ /**
+ * Scenario being tested:
+ * 1) By default, validation mode == AUTO
+ */
+ public void testValidationMode1() {
+ getLog().trace("testValidationMode1() - Default mode is AUTO");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple",
+ "org/apache/openjpa/persistence/validation/persistence.xml");
+ assertNotNull(emf);
+ // verify default validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Default validation mode",
+ String.valueOf(ValidationMode.AUTO),
+ conf.getValidationMode());
+ }
+
+ /**
+ * Scenario being tested:
+ * 2) Validation mode of AUTO in persistence.xml is the same as default
+ */
+ public void testValidationMode2() {
+ getLog().trace("testValidationMode1() - AUTO in persistence.xml");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple-auto-mode",
+ "org/apache/openjpa/persistence/validation/persistence.xml");
+ assertNotNull(emf);
+ // verify expected validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Validation mode",
+ String.valueOf(ValidationMode.AUTO),
+ conf.getValidationMode());
+ }
+
+ /**
+ * Scenario being tested:
+ * 3) Validation mode of NONE in persistence.xml overrides default
+ */
+ public void testValidationMode3() {
+ getLog().trace("testValidationMode3() - persistence.xml overrides " +
+ "Default");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple-none-mode",
+ "org/apache/openjpa/persistence/validation/persistence.xml");
+ assertNotNull(emf);
+ // verify validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Validation mode",
+ String.valueOf(ValidationMode.NONE),
+ conf.getValidationMode());
+ }
+
+ /**
+ * Scenario being tested:
+ * 4) Validation mode of CALLBACK in persistence.xml overrides default
+ */
+ public void testValidationMode4() {
+ getLog().trace("testValidationMode4() - persistence.xml overrides " +
+ "Default");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple-callback-mode",
+ "org/apache/openjpa/persistence/validation/persistence.xml");
+ assertNotNull(emf);
+ // verify validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Validation mode",
+ String.valueOf(ValidationMode.CALLBACK),
+ conf.getValidationMode());
+ }
+
+ /**
+ * Scenario being tested:
+ * 5) Validation mode in createEMF(Map props) overrides no persistence.xml
+ */
+ public void testValidationMode5() {
+ getLog().trace("testValidationMode5() - Map(NONE) overrides default");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create the Map to test overrides
+ Map<String,String> props = new HashMap<String,String>();
+ props.put("javax.persistence.validation.mode",
+ String.valueOf(ValidationMode.NONE));
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple",
+ "org/apache/openjpa/persistence/validation/persistence.xml",
+ props);
+ assertNotNull(emf);
+ // verify validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Validation mode",
+ String.valueOf(ValidationMode.NONE),
+ conf.getValidationMode());
+ }
+
+ /**
+ * Scenario being tested:
+ * 6) Validation mode in createEMF(Map props) overrides persistence.xml
+ */
+ public void testValidationMode6() {
+ getLog().trace("testValidationMode6() - Map(NONE) overrides PU " +
+ "provided mode=callback");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create the Map to test overrides
+ Map<String,String> props = new HashMap<String,String>();
+ props.put("javax.persistence.validation.mode",
+ String.valueOf(ValidationMode.NONE));
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple-callback-mode",
+ "org/apache/openjpa/persistence/validation/persistence.xml",
+ props);
+ assertNotNull(emf);
+ // verify validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Validation mode",
+ String.valueOf(ValidationMode.NONE),
+ conf.getValidationMode());
+ }
+
+ /**
+ * Scenario being tested:
+ * 7) Validation mode in createEMF(Map props) can be a ValidationMode enum
+ */
+ public void testValidationMode7() {
+ getLog().trace("testValidationMode7() - Map(ValidationMode.NONE) " +
+ "overrides PU provided mode=callback");
+ OpenJPAEntityManagerFactory emf = null;
+
+ // create the Map to test overrides
+ Map<String,Object> props = new HashMap<String,Object>();
+ props.put("javax.persistence.validation.mode",
+ ValidationMode.NONE);
+
+ // create our EMF
+ emf = OpenJPAPersistence.createEntityManagerFactory(
+ "simple-callback-mode",
+ "org/apache/openjpa/persistence/validation/persistence.xml",
+ props);
+ assertNotNull(emf);
+ // verify validation mode
+ OpenJPAConfiguration conf = emf.getConfiguration();
+ assertNotNull(conf);
+ assertEquals("Validation mode",
+ String.valueOf(ValidationMode.NONE),
+ conf.getValidationMode());
+ }
+
+
+ /**
+ * Internal convenience method for getting the OpenJPA logger
+ *
+ * @return
+ */
+ private Log getLog() {
+ return emf.getConfiguration().getLog("Tests");
+ }
+}
Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/validation/TestValidationMode.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/persistence.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/persistence.xml?rev=774930&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/persistence.xml (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/persistence.xml Thu May 14 21:14:45 2009
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="2.0">
+
+ <!-- Following PUs are used by TestValidationMode -->
+ <persistence-unit name="simple">
+ <class>org.apache.openjpa.persistence.query.SimpleEntity</class>
+ </persistence-unit>
+
+ <persistence-unit name="simple-auto-mode">
+ <validation-mode>AUTO</validation-mode>
+ <class>org.apache.openjpa.persistence.query.SimpleEntity</class>
+ </persistence-unit>
+
+ <persistence-unit name="simple-callback-mode" validation-mode="CALLBACK">
+ <validation-mode>CALLBACK</validation-mode>
+ <class>org.apache.openjpa.persistence.query.SimpleEntity</class>
+ </persistence-unit>
+
+ <persistence-unit name="simple-none-mode" validation-mode="NONE">
+ <validation-mode>NONE</validation-mode>
+ <class>org.apache.openjpa.persistence.query.SimpleEntity</class>
+ </persistence-unit>
+
+</persistence>
Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/validation/persistence.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java?rev=774930&r1=774929&r2=774930&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java Thu May 14 21:14:45 2009
@@ -34,6 +34,7 @@
import java.util.MissingResourceException;
import java.util.Set;
+import javax.persistence.ValidationMode;
import javax.persistence.spi.PersistenceUnitInfo;
import javax.persistence.spi.PersistenceUnitTransactionType;
@@ -43,6 +44,7 @@
import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
import org.apache.openjpa.conf.OpenJPAProductDerivation;
import org.apache.openjpa.conf.Specification;
+import org.apache.openjpa.kernel.LockLevels;
import org.apache.openjpa.kernel.MixedLockLevels;
import org.apache.openjpa.lib.conf.AbstractProductDerivation;
import org.apache.openjpa.lib.conf.Configuration;
@@ -686,7 +688,12 @@
// startPersistenceUnit()
// case 'property' for 'properties' is handled in startElement()
case 'c': // class
- _info.addManagedClassName(currentText());
+ if ("class".equals(name))
+ _info.addManagedClassName(currentText());
+ else // FIXME - caching
+ throw new javax.persistence.PersistenceException(
+ "Not implemented yet");
+ break;
case 'e': // exclude-unlisted-classes
_info.setExcludeUnlistedClasses("true".equalsIgnoreCase
(currentText()));
@@ -713,6 +720,10 @@
if ("provider".equals(name))
_info.setPersistenceProviderClassName(currentText());
break;
+ case 'v': // validation-mode
+ _info.setValidationMode(Enum.valueOf(ValidationMode.class,
+ currentText()));
+ break;
}
}
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java?rev=774930&r1=774929&r2=774930&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java Thu May 14 21:14:45 2009
@@ -60,6 +60,8 @@
implements PersistenceUnitInfo, SourceTracker {
public static final String KEY_PROVIDER = "javax.persistence.provider";
+ public static final String VALIDATION_MODE =
+ "javax.persistence.validation.mode";
private static final Localizer s_loc = Localizer.forPackage
(PersistenceUnitInfoImpl.class);
@@ -80,6 +82,7 @@
private boolean _excludeUnlisted;
private URL _persistenceXmlFile;
private String _schemaVersion = "1.0";
+ private ValidationMode _validationMode;
// A persistence unit is defined by a persistence.xml file. The jar
// file or directory whose META-INF directory contains the
@@ -311,6 +314,11 @@
setNonJtaDataSourceName((String) val);
else
setNonJtaDataSource((DataSource) val);
+ } else if (VALIDATION_MODE.equals(key)) {
+ if (val instanceof String)
+ setValidationMode((String) val);
+ else
+ setValidationMode((ValidationMode) val);
} else
_props.put(key, val);
}
@@ -447,6 +455,11 @@
// always record provider name for product derivations to access
if (info.getPersistenceProviderClassName() != null)
map.put(KEY_PROVIDER, info.getPersistenceProviderClassName());
+
+ // convert validation-mode enum to a StringValue
+ if (info.getValidationMode() != null)
+ map.put(VALIDATION_MODE, String.valueOf(info.getValidationMode()));
+
return map;
}
@@ -517,9 +530,21 @@
throw new UnsupportedOperationException(
"JPA 2.0 - Method not yet implemented");
}
+
+ public void setCaching(Caching cache) {
+ throw new UnsupportedOperationException(
+ "JPA 2.0 - Method not yet implemented");
+ }
public ValidationMode getValidationMode() {
- throw new UnsupportedOperationException(
- "JPA 2.0 - Method not yet implemented");
+ return _validationMode;
+ }
+
+ protected void setValidationMode(String mode) {
+ setValidationMode(Enum.valueOf(ValidationMode.class, mode));
+ }
+
+ public void setValidationMode(ValidationMode mode) {
+ _validationMode = mode;
}
}