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/06/02 04:55:16 UTC
svn commit: r780915 - in /openjpa/trunk: openjpa-all/ openjpa-persistence/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/validation/
openjpa/
Author: dwoods
Date: Tue Jun 2 02:55:15 2009
New Revision: 780915
URL: http://svn.apache.org/viewvc?rev=780915&view=rev
Log:
OPENJPA-1114 Bean Validation APIs should be an optional runtime dependency
Modified:
openjpa/trunk/openjpa-all/pom.xml
openjpa/trunk/openjpa-persistence/pom.xml
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/validation/ValidatorImpl.java
openjpa/trunk/openjpa/pom.xml
Modified: openjpa/trunk/openjpa-all/pom.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-all/pom.xml?rev=780915&r1=780914&r2=780915&view=diff
==============================================================================
--- openjpa/trunk/openjpa-all/pom.xml (original)
+++ openjpa/trunk/openjpa-all/pom.xml Tue Jun 2 02:55:15 2009
@@ -96,15 +96,16 @@
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jms_1.1_spec</artifactId>
+ <artifactId>geronimo-jta_1.1_spec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jta_1.1_spec</artifactId>
+ <artifactId>geronimo-jpa_2.0_spec</artifactId>
</dependency>
+ <!-- optional runtime dependencies -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jpa_2.0_spec</artifactId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
Modified: openjpa/trunk/openjpa-persistence/pom.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/pom.xml?rev=780915&r1=780914&r2=780915&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/pom.xml (original)
+++ openjpa/trunk/openjpa-persistence/pom.xml Tue Jun 2 02:55:15 2009
@@ -46,6 +46,7 @@
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-validation_1.0_spec</artifactId>
+ <scope>provided</scope>
</dependency>
</dependencies>
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=780915&r1=780914&r2=780915&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 Tue Jun 2 02:55:15 2009
@@ -44,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.event.LifecycleEventManager;
import org.apache.openjpa.kernel.MixedLockLevels;
import org.apache.openjpa.lib.conf.AbstractProductDerivation;
import org.apache.openjpa.lib.conf.Configuration;
@@ -180,36 +181,10 @@
compatibility.setFlushBeforeDetach(true);
compatibility.setCopyOnDetach(true);
} else {
- // only try creating a ValidatingLifecycleEventManager if needed
- if (!ValidatorImpl.skipValidation(conf.getValidationMode())) {
- try {
- Validator val = new ValidatorImpl(
- conf.getValidationFactoryInstance(),
- conf.getValidationMode());
- // we have a Validator, so try to create a VLEM
- conf.setLifecycleEventManager(
- new ValidatingLifecycleEventManager(val));
- } catch (RuntimeException e) {
- if (ValidatorImpl.validationRequired(
- conf.getValidationMode())) {
- // fatal error - ValidationMode requires a Validator
- conf.getConfigurationLog().error(
- _loc.get("vlem-creation-error"), e);
- // rethrow as a WrappedException
- throw new ValidationException(e);
- } else {
- // unexpected, but validation is optional,
- // so just log it as a warning
- conf.getConfigurationLog().warn(
- _loc.get("vlem-creation-warn", e.getMessage()));
- }
- }
- } else {
- conf.getConfigurationLog().trace(
- "Validation has been disabled by supplied mode.");
- }
- // make sure we have at least a LifecycleEventManager created
- conf.getLifecycleEventManagerInstance();
+ // see if we can/need to create a ValidatingLifecycleEventManager
+ // Note: BrokerImpl uses the instantiating getter, which will create
+ // a normal LifecycleEventManager if a VLEM wasn't created.
+ conf.setLifecycleEventManager(createVLEM(conf));
}
return true;
}
@@ -565,6 +540,76 @@
}
}
+
+ /**
+ * Try creating a ValidatingLifecycleEventManager based on the configured
+ * validation mode. This allows the Bean Validation Spec API to be an
+ * optional runtime dependency.
+ * @param conf
+ * @return ValidatingLifecycleEventManager if appropriate
+ * @throws ValidationException - a WrappedException for fatal errors
+ */
+ /**
+ * @param conf
+ * @throws ValidationException
+ */
+ private LifecycleEventManager createVLEM(OpenJPAConfigurationImpl conf)
+ throws ValidationException {
+ LifecycleEventManager lem = null;
+ // only try creating a ValidatingLifecycleEventManager if needed
+ if (!String.valueOf(ValidationMode.NONE).equalsIgnoreCase(
+ conf.getValidationMode())) {
+ // we'll use this in the exception handlers
+ boolean bValRequired = String.valueOf(ValidationMode.CALLBACK)
+ .equalsIgnoreCase(conf.getValidationMode());
+ // see if the javax.validation spec api is available
+ try {
+ @SuppressWarnings("unused")
+ Class<?> c = Class.forName(
+ "javax.validation.ValidationException");
+ } catch (ClassNotFoundException e) {
+ if (bValRequired) {
+ // fatal error - ValidationMode requires a validator
+ conf.getConfigurationLog().error(
+ _loc.get("vlem-creation-error"), e);
+ // rethrow as a WrappedException
+ throw new ValidationException(new RuntimeException(e));
+ } else {
+ // no optional validation provider, so just trace output
+ conf.getConfigurationLog().trace(
+ _loc.get("vlem-creation-warn", e.getMessage()));
+ return lem;
+ }
+ }
+ // we have the javax.validation APIs
+ try {
+ // try loading a validation provider
+ Validator val = new ValidatorImpl(
+ conf.getValidationFactoryInstance(),
+ conf.getValidationMode());
+ // we have a Validator, so try to create a VLEM
+ lem = new ValidatingLifecycleEventManager(val);
+ } catch (RuntimeException e) {
+ if (bValRequired) {
+ // fatal error - ValidationMode requires a validator
+ conf.getConfigurationLog().error(
+ _loc.get("vlem-creation-error"), e);
+ // rethrow as a WrappedException
+ throw new ValidationException(e);
+ } else {
+ // unexpected, but validation is optional,
+ // so just log it as a warning
+ conf.getConfigurationLog().warn(
+ _loc.get("vlem-creation-warn", e.getMessage()));
+ }
+ }
+ } else {
+ conf.getConfigurationLog().trace(
+ "Validation has been disabled by supplied mode.");
+ }
+ return lem;
+ }
+
/**
* Custom configuration provider.
*/
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/validation/ValidatorImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/validation/ValidatorImpl.java?rev=780915&r1=780914&r2=780915&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/validation/ValidatorImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/validation/ValidatorImpl.java Tue Jun 2 02:55:15 2009
@@ -65,26 +65,6 @@
}
/**
- * Is a Validator required based on the given validation mode?
- * Keeping validation mode logic in a single class...
- * @param mode
- * @return true if a Validator is required
- */
- public static boolean validationRequired(String mode) {
- return String.valueOf(ValidationMode.CALLBACK).equalsIgnoreCase(mode);
- }
-
- /**
- * Skip creating a Validator based on the given validation mode?
- * Keeping validation mode logic in a single class...
- * @param mode
- * @return true if a Validator should not be created
- */
- public static boolean skipValidation(String mode) {
- return String.valueOf(ValidationMode.NONE).equalsIgnoreCase(mode);
- }
-
- /**
* Default constructor. Builds a default validator factory, if available
* and creates the validator.
* Returns an Exception if a Validator could not be created.
Modified: openjpa/trunk/openjpa/pom.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa/pom.xml?rev=780915&r1=780914&r2=780915&view=diff
==============================================================================
--- openjpa/trunk/openjpa/pom.xml (original)
+++ openjpa/trunk/openjpa/pom.xml Tue Jun 2 02:55:15 2009
@@ -130,7 +130,7 @@
<!-- OSGi Bundle Metadata -->
<Private-Package>org.openjpa.lib.ant*,org.apache.jdbc.ant*,META-INF*</Private-Package>
<Export-Package>!META-INF*,!org.openjpa.lib.ant*,!org.apache.jdbc.ant*,org.apache.openjpa*</Export-Package>
- <Import-Package>com.ibm.*;resolution:=optional,org.postgresql.*;resolution:=optional,org.apache.tools.ant.*;resolution:=optional,org.apache.log4j.*;resolution:=optional,javax.activation.xa*;resolution:=optional,javax.jms.*;resolution:=optional,javax.transaction.*;resolution:=optional,javax.xml.bind.*;resolution:=optional,serp.*;resolution:=optional,*</Import-Package>
+ <Import-Package>com.ibm.*;resolution:=optional,org.postgresql.*;resolution:=optional,org.apache.tools.ant.*;resolution:=optional,org.apache.log4j.*;resolution:=optional,javax.activation.xa*;resolution:=optional,javax.jms.*;resolution:=optional,javax.transaction.*;resolution:=optional,javax.validation.*;resolution:=optional,javax.xml.bind.*;resolution:=optional,serp.*;resolution:=optional,*</Import-Package>
<!-- Eclipse metadata -->
<Eclipse-Autostart>false</Eclipse-Autostart>
<Bundle-ClassPath>.</Bundle-ClassPath>