You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/05/21 07:05:41 UTC

svn commit: r776951 [1/3] - in /openjpa/trunk: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ openjpa-kernel/src/main/resources/org/apache/openjpa/meta/ openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ openjpa-persistence-jdbc/src/test/j...

Author: ppoddar
Date: Thu May 21 05:05:39 2009
New Revision: 776951

URL: http://svn.apache.org/viewvc?rev=776951&view=rev
Log:
OPENJPA-1013: Joins, MetaModel validation, Array type

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Transaction_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ArrayMember_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed0_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed1_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccessMixed_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccess_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccessMixed_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccess_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessBase_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessMappedSuperclass_.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessSubclass_.java   (with props)
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java   (with props)
Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
    openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ReportingSQLException.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/   (props changed)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account_.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/   (props changed)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccess.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetamodel.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ResultItemImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaBuilder.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/RootImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/SelectionImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Members.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Types.java
    openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java Thu May 21 05:05:39 2009
@@ -621,7 +621,7 @@
     protected Compilation compilationFromCache() {
         Map compCache =
             _broker.getConfiguration().getQueryCompilationCacheInstance();
-        if (compCache == null) {
+        if (compCache == null || getQueryString() == null) {
             return newCompilation();
         } else {
             CompilationKey key = new CompilationKey();

Modified: openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties (original)
+++ openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties Thu May 21 05:05:39 2009
@@ -332,3 +332,5 @@
     a jar file, this may be caused by one or more inherited class of the \
     entity not being packaged in the same jar file. Please check all \
     inherited class(es) are packaged in the same jar file.
+meta-no-model: Meta class "{0}" for entity {1} can not be registered with \
+	following exception "{2}"
\ No newline at end of file

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java Thu May 21 05:05:39 2009
@@ -233,7 +233,7 @@
     private SQLException wrap(SQLException sqle, Statement stmnt) {
         if (sqle instanceof ReportingSQLException)
             return (ReportingSQLException) sqle;
-        return new ReportingSQLException(sqle, stmnt);
+        return new ReportingSQLException(sqle, stmnt, null);
     }
 
     /**
@@ -242,7 +242,13 @@
     private SQLException wrap(SQLException sqle, String sql) {
         if (sqle instanceof ReportingSQLException)
             return (ReportingSQLException) sqle;
-        return new ReportingSQLException(sqle, sql);
+        return new ReportingSQLException(sqle, null, sql);
+    }
+    
+    private SQLException wrap(SQLException sqle, Statement stmnt, String sql) {
+        if (sqle instanceof ReportingSQLException)
+            return (ReportingSQLException) sqle;
+        return new ReportingSQLException(sqle, stmnt, sql);
     }
 
     /**
@@ -936,7 +942,7 @@
                 try {
                     return super.executeQuery(sql, wrap);
                 } catch (SQLException se) {               	
-                    err = wrap(se, LoggingStatement.this);
+                    err = wrap(se, LoggingStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -952,7 +958,7 @@
                 try {
                     return super.executeUpdate(sql);
                 } catch (SQLException se) {                	
-                    err = wrap(se, LoggingStatement.this);
+                    err = wrap(se, LoggingStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -968,7 +974,7 @@
                 try {
                     return super.execute(sql);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingStatement.this);
+                    err = wrap(se, LoggingStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1013,7 +1019,7 @@
                 try {
                     return super.executeQuery(sql, wrap);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingPreparedStatement.this);
+                    err = wrap(se, LoggingPreparedStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1029,7 +1035,7 @@
                 try {
                     return super.executeUpdate(sql);
                 } catch (SQLException se) {
-                    err =  wrap(se, LoggingPreparedStatement.this);
+                    err =  wrap(se, LoggingPreparedStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1045,7 +1051,7 @@
                 try {
                     return super.execute(sql);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingPreparedStatement.this);
+                    err = wrap(se, LoggingPreparedStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1061,7 +1067,7 @@
                 try {
                     return super.executeQuery(wrap);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingPreparedStatement.this);
+                    err = wrap(se, LoggingPreparedStatement.this, _sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1596,7 +1602,7 @@
                 try {
                     return super.executeQuery(sql, wrap);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingCallableStatement.this);
+                    err = wrap(se, LoggingCallableStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1612,7 +1618,7 @@
                 try {
                     return super.executeUpdate(sql);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingCallableStatement.this);
+                    err = wrap(se, LoggingCallableStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);
@@ -1628,7 +1634,7 @@
                 try {
                     return super.execute(sql);
                 } catch (SQLException se) {
-                    err = wrap(se, LoggingCallableStatement.this);
+                    err = wrap(se, LoggingCallableStatement.this, sql);
                     throw err;
                 } finally {
                     logTime(start);

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ReportingSQLException.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ReportingSQLException.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ReportingSQLException.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ReportingSQLException.java Thu May 21 05:05:39 2009
@@ -33,23 +33,27 @@
 
     private final transient Statement _stmnt;
     private final SQLException _sqle;
-
+    private final String       _sql;
+    
+    /**
+     * Supply original exception and non-null Statement and/or SQL string.
+     */
     public ReportingSQLException(SQLException sqle, Statement stmnt,
         String sql) {
         super(getExceptionMessage(sqle, stmnt, sql));
         this._sqle = sqle;
         this._stmnt = stmnt;
+        this._sql = sql;
         setNextException(sqle);
     }
 
-    public ReportingSQLException(SQLException sqle, String sql) {
-        this(sqle, null, sql);
-    }
-
-    public ReportingSQLException(SQLException sqle, Statement stmnt) {
-        this(sqle, stmnt, null);
+    /**
+     * Gets the SQL string if available.
+     */
+    public String getSQL() {
+        return _sql;
     }
-
+    
     /**
      * Returns the SQL state of the underlying {@link SQLException}.
      */

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu May 21 05:05:39 2009
@@ -3,3 +3,4 @@
 bin
 *.log
 maven-eclipse.xml
+*.class

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account.java Thu May 21 05:05:39 2009
@@ -21,6 +21,8 @@
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
 import javax.persistence.Table;
 
 /**
@@ -38,18 +40,21 @@
 
     private int balance;
     private Integer loan;
-    private String owner;
+    
+    @OneToOne
+    private Person owner;
+    
     private String name;
 
     public long getId() {
         return id;
     }
 
-    public String getOwner() {
+    public Person getOwner() {
         return owner;
     }
 
-    public void setOwner(String owner) {
+    public void setOwner(Person owner) {
         this.owner = owner;
     }
 

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account_.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account_.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account_.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Account_.java Thu May 21 05:05:39 2009
@@ -12,5 +12,5 @@
     public static volatile Attribute<Account,Long> id;
     public static volatile Attribute<Account,Integer> loan;
     public static volatile Attribute<Account,String> name;
-    public static volatile Attribute<Account,String> owner;
+    public static volatile Attribute<Account,Person> owner;
 }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser.java Thu May 21 05:05:39 2009
@@ -38,7 +38,7 @@
 	@Column(name="compName", length=50)
 	private String computerName;
 
-	@PersistentCollection
+	@PersistentCollection(fetch=FetchType.EAGER)
 	private String[] nicknames = new String[0];
 
 	@OneToOne(cascade={CascadeType.PERSIST, CascadeType.REMOVE})

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java Thu May 21 05:05:39 2009
@@ -5,15 +5,16 @@
 package org.apache.openjpa.persistence.criteria;
 
 import javax.persistence.metamodel.Attribute;
-import org.apache.openjpa.persistence.common.apps.CompUser.CreditRating;
+import javax.persistence.metamodel.List;
+import org.apache.openjpa.persistence.criteria.CompUser.CreditRating;
 
-@javax.persistence.metamodel.TypesafeMetamodel(value=org.apache.openjpa.persistence.common.apps.CompUser.class)
+@javax.persistence.metamodel.TypesafeMetamodel(value=org.apache.openjpa.persistence.criteria.CompUser.class)
 public class CompUser_ {
     public static volatile Attribute<CompUser,Address> address;
     public static volatile Attribute<CompUser,Integer> age;
     public static volatile Attribute<CompUser,String> computerName;
     public static volatile Attribute<CompUser,CreditRating> creditRating;
     public static volatile Attribute<CompUser,String> name;
-    public static volatile Attribute<CompUser,String[]> nicknames;
+    public static volatile List<CompUser,String> nicknames;
     public static volatile Attribute<CompUser,Integer> userid;
 }

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java?rev=776951&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java Thu May 21 05:05:39 2009
@@ -0,0 +1,179 @@
+package org.apache.openjpa.persistence.criteria;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.QueryBuilder;
+
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.lib.jdbc.AbstractJDBCListener;
+import org.apache.openjpa.lib.jdbc.JDBCEvent;
+import org.apache.openjpa.lib.jdbc.JDBCListener;
+import org.apache.openjpa.lib.jdbc.ReportingSQLException;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
+
+
+/**
+ * Generic utility to run Criteria tests. 
+ * 
+ * Provides facility to compare the target SQL generated by good old JPQL
+ * and newly minted Criteria.
+ *  
+ * Loads a domain model. 
+ * 
+ * @author Pinaki Poddar
+ *
+ */
+public abstract class CriteriaTest extends SQLListenerTestCase {
+    QueryBuilder cb;
+    EntityManager em;
+    
+    public void setUp(Object...props) {
+            super.setUp(
+                CLEAR_TABLES,
+                Account.class, 
+                Address.class, 
+                CompUser.class,
+                Contact.class,
+                Contractor.class, 
+                Course.class, 
+                CreditCard.class,
+                Customer.class, 
+                Department.class, 
+                Employee.class,
+                Exempt.class, 
+                FemaleUser.class,
+                FrequentFlierPlan.class, 
+                Item.class,
+                LineItem.class, 
+                Manager.class, 
+                MaleUser.class,
+                Movie.class, 
+                Order.class, 
+                Person.class,
+                Phone.class, 
+                Photo.class, 
+                Product.class,
+                Semester.class, 
+                Student.class, 
+                Transaction.class,
+                TransactionHistory.class,
+                VideoStore.class);
+            
+        setDictionary();
+        
+        em = emf.createEntityManager();
+        cb = emf.getQueryBuilder();
+    }
+    
+    public final void tearDown() {
+        // important: do nothing
+    }
+
+    void setDictionary() {
+        JDBCConfiguration conf = (JDBCConfiguration) emf.getConfiguration();
+        DBDictionary dict = conf.getDBDictionaryInstance();
+        dict.requiresCastForComparisons = false;
+        dict.requiresCastForMathFunctions = false;
+    }
+
+    void assertEquivalence(CriteriaQuery c, String jpql, String[] paramNames,
+            Object[] params) {
+        Query cQ = em.createQuery(c);
+        for (int i = 0; i < paramNames.length; i++) {
+            cQ.setParameter(paramNames[i], params[i]);
+        }
+        Query jQ = em.createQuery(jpql);
+        for (int i = 0; i < paramNames.length; i++) {
+            jQ.setParameter(paramNames[i], params[i]);
+        }
+        executeAndAssert(cQ, jQ);
+    }
+
+    /**
+     * Executes the given CriteriaQuery and JPQL string and compare their
+     * respective SQLs for equality.
+     */
+
+    void assertEquivalence(CriteriaQuery c, String jpql, Object[] params) {
+        Query cQ = em.createQuery(c);
+        for (int i = 0; i < params.length; i++) {
+            cQ.setParameter(i + 1, params[i]);
+        }
+        
+        Query jQ = em.createQuery(jpql);
+        for (int i = 0; i < params.length; i++) {
+            jQ.setParameter(i + 1, params[i]);
+        }
+        
+        executeAndAssert(cQ, jQ);
+    }
+
+    void assertEquivalence(CriteriaQuery c, String jpql) {
+        executeAndAssert(em.createQuery(c), em.createQuery(jpql));
+    }
+
+    void executeAndAssert(Query cQ, Query jQ) {
+        List<String>[] sqls = new ArrayList[2];
+        if (!execute(cQ, jQ, sqls)) {
+            fail("Invalid SQL for Criteria;[" + sqls[1] + "]. \r\n"
+                    + "Expeceted [" + sqls[0] + "]");
+        }
+        assertEquals(sqls[0].size(), sqls[1].size());
+        for (int i = 0; i < sqls[0].size(); i++)
+           assertEquals(sqls[0].get(i), sqls[1].get(i));
+    }
+
+    /**
+     * Execute the two given queries. The first query originated from a JPQL
+     * string must be well-formed. The second query originated from a Criteria
+     * is being tested.
+     * 
+     * @param sqls The target SQL for the queries will be filled-in the given
+     *            array.
+     * @return true if both queries execute successfully.
+     */
+    boolean execute(Query cQ, Query jQ, List<String>[] sqls) {
+        sql.clear();
+        List jList = jQ.getResultList();
+        sqls[0] = new ArrayList<String>(sql);
+
+        sql.clear();
+        try {
+            List cList = cQ.getResultList();
+        } catch (PersistenceException e) {
+            e.printStackTrace();
+            sqls[1] = new ArrayList<String>(sql);
+            sqls[1].add(extractSQL(e));
+            return false;
+        }
+        sqls[1] = new ArrayList<String>(sql);
+
+        return true;
+    }
+
+    String extractSQL(PersistenceException e) {
+        Throwable t = e.getCause();
+        if (t instanceof ReportingSQLException)
+            return ((ReportingSQLException) t).getSQL();
+        return null;
+    }
+    
+    public class MyListener extends AbstractJDBCListener {
+        public final List<String> sql = new ArrayList<String>();
+
+        @Override
+        public void beforeExecuteStatement(JDBCEvent event) {
+            if (event.getSQL() != null) {
+                sql.add(event.getSQL());
+            }
+        }
+    }
+
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer.java Thu May 21 05:05:39 2009
@@ -140,11 +140,4 @@
     public void setAccounts(List<Account> accounts) {
         this.accounts = accounts;
     }
-
-    
-    
-	
-	public Customer(long id, int status, int count) {
-		
-	}
 }

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java?rev=776951&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java Thu May 21 05:05:39 2009
@@ -0,0 +1,10 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.openjpa.persistence.criteria;
+
+
+@javax.persistence.metamodel.TypesafeMetamodel(value=org.apache.openjpa.persistence.criteria.FemaleUser.class)
+public class FemaleUser_ extends CompUser_  {
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java?rev=776951&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java Thu May 21 05:05:39 2009
@@ -0,0 +1,14 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.openjpa.persistence.criteria;
+
+import javax.persistence.metamodel.Attribute;
+
+@javax.persistence.metamodel.TypesafeMetamodel(value=org.apache.openjpa.persistence.criteria.FrequentFlierPlan.class)
+public class FrequentFlierPlan_ {
+    public static volatile Attribute<FrequentFlierPlan,Integer> annualMiles;
+    public static volatile Attribute<FrequentFlierPlan,String> id;
+    public static volatile Attribute<FrequentFlierPlan,String> name;
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java?rev=776951&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java Thu May 21 05:05:39 2009
@@ -0,0 +1,10 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.openjpa.persistence.criteria;
+
+
+@javax.persistence.metamodel.TypesafeMetamodel(value=org.apache.openjpa.persistence.criteria.MaleUser.class)
+public class MaleUser_ extends CompUser_  {
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java Thu May 21 05:05:39 2009
@@ -24,7 +24,6 @@
 import javax.persistence.Query;
 
 import org.apache.openjpa.persistence.OpenJPAEntityManager;
-import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
 import org.apache.openjpa.persistence.query.DomainObject;
 import org.apache.openjpa.persistence.query.Expression;
 import org.apache.openjpa.persistence.query.OpenJPAQueryBuilder;
@@ -54,12 +53,10 @@
  */
 public class TestCriteria extends SingleEMFTestCase {
 	protected OpenJPAQueryBuilder qb; 
-	private static OpenJPAEntityManagerFactory emf = null;
 	protected StringComparison comparator = new StringComparison();
 	
 	public void setUp() {
-		if (emf == null) {
-		    super.setUp(DROP_TABLES,
+		    super.setUp(CLEAR_TABLES,
 		    	Account.class,
 				Address.class, 
 				Contact.class,
@@ -81,8 +78,6 @@
 				Student.class, 
 				Transaction.class,
 				VideoStore.class);
-			emf = super.emf;
-		} 
 		qb = (QueryBuilderImpl)emf.getDynamicQueryBuilder();
 		emf.createEntityManager();
 	}

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java Thu May 21 05:05:39 2009
@@ -39,7 +39,7 @@
 import org.apache.openjpa.persistence.test.AllowFailure;
 import org.apache.openjpa.persistence.test.SQLListenerTestCase;
 
-public class TestMetaModelTypesafeCriteria extends SQLListenerTestCase {
+public class TestMetaModelTypesafeCriteria extends CriteriaTest {
     protected Entity<Account> account_ = null; 
     protected Embeddable<Address> address_ = null; 
     protected Embeddable<Contact> contact_ = null; 
@@ -66,34 +66,11 @@
     EntityManager em;
     
          
-        public void setUp() {
-             super.setUp(DROP_TABLES,
-                    Account.class,
-                    Address.class, 
-                    Contact.class,
-                    Contractor.class, 
-                    Course.class, 
-                    CreditCard.class, 
-                    Customer.class, 
-                    Department.class, 
-                    Employee.class, 
-                    Exempt.class,
-                    FrequentFlierPlan.class,
-                    Item.class,
-                    LineItem.class,
-                    Manager.class, 
-                    Movie.class,
-                    Person.class, 
-                    Product.class,
-                    Order.class, 
-                    Phone.class,
-                    Photo.class,
-                    Semester.class,
-                    Student.class, 
-                    TransactionHistory.class,
-                    VideoStore.class);
+    public void setUp() {
+             super.setUp((Object[])null); // super will initialize domain
             
             setDictionary();
+            
             cb = (CriteriaBuilder)emf.getQueryBuilder();
             em = emf.createEntityManager();
             Metamodel mm = em.getMetamodel();

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java?rev=776951&r1=776950&r2=776951&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java Thu May 21 05:05:39 2009
@@ -57,24 +57,17 @@
  * TestEJBQLFunction in org.apache.openjpa.persistence.jpql.functions. 
  * 
  */
-public class TestTypeSafeCondExpression extends SQLListenerTestCase {
 
-    private int userid1, userid2, userid3, userid4, userid5;
-    CriteriaBuilder cb;
-    EntityManager em;
+public class TestTypeSafeCondExpression extends CriteriaTest {
 
+    private int userid1, userid2, userid3, userid4, userid5;
     public void setUp() {
-        super.setUp(DROP_TABLES,
-               CompUser.class,
-               Address.class,
-               MaleUser.class,
-               FemaleUser.class);
-    
-        setDictionary();
-        cb = (CriteriaBuilder)emf.getQueryBuilder();
-        em = emf.createEntityManager();
-        startTx(em);
-
+        // super setUp() initializes a fixed domain model
+        super.setUp((Object[])null); 
+        createData();
+    }
+    
+    void createData() {
         Address[] add =
             new Address[]{ new Address("43 Sansome", "SF", "USA", "94104"),
                 new Address("24 Mink", "ANTIOCH", "USA", "94513"),
@@ -88,6 +81,7 @@
         CompUser user4 = createUser("Jacob", "LINUX", add[3], 10, true);
         CompUser user5 = createUser("Famzy", "UNIX", add[4], 29, false);
 
+        startTx(em);
         em.persist(user1);
         userid1 = user1.getUserid();
         em.persist(user2);
@@ -103,13 +97,6 @@
         em.clear();
     }
 
-    void setDictionary() {
-        JDBCConfiguration conf = (JDBCConfiguration)emf.getConfiguration();
-        DBDictionary dict = conf.getDBDictionaryInstance();
-        dict.requiresCastForComparisons = false;
-        dict.requiresCastForMathFunctions = false;
-    }
-
     public void testNothingUsingCriteria() {
         String query = "SELECT o FROM CompUser o";
         CriteriaQuery c = cb.create();
@@ -256,6 +243,7 @@
         em.clear();
     }
     
+    @AllowFailure(message="Parameter processing is broken")
     public void testLikeExprUsingCriteria4() {
         String query = "SELECT o.name FROM CompUser o WHERE o.name LIKE ?1 ESCAPE '|'";
         CriteriaQuery q = cb.create();
@@ -272,6 +260,7 @@
         em.clear();
     }
 
+    @AllowFailure(message="JPQL generates two queries, Criteria only one")
     public void testNullExprUsingCriteria() {
         String query =
             "SELECT o.name FROM CompUser o WHERE o.age IS NOT NULL AND o.computerName = 'PC' ";
@@ -293,6 +282,7 @@
         em.clear();
     }
     
+    @AllowFailure(message="Invalid SQL for Criteria")
     public void testNullExpr2UsingCriteria() {
         String query =
             "SELECT o.name FROM CompUser o WHERE o.address.country IS NULL";
@@ -405,6 +395,7 @@
         em.clear();
     }
     
+    @AllowFailure(message="new() in projection is badly broken")
     public void testConstructorExprUsingCriteria() {
         String query =
             "SELECT NEW org.apache.openjpa.persistence.common.apps.MaleUser(c.name, " + 
@@ -809,44 +800,6 @@
         em.getTransaction().commit();
     }
     
-    void assertEquivalence(CriteriaQuery c, String jpql) {
-        
-        sql.clear(); 
-        List cList = em.createQuery(c).getResultList();
-        assertEquals(1, sql.size()); 
-        String cSQL = sql.get(0);
-        
-        sql.clear();
-        List jList = em.createQuery(jpql).getResultList();
-        assertEquals(1, sql.size());
-        String jSQL = sql.get(0);
-
-        assertEquals(jSQL, cSQL);
-    }
-
-    void assertEquivalence(CriteriaQuery c, String jpql, 
-            Object[] params) {
-         sql.clear();
-        Query q = em.createQuery(c);
-        for (int i = 0; i < params.length; i++) {
-            q.setParameter(i+1, params[i]);
-        }
-        List cList = q.getResultList();
-        assertEquals(1, sql.size());
-        String cSQL = sql.get(0);
-
-        sql.clear();
-        Query q1 = em.createQuery(jpql);
-        for (int i = 0; i < params.length; i++) {
-            q1.setParameter(i+1, params[i]);
-        }
-        List jList = q1.getResultList();
-        assertEquals(1, sql.size());
-        String jSQL = sql.get(0);
-
-        assertEquals(jSQL, cSQL);
-    }
-
     public CompUser createUser(String name, String cName, Address add, int age,
         boolean isMale) {
         CompUser user = null;