Author: mtylenda
Date: Sun Jul 5 07:06:15 2009
New Revision: 791204
URL: http://svn.apache.org/viewvc?rev=791204&view=rev
Log:
OPENJPA-1147: Modify TestAutoIncrement not to rely on -Dplatform property, add
sequence creation statement
Modified:
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
Modified:
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java?rev=791204&r1=791203&r2=791204&view=diff
==============================================================================
---
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
(original)
+++
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
Sun Jul 5 07:06:15 2009
@@ -19,18 +19,25 @@
package org.apache.openjpa.persistence.jdbc.oracle;
import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
+import javax.persistence.Query;
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.jdbc.sql.OracleDictionary;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
/**
* Tests identity value assignment with IDENTITY strategy specifically for
- * Oracle database. IDENTITY strategy for most database platform is supported
+ * Oracle database. IDENTITY strategy for most database platforms is supported
* with auto-increment capabilities. As Oracle does not natively support
* auto-increment, the same effect is achieved by a combination of a database
* sequence and a pre-insert database trigger [1].
*
- * This test verifies that a persistence entity using IDENTITY generation type
- * is allocated identities in monotonic sequence on Oracle platform.
+ * This test verifies that a persistent entity using IDENTITY generation type
+ * is allocating identities in monotonic sequence on Oracle platform.
*
* [1] http://jen.fluxcapacitor.net/geek/autoincr.html
*
@@ -38,37 +45,33 @@
*
*/
public class TestAutoIncrement extends SingleEMFTestCase {
- private static String PLATFORM = "oracle";
- public void setUp() throws Exception {
- if (!isTargetPlatform(PLATFORM)) {
- System.err.println("*** " + getName() + " skipped. Run
with "
- + "-Dplatform=" + PLATFORM + " to
activate");
- return;
- }
- if
("testAutoIncrementIdentityWithNamedSequence".equals(getName())) {
- super.setUp(CLEAR_TABLES, PObject.class,
- "openjpa.jdbc.DBDictionary",
- "oracle(UseTriggersForAutoAssign=true," +
- "autoAssignSequenceName=autoIncrementSequence)");
- } else {
- super.setUp(CLEAR_TABLES, PObjectNative.class,
- "openjpa.jdbc.DBDictionary",
-
"oracle(UseTriggersForAutoAssign=true)");
- }
- }
-
- boolean isTargetPlatform(String target) {
- String url = getPlatform();
- return url != null && url.indexOf(target) != -1;
- }
-
- public String getPlatform() {
- return System.getProperty("platform", "derby");
- }
+ public void setUp() throws Exception {
+ if (!isTargetPlatform())
+ return;
+
+ if ("testAutoIncrementIdentityWithNamedSequence".equals(getName())) {
+ String sequence = "autoIncrementSequence";
+ createSequence(sequence);
+ super.setUp(CLEAR_TABLES, PObject.class,
+ "openjpa.jdbc.DBDictionary",
+ "oracle(UseTriggersForAutoAssign=true,autoAssignSequenceName="
+ sequence + ")");
+ } else {
+ super.setUp(CLEAR_TABLES, PObjectNative.class,
+ "openjpa.jdbc.DBDictionary",
+ "oracle(UseTriggersForAutoAssign=true)");
+ }
+ }
+
+ boolean isTargetPlatform() {
+ OpenJPAEntityManagerFactorySPI factorySPI = createEMF();
+ OpenJPAEntityManagerSPI em = factorySPI.createEntityManager();
+ DBDictionary dict = ((JDBCConfiguration)
em.getConfiguration()).getDBDictionaryInstance();
+ return (dict instanceof OracleDictionary);
+ }
public void testAutoIncrementIdentityWithNamedSequence() {
- if (!isTargetPlatform(PLATFORM))
+ if (!isTargetPlatform())
return;
EntityManager em = emf.createEntityManager();
@@ -83,7 +86,7 @@
}
public void testAutoIncrementIdentityWithNativeSequence() {
- if (!isTargetPlatform(PLATFORM))
+ if (!isTargetPlatform())
return;
EntityManager em = emf.createEntityManager();
@@ -96,4 +99,23 @@
assertEquals(1, Math.abs(pc1.getId() - pc2.getId()));
}
+
+ /**
+ * Create sequence so that the test does not require manual intervention
in database.
+ */
+ private void createSequence(String sequence) {
+ OpenJPAEntityManagerFactorySPI factorySPI = createEMF();
+ OpenJPAEntityManagerSPI em = factorySPI.createEntityManager();
+
+ try {
+ em.getTransaction().begin();
+ Query q = em.createNativeQuery("CREATE SEQUENCE " + sequence + "
START WITH 1");
+ q.executeUpdate();
+ em.getTransaction().commit();
+ } catch (PersistenceException e) {
+ // Sequence probably exists.
+ em.getTransaction().rollback();
+ }
+ closeEMF(factorySPI);
+ }
}