You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by kw...@apache.org on 2006/09/18 23:58:05 UTC

svn commit: r447584 [6/8] - in /incubator/openjpa/sandboxes/OPENJPA-24: ./ openjpa-all/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-jdbc/src/main/java/org/apache/openjpa/jd...

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java Mon Sep 18 14:57:52 2006
@@ -299,6 +299,10 @@
          * Throw proper exception if given value is a collection/map/array.
          */
         protected void assertNotContainer(Value val, StoreQuery q) {
+            // variables represent container elements, not the container itself
+            if (val.isVariable())
+                return;
+
             Class type;
             if (val instanceof Path) {
                 FieldMetaData fmd = ((Path) val).last();
@@ -628,8 +632,8 @@
         private final ExpressionParser _parser;
         private final ExpressionFactory[] _facts;
         private final QueryExpressions[] _exps;
+        private final Class[] _projTypes;
         private Value[] _inMemOrdering;
-        private Class[] _projTypes;
 
         public DataStoreExecutor(ExpressionStoreQuery q,
             ClassMetaData meta, boolean subclasses,
@@ -644,10 +648,17 @@
                 _facts[i] = q.getExpressionFactory(_metas[i]);
 
             _exps = new QueryExpressions[_metas.length];
-            for (int i = 0; i < _exps.length; i++) {
+            for (int i = 0; i < _exps.length; i++)
                 _exps[i] = parser.eval(parsed, q, _facts[i], _metas[i]);
-                for (int j = 0; j < _exps[i].projections.length; j++)
-                    assertNotContainer(_exps[i].projections[j], q);
+
+            if (_exps[0].projections.length == 0)
+                _projTypes = StoreQuery.EMPTY_CLASSES;
+            else {
+                _projTypes = new Class[_exps[0].projections.length];
+                for (int i = 0; i < _exps[0].projections.length; i++) {
+                    assertNotContainer(_exps[0].projections[i], q);
+                    _projTypes[i] = _exps[0].projections[i].getType();
+                }
             }
         }
 
@@ -706,29 +717,16 @@
                     _inMemOrdering = _parser.eval(_exps[0].orderingClauses,
                         (ExpressionStoreQuery) q, factory, _meta);
                 }
-
-                // use the parsed ordering expression to extract the ordering
-                // value
-                Val val = (Val) _inMemOrdering[orderIndex];
-                return val.evaluate(resultObject, resultObject,
-                    q.getContext().getStoreContext(), params);
             }
+
+            // use the parsed ordering expression to extract the ordering value
+            Val val = (Val) _inMemOrdering[orderIndex];
+            return val.evaluate(resultObject, resultObject,
+                q.getContext().getStoreContext(), params);
         }
 
         public Class[] getProjectionTypes(StoreQuery q) {
-            if (_exps[0].projections.length == 0)
-                return StoreQuery.EMPTY_CLASSES;
-
-            synchronized (this) {
-                if (_projTypes == null) {
-                    // delay creating this array until it is requested b/c
-                    // before execution the types might not be initialized
-                    _projTypes = new Class[_exps[0].projections.length];
-                    for (int i = 0; i < _exps[0].projections.length; i++)
-                        _projTypes[i] = _exps[0].projections[i].getType();
-				}
-				return _projTypes;
-			}
+            return _projTypes;
 		}
 	}
 }

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExtentImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExtentImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExtentImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExtentImpl.java Mon Sep 18 14:57:52 2006
@@ -120,10 +120,11 @@
                 _broker.getClassLoader(), false);
 
             ClassMetaData[] metas;
-            if (meta != null && (meta.isMapped() || (_subs
+            if (meta != null && (!_subs || !meta.isManagedInterface())
+                && (meta.isMapped() || (_subs
                 && meta.getMappedPCSubclassMetaDatas().length > 0)))
                 metas = new ClassMetaData[]{ meta };
-            else if (meta == null && _subs)
+            else if (_subs && (meta == null || meta.isManagedInterface()))
                 metas = repos.getImplementorMetaDatas(_type,
                     _broker.getClassLoader(), false);
             else

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/HollowState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/HollowState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/HollowState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/HollowState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a hollow instance that exists in the data store, but whose
+ * Represents a hollow instance that exists in the data store, but whose
  * state has not been loaded and who is not active in the current transaction
  * (if any). This may be the state of instances returned on ID lookups or by
  * traversing relations, and the state of persistent instances outside of

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PCleanState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PCleanState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PCleanState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PCleanState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a persistent instance that is participating in the current
+ * Represents a persistent instance that is participating in the current
  * transaction, but has not yet been modified.
  *
  * @author Abe White

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedFlushedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedFlushedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedFlushedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedFlushedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a persistent instance that has been deleted in the current
+ * Represents a persistent instance that has been deleted in the current
  * transaction, and that has been flushed to the database.
  *
  * @author Patrick Linskey

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a persistent instance that has been deleted in the current
+ * Represents a persistent instance that has been deleted in the current
  * transaction.
  *
  * @author Abe White

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDirtyState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDirtyState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDirtyState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDirtyState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a persistent instance that is participating in the current
+ * Represents a persistent instance that is participating in the current
  * transaction, and has been modified.
  *
  * @author Abe White

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewDeletedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewDeletedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewDeletedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewDeletedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents an instance that was made persistent, then deleted within the
+ * Represents an instance that was made persistent, then deleted within the
  * current	transaction.
  *
  * @author Abe White

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedFlushedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedFlushedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedFlushedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedFlushedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents an instance that was made persistent within the
+ * Represents an instance that was made persistent within the
  * current	transaction, flushed, deleted, and flushed.
  *
  * @author Patrick Linskey

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewFlushedDeletedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents an instance that was made persistent within the
+ * Represents an instance that was made persistent within the
  * current	transaction, flushed, and subsequently deleted.
  *
  * @author Patrick Linskey

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNewState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents an instance that was made persistent within the
+ * Represents an instance that was made persistent within the
  * current	transaction.
  *
  * @author Abe White

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDeletedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDeletedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDeletedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDeletedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents an instance that was deleted outside a transaction.
+ * Represents an instance that was deleted outside a transaction.
  *
  * @author Steve Kim
  */

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDirtyState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDirtyState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDirtyState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransDirtyState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a persistent instance that has been dirtied outside of
+ * Represents a persistent instance that has been dirtied outside of
  * transaction. This state is only reachable only if the
  * RetainNontransactional property is set.
  *

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransNewState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransNewState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransNewState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransNewState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents an instance that was persisted outside a transaction.
+ * Represents an instance that was persisted outside a transaction.
  *
  * @author Steve Kim
  */

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PNonTransState.java Mon Sep 18 14:57:52 2006
@@ -21,7 +21,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a persistent instance that is not transactional, but that
+ * Represents a persistent instance that is not transactional, but that
  * allows access to persistent data. This state is reachable only if the
  * RetainState property is set.
  *

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java Mon Sep 18 14:57:52 2006
@@ -657,11 +657,11 @@
         ClassMetaData[] metas;
         if (_class == null || _storeQuery.supportsAbstractExecutors())
             metas = new ClassMetaData[]{ meta };
-        else if (meta != null && (_subclasses || meta.isMapped()))
-            metas = new ClassMetaData[]{ meta };
-        else if (_subclasses)
+        else if (_subclasses && (meta == null || meta.isManagedInterface()))
             metas = repos.getImplementorMetaDatas(_class,
                 _broker.getClassLoader(), true);
+        else if (meta != null && (_subclasses || meta.isMapped()))
+            metas = new ClassMetaData[]{ meta };
         else
             metas = StoreQuery.EMPTY_METAS;
 

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java Mon Sep 18 14:57:52 2006
@@ -76,8 +76,8 @@
                 if (proxy == null) {
                     proxy = (Proxy) _sm.newFieldProxy(field);
                     ((Date) proxy).setTime(((Date) objval).getTime());
-                    if (proxy instanceof Timestamp &&
-                        objval instanceof Timestamp)
+                    if (proxy instanceof Timestamp 
+                        && objval instanceof Timestamp)
                         ((Timestamp) proxy).setNanos(((Timestamp) objval).
                             getNanos());
                     ret = true;
@@ -89,12 +89,7 @@
                 proxy = checkProxy();
                 if (proxy == null) {
                     proxy = (Proxy) _sm.newFieldProxy(field);
-                    if (objval != null) {
-                        Calendar pcal = (Calendar) proxy;
-                        Calendar ocal = (Calendar) objval;
-                        pcal.setTime(ocal.getTime());
-                        pcal.setTimeZone(ocal.getTimeZone());
-                    }
+                    ((Calendar) proxy).setTime(((Calendar) objval).getTime());
                     ret = true;
                 }
                 break;

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Mon Sep 18 14:57:52 2006
@@ -38,6 +38,7 @@
 import org.apache.openjpa.meta.ValueStrategies;
 import org.apache.openjpa.util.ApplicationIds;
 import org.apache.openjpa.util.Exceptions;
+import org.apache.openjpa.util.ImplHelper;
 import org.apache.openjpa.util.InternalException;
 import org.apache.openjpa.util.InvalidStateException;
 import org.apache.openjpa.util.ObjectNotFoundException;
@@ -823,8 +824,7 @@
         if (field != -1 && _meta.getField(field).isPrimaryKey())
             return;
 
-        boolean active = _broker.isActive();
-        if (active) {
+        if (_broker.isActive() && !_broker.isTransactionEnding()) {
             if (_broker.getOptimistic())
                 setPCState(_state.beforeOptimisticRead(this, field));
             else
@@ -2927,7 +2927,23 @@
      * Returns whether this instance needs a version check.
      */
     public boolean isVersionCheckRequired() {
-        return (_flags & FLAG_VERSION_CHECK) > 0;
+
+        // explicit flag for version check
+        if ((_flags & FLAG_VERSION_CHECK) > 0)
+            return true;
+
+        // need to check version if we have any dirty fields, unless we
+        // are in a datastore transaction
+        if (ImplHelper.getUpdateFields(this) != null) {
+            if (_broker.getOptimistic()) {
+                return true;
+            } else {
+                return _broker.getConfiguration().
+                    getCompatibilityInstance().getNonOptimisticVersionCheck();
+            }
+        }
+
+        return false;
     }
 
     /**

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TCleanState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TCleanState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TCleanState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TCleanState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a transient instance that is managed by a StateManager and
+ * Represents a transient instance that is managed by a StateManager and
  * may be participating in the current	transaction, but has not yet been
  * modified.
  *

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TDirtyState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TDirtyState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TDirtyState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TDirtyState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a transient instance that is participating in the current
+ * Represents a transient instance that is participating in the current
  * transaction, and has been modified.
  *
  * @author Abe White

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TLoadedState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TLoadedState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TLoadedState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TLoadedState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a temporarily managed transient instance whose fields
+ * Represents a temporarily managed transient instance whose fields
  * are loaded for the purpose of field inspection such
  * as for cascades. This state should be released as soon as inspection
  * is complete.

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TransientState.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TransientState.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TransientState.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/TransientState.java Mon Sep 18 14:57:52 2006
@@ -17,7 +17,7 @@
 
 /**
  * Lifecycle state.
- *  Represents a transient instance; this state lasts only through
+ * Represents a transient instance; this state lasts only through
  * the {@link #initialize} method, which immediately removes the
  * persistence capable instance from management by the OpenJPA runtime.
  *

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Mon Sep 18 14:57:52 2006
@@ -1358,7 +1358,7 @@
         // determind how to evauate a variabe
         if (!val.isVariable())
             return val;
-        else if (handleVar == VAR_PATH)
+        else if (handleVar == VAR_PATH && !(val instanceof Path))
             return newPath(val, val.getMetaData());
         else if (handleVar == VAR_ERROR)
             throw parseException(EX_USER, "unexpected-var",

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/ParseException.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/ParseException.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/ParseException.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/ParseException.java Mon Sep 18 14:57:52 2006
@@ -24,7 +24,7 @@
 /**
  * Signifies that a lexical error occurred when parsing the JPQL statement.
  *
- * @author <a href="mailto:mprudhom@bea.com">Marc Prud'hommeaux</a>
+ * @author Marc Prud'hommeaux
  */
 public class ParseException
     extends UserException {

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java Mon Sep 18 14:57:52 2006
@@ -40,6 +40,7 @@
         (AbstractMetaDataDefaults.class);
 
     private int _access = ClassMetaData.ACCESS_FIELD;
+    private int _identity = ClassMetaData.ID_UNKNOWN;
     private boolean _ignore = true;
     private boolean _interface = true;
     private boolean _pcRegistry = true;
@@ -63,18 +64,34 @@
 
     /**
      * The default access type for base classes with ACCESS_UNKNOWN.
-     * Returns ACCESS_FIELD by default.
+     * ACCESS_FIELD by default.
+     */
+    public int getDefaultAccessType() {
+        return _access;
+    }
+
+    /**
+     * The default access type for base classes with ACCESS_UNKNOWN.
+     * ACCESS_FIELD by default.
      */
     public void setDefaultAccessType(int access) {
         _access = access;
     }
 
     /**
-     * The default access type for base classes with ACCESS_UNKNOWN.
-     * Returns ACCESS_FIELD by default.
+     * The default identity type for unmapped classes without primary 
+     * key fields. ID_UNKNOWN by default.
      */
-    public int getDefaultAccessType() {
-        return _access;
+    public int getDefaultIdentityType() {
+        return _identity;
+    }
+
+    /**
+     * The default identity type for unmapped classes without primary 
+     * key fields. ID_UNKNOWN by default.
+     */
+    public void setDefaultIdentityType(int identity) {
+        _identity = identity;
     }
 
     public int getCallbackMode() {

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Mon Sep 18 14:57:52 2006
@@ -142,7 +142,9 @@
     private Boolean _embedded = null;
     private Boolean _interface = null;
     private Class _impl = null;
-    private int _identity = -1;
+    private List _interfaces = null;
+    private Map _ifaceMap = new HashMap();
+    private int _identity = ID_UNKNOWN;
     private int _idStrategy = ValueStrategies.NONE;
     private int _accessType = ACCESS_UNKNOWN;
 
@@ -374,23 +376,17 @@
      * primary key fields, and {@link #ID_APPLICATION} otherwise.
      */
     public int getIdentityType() {
-        switch (_identity) {
-            case -1:
-                ClassMetaData sup = getPCSuperclassMetaData();
-                if (sup != null && sup.getIdentityType() != ID_UNKNOWN)
-                    _identity = sup.getIdentityType();
-                else {
-                    FieldMetaData[] pks = getPrimaryKeyFields();
-                    if (pks.length > 0)
-                        _identity = ID_APPLICATION;
-                    else
-                        _identity = ID_DATASTORE;
-                }
-                break;
-            case ID_UNKNOWN:
-                if (getPrimaryKeyFields().length > 0)
-                    _identity = ID_APPLICATION;
-                break;
+        if (_identity == ID_UNKNOWN) {
+            ClassMetaData sup = getPCSuperclassMetaData();
+            if (sup != null && sup.getIdentityType() != ID_UNKNOWN)
+                _identity = sup.getIdentityType();
+            else if (getPrimaryKeyFields().length > 0)
+                _identity = ID_APPLICATION;
+            else if (isMapped())
+                _identity = ID_DATASTORE;
+            else
+                _identity = _repos.getMetaDataFactory().getDefaults().
+                    getDefaultIdentityType();
         }
         return _identity;
     }
@@ -701,6 +697,81 @@
     public void setInterfaceImpl(Class impl) {
         _impl = impl;
     }
+
+    /**
+     * Return all explicitly declared interfaces this class implements.
+     */
+    public Class[] getDeclaredInterfaces() {
+        if (_interfaces == null)
+            return _repos.EMPTY_CLASSES;
+
+        return (Class[]) _interfaces.toArray(new Class[_interfaces.size()]);
+    }
+
+    /**
+     * Explicitly declare the given interface among the ones this
+     * class implements.
+     */
+    public void addDeclaredInterface(Class iface) {
+        if (_interfaces == null)
+            _interfaces = new ArrayList();
+        if (!iface.isInterface())
+            throw new MetaDataException(_loc.get("declare-non-interface",
+                this, iface));
+        _interfaces.add(iface);
+    }
+
+    /**
+     * Remove the given interface from the declared list.
+     */
+    public boolean removeDeclaredInterface(Class iface) {
+        if (_interfaces == null)
+            return false;
+        return _interfaces.remove(iface);
+    }
+
+    /**
+     * Alias properties from the given interface during  queries to
+     * the local field.
+     */
+    public void setInterfacePropertyAlias(Class iface, String orig, 
+        String local) {
+        synchronized (_ifaceMap) {
+            Map fields = (Map) _ifaceMap.get(iface);
+            if (fields == null) {
+                fields = new HashMap();
+                _ifaceMap.put(iface, fields);
+            }
+            if (fields.containsKey(orig))
+                throw new MetaDataException(_loc.get("duplicate-iface-alias", 
+                    this, orig, local));
+            fields.put(orig, local);
+        }
+    }
+    
+    /**
+     * Get local field alias for the given interface property.
+     */
+    public String getInterfacePropertyAlias(Class iface, String orig) {
+        synchronized (_ifaceMap) {
+            Map fields = (Map) _ifaceMap.get(iface);
+            if (fields == null)
+                return null;
+            return (String) fields.get(orig);
+        }
+    }
+    
+    /**
+     * Return all aliases property named for the given interface.
+     */
+    public String[] getInterfaceAliasedProperties(Class iface) {
+        synchronized (_ifaceMap) {
+            Map fields = (Map) _ifaceMap.get(iface);
+            if (fields == null)
+                return new String[0];
+            return (String[]) fields.keySet().toArray(new String[0]);
+        }
+    }
     
     /**
      * Return the number of fields that use impl or intermediate data, in
@@ -817,8 +888,8 @@
      * Return the superclass copy of the given field.
      */
     protected FieldMetaData getSuperclassField(FieldMetaData supField) {
-        FieldMetaData fmd = getPCSuperclassMetaData().
-            getField(supField.getName());
+        ClassMetaData sm = getPCSuperclassMetaData();
+        FieldMetaData fmd = sm == null ? null : sm.getField(supField.getName());
         if (fmd == null || fmd.getManagement() != fmd.MANAGE_PERSISTENT)
             throw new MetaDataException(_loc.get("unmanaged-sup-field",
                 supField, this));
@@ -1584,6 +1655,13 @@
         // resolve lifecycle metadata now to prevent lazy threading problems
         _lifeMeta.resolve();
 
+        // record implements in the repository
+        if (_interfaces != null) {
+            for (Iterator it = _interfaces.iterator(); it.hasNext();) {
+                _repos.addDeclaredInterfaceImpl(this, (Class) it.next());
+            }
+        }
+
         // resolve fetch groups
         if (_fgMap != null)
             for (Iterator itr = _fgMap.values().iterator(); itr.hasNext();)
@@ -1636,8 +1714,6 @@
      * Validate mapping data.
      */
     protected void validateMapping(boolean runtime) {
-        if (isMapped() && getIdentityType() == ID_UNKNOWN)
-            throw new MetaDataException(_loc.get("mapped-unknownid", this));
     }
 
     /**
@@ -1676,28 +1752,30 @@
      */
     private void validateIdentity(boolean runtime) {
         // make sure identity types are consistent
-        if (_super != null && _identity != -1
-            && getPCSuperclassMetaData().getIdentityType() != _identity)
+        ClassMetaData sup = getPCSuperclassMetaData();
+        int id = getIdentityType();
+        if (sup != null && sup.getIdentityType() != ID_UNKNOWN
+            && sup.getIdentityType() != id)
             throw new MetaDataException(_loc.get("id-types", _type));
 
         // check for things the data store doesn't support
         Collection opts = _repos.getConfiguration().supportedOptions();
-        if (getIdentityType() == ID_APPLICATION
+        if (id == ID_APPLICATION
             && !opts.contains(OpenJPAConfiguration.OPTION_ID_APPLICATION)) {
             throw new UnsupportedException(_loc.get("appid-not-supported",
                 _type));
         }
-        if (getIdentityType() == ID_DATASTORE
+        if (id == ID_DATASTORE
             && !opts.contains(OpenJPAConfiguration.OPTION_ID_DATASTORE)) {
             throw new UnsupportedException(_loc.get
                 ("datastoreid-not-supported", _type));
         }
 
-        if (getIdentityType() == ID_APPLICATION) {
+        if (id == ID_APPLICATION) {
             if (_idStrategy != ValueStrategies.NONE)
                 throw new MetaDataException(_loc.get("appid-strategy", _type));
             validateAppIdClass(runtime);
-        } else
+        } else if (id != ID_UNKNOWN)
             validateNoPKFields();
 
         int strategy = getIdentityStrategy();
@@ -2201,6 +2279,10 @@
             fg = addDeclaredFetchGroup(fgs[i].getName());
             fg.copy(fgs[i]); 
         }
+
+        // copy iface re-mapping
+        _ifaceMap.clear();
+        _ifaceMap.putAll(meta._ifaceMap);
     }
 
     /**

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java Mon Sep 18 14:57:52 2006
@@ -205,7 +205,7 @@
             return true;
         try {
             Method meth = iface.getDeclaredMethod("is" + StringUtils.capitalize
-                (fmd.getName()), null);
+                (fmd.getName()), (Class[]) null);
             return meth == null;
         } catch (NoSuchMethodException e) {}
         return true;

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java Mon Sep 18 14:57:52 2006
@@ -28,10 +28,16 @@
     extends CallbackModes {
 
     /**
-     * Return the default access type for base persistent class with
+     * Return the default access type for a base persistent class with
      * {@link ClassMetaData#ACCESS_UNKNOWN} access type.
      */
     public int getDefaultAccessType();
+
+    /**
+     * Return the default identity type for unmapped classes without primary
+     * key fields.
+     */
+    public int getDefaultIdentityType();
 
     /**
      * What to do on lifecycle callback exceptions.

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Mon Sep 18 14:57:52 2006
@@ -83,8 +83,8 @@
     public static final int VALIDATE_RUNTIME = 8;
 
     protected static final Class[] EMPTY_CLASSES = new Class[0];
-    protected static final PersistenceAwareClass[] EMPTY_PAWARE_CLASSES = 
-    	new PersistenceAwareClass[0];
+    protected static final NonPersistentMetaData[] EMPTY_NON_PERSISTENT = 
+    	new NonPersistentMetaData[0];
     protected final ClassMetaData[] EMPTY_METAS;
     protected final FieldMetaData[] EMPTY_FIELDS;
     protected final Order[] EMPTY_ORDERS;
@@ -92,11 +92,6 @@
     private static final Localizer _loc = Localizer.forPackage
         (MetaDataRepository.class);
 
-    // number of metadatas that have been registered thus far. This does not
-    // include dynamically-generated subclasses; it is just the count of
-    // user-created metadatas that were registered.
-    private int _count = 0;
-
     // system sequence
     private SequenceMetaData _sysSeq = null;
 
@@ -110,6 +105,7 @@
     private final Map _seqs = new HashMap();
     private final Map _aliases = Collections.synchronizedMap(new HashMap());
     private final Map _pawares = Collections.synchronizedMap(new HashMap());
+    private final Map _nonMapped = Collections.synchronizedMap(new HashMap());
     
     // map of classes to lists of their subclasses
     private final Map _subs = Collections.synchronizedMap(new HashMap());
@@ -741,7 +737,6 @@
             if (_pawares.containsKey(cls))
                 throw new MetaDataException(_loc.get("pc-and-aware", cls));
             _metas.put(cls, meta);
-            _count++;
         }
         return meta;
     }
@@ -862,7 +857,6 @@
             Class impl = (Class) _ifaces.remove(cls);
             if (impl != null)
                 _metas.remove(impl);
-            _count--;
             return true;
         }
         return false;
@@ -871,9 +865,23 @@
     /**
      * Add the given metadata as declared interface implementation.
      */
-    public void addDeclaredInterfaceImpl(ClassMetaData meta, Class iface) {
+    void addDeclaredInterfaceImpl(ClassMetaData meta, Class iface) {
         synchronized (_impls) {
-            addToCollection(_impls, iface, meta.getDescribedType(), false);
+            boolean supDec = false;
+            Collection vals = (Collection) _impls.get(iface);
+            
+            // check to see if the superclass already declares to avoid dups
+            if (vals != null) {
+                ClassMetaData sup = meta.getPCSuperclassMetaData();
+                while (vals != null && sup != null && !supDec) {
+                    supDec = vals.contains(sup.getDescribedType());
+                    sup = sup.getPCSuperclassMetaData();
+                }
+                if (supDec)
+                    return;
+            }
+
+            addToCollection(_impls, iface, meta.getDescribedType(), true);
         }
     }
 
@@ -886,6 +894,15 @@
                 meta, impl));
         _ifaces.put(meta.getDescribedType(), impl);
         _metas.put(impl, meta);
+        addDeclaredInterfaceImpl(meta, meta.getDescribedType());
+        ClassMetaData sup = meta.getPCSuperclassMetaData();
+        while (sup != null) {
+            // record superclass interface info while we can as well as we
+            // will only register concrete superclass in PCRegistry
+            sup.clearSubclassCache();
+            addToCollection(_subs, sup.getDescribedType(), impl, true);
+            sup = (ClassMetaData) sup.getPCSuperclassMetaData();
+        }
     }
     
     synchronized InterfaceImplGenerator getImplGenerator() {
@@ -1007,7 +1024,7 @@
             return EMPTY_METAS;
 
         // get impls of given interface / abstract class
-        processRegisteredClasses();
+        loadRegisteredClassMetaData(envLoader);
         Collection vals = (Collection) _impls.get(cls);
         ClassMetaData meta;
         Collection mapped = null;
@@ -1034,57 +1051,113 @@
     }
      
     /**
-     * Gets the persistence-aware class corresponding to the given class. Can
-     * be null, if the given class is not registered as persistence-aware with
-     * this receiver.
+     * Gets the metadata corresponding to the given persistence-aware class. 
+     * Returns null, if the given class is not registered as 
+     * persistence-aware.
      */
-    public PersistenceAwareClass getPersistenceAware(Class cls) {
-    	return (PersistenceAwareClass)_pawares.get(cls);
+    public NonPersistentMetaData getPersistenceAware(Class cls) {
+    	return (NonPersistentMetaData)_pawares.get(cls);
     }
     
     /**
-     * Gets all the registered persistence-aware classes.
+     * Gets all the metadatas for persistence-aware classes
      * 
-     * @return empty array if no class has been registered
+     * @return empty array if no class has been registered as pers-aware
      */
-    public PersistenceAwareClass[] getPersistenceAwares() {
+    public NonPersistentMetaData[] getPersistenceAwares() {
         synchronized (_pawares) {
             if (_pawares.isEmpty())
-                return EMPTY_PAWARE_CLASSES;
-            return (PersistenceAwareClass[])_pawares.values().toArray
-                (new PersistenceAwareClass[_pawares.size()]);
+                return EMPTY_NON_PERSISTENT;
+            return (NonPersistentMetaData[])_pawares.values().toArray
+                (new NonPersistentMetaData[_pawares.size()]);
         }
     }
 
     /**
-     * Add the given class as persitence-aware.
+     * Add the given class as persistence-aware.
      * 
      * @param cls non-null and must not alreaddy be added as persitence-capable
      */
-    public PersistenceAwareClass addPersistenceAware(Class cls) {
+    public NonPersistentMetaData addPersistenceAware(Class cls) {
     	if (cls == null)
     		return null;
         synchronized(this) {
             if (_pawares.containsKey(cls))
-                return (PersistenceAwareClass)_pawares.get(cls);
+                return (NonPersistentMetaData)_pawares.get(cls);
             if (getCachedMetaData(cls) != null)
                 throw new MetaDataException(_loc.get("pc-and-aware", cls));
-            PersistenceAwareClass result = new PersistenceAwareClass(cls, this);
-            _pawares.put(cls, result);
-            return result;
+            NonPersistentMetaData meta = new NonPersistentMetaData(cls, this,
+                NonPersistentMetaData.TYPE_PERSISTENCE_AWARE);
+            _pawares.put(cls, meta);
+            return meta;
     	}
     }
 
     /**
-     * Remove a persitence-aware class from this receiver.
+     * Remove a persitence-aware class from the repository
      * 
-     * @return true if removed, false if not contained in this receiver
+     * @return true if removed
      */
     public boolean removePersistenceAware(Class cls) {
     	return _pawares.remove(cls) != null;
     }
 
     /**
+     * Gets the metadata corresponding to the given non-mapped interface.
+     * Returns null, if the given interface is not registered as 
+     * persistence-aware.
+     */
+    public NonPersistentMetaData getNonMappedInterface(Class iface) {
+    	return (NonPersistentMetaData)_nonMapped.get(iface);
+    }
+    
+    /**
+     * Gets the corresponding metadatas for all registered, non-mapped
+     * interfaces
+     * 
+     * @return empty array if no non-mapped interface has been registered.
+     */
+    public NonPersistentMetaData[] getNonMappedInterfaces() {
+        synchronized (_nonMapped) {
+            if (_nonMapped.isEmpty())
+                return EMPTY_NON_PERSISTENT;
+            return (NonPersistentMetaData[])_nonMapped.values().toArray
+                (new NonPersistentMetaData[_nonMapped.size()]);
+        }
+    }
+
+    /**
+     * Add the given non-mapped interface to the repository.
+     * 
+     * @param iface the non-mapped interface
+     */
+    public NonPersistentMetaData addNonMappedInterface(Class iface) {
+    	if (iface == null)
+    		return null;
+        if (!iface.isInterface())
+            throw new MetaDataException(_loc.get("not-non-mapped", iface));
+        synchronized(this) {
+            if (_nonMapped.containsKey(iface))
+                return (NonPersistentMetaData)_nonMapped.get(iface);
+            if (getCachedMetaData(iface) != null)
+                throw new MetaDataException(_loc.get("non-mapped-pc", iface));
+            NonPersistentMetaData meta = new NonPersistentMetaData(iface, this,
+                NonPersistentMetaData.TYPE_NON_MAPPED_INTERFACE);
+            _nonMapped.put(iface, meta);
+            return meta;
+    	}
+    }
+
+    /**
+     * Remove a non-mapped interface from the repository
+     * 
+     * @return true if removed
+     */
+    public boolean removeNonMappedInterface(Class iface) {
+    	return _nonMapped.remove(iface) != null;
+    }
+
+    /**
      * Clear the cache of parsed metadata. This method also clears the
      * internal {@link MetaDataFactory MetaDataFactory}'s cache.
      */
@@ -1102,6 +1175,7 @@
         _factory.clear();
         _aliases.clear();
         _pawares.clear();
+        _nonMapped.clear();
     }
 
     /**
@@ -1317,8 +1391,6 @@
      * Update the list of implementations of base classes and interfaces.
      */
     private void updateImpls(Class cls, Class leastDerived, Class check) {
-        if (_factory.getDefaults().isDeclaredInterfacePersistent())
-            return;
         // allow users to query on common non-pc superclasses
         Class sup = check.getSuperclass();
         if (leastDerived == cls && sup != null && sup != Object.class) {
@@ -1326,6 +1398,10 @@
             updateImpls(cls, leastDerived, sup);
         }
 
+        // allow users to query on any implemented interfaces unless defaults 
+        // say the user must create persistent interfaces explicitly
+        if (!_factory.getDefaults().isDeclaredInterfacePersistent())
+            return;
         Class[] ints = check.getInterfaces();
         for (int i = 0; i < ints.length; i++) {
             // don't map java-standard interfaces

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java Mon Sep 18 14:57:52 2006
@@ -93,6 +93,10 @@
         return ClassMetaData.ACCESS_UNKNOWN;
     }
 
+    public int getDefaultIdentityType() {
+        return ClassMetaData.ID_UNKNOWN;
+    }
+
     public int getCallbackMode() {
         return CALLBACK_IGNORE;
     }

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java Mon Sep 18 14:57:52 2006
@@ -433,10 +433,11 @@
         _attach = vmd.getCascadeAttach();
         _refresh = vmd.getCascadeRefresh();
         _typeOverride = vmd.getTypeOverride();
+        _serialized = vmd.isSerialized();
         if (_embeddedMeta != null)
             _embeddedMeta.setDescribedType(vmd.getDeclaredType());
 
-        // don't allow copy to override embedded; don't copy serialized at all
+        // don't allow copy to override embedded
         if (_embedded == null)
             setEmbedded(vmd.isEmbedded());
     }

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/java/org/apache/openjpa/util/ImplHelper.java Mon Sep 18 14:57:52 2006
@@ -17,6 +17,7 @@
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
@@ -139,7 +140,8 @@
      */
     public static Object generateFieldValue(StoreContext ctx,
         FieldMetaData fmd) {
-        return generateValue(ctx, null, fmd, fmd.getDeclaredTypeCode());
+        return generateValue(ctx, fmd.getDefiningMetaData(), fmd, 
+            fmd.getDeclaredTypeCode());
     }
 
     /**
@@ -163,6 +165,30 @@
             default:
                 return null;
         }
+    }
+
+    /** 
+     * Returns the fields of the state that require an update. 
+     *  
+     * @param  sm  the state to check
+     * @return the BitSet of fields that need update, or null if none
+     */
+    public static BitSet getUpdateFields(OpenJPAStateManager sm) {
+
+        if ((sm.getPCState() == PCState.PDIRTY
+            && (!sm.isFlushed() || sm.isFlushedDirty()))
+            || (sm.getPCState() == PCState.PNEW && sm.isFlushedDirty())) {
+            BitSet dirty = sm.getDirty();
+            if (sm.isFlushed()) {
+                dirty = (BitSet) dirty.clone();
+                dirty.andNot(sm.getFlushed());
+            }
+
+            if (dirty.length() > 0)
+                return dirty;
+        }
+
+        return null;
     }
 
     /**

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/event/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/event/localizer.properties?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/event/localizer.properties (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/event/localizer.properties Mon Sep 18 14:57:52 2006
@@ -75,4 +75,5 @@
 tcp-wrong-version-error: Received packet from "{0}" with invalid version \
 	number. Check if a prior release of OpenJPA is being used on this host.
 bean-constructor: Could not instantiate class {0}.
-method-notfound: Method "{1}" not found in class "{0}".
+method-notfound: Method "{1}" with arguments of type: {2} \
+    not found in class "{0}".

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties Mon Sep 18 14:57:52 2006
@@ -48,6 +48,10 @@
 	marked for rollback only.  The transaction will be rolled back instead.
 refresh-flushed: You cannot refresh an instance that has been flushed to the \
 	data store.
+pc-loader-different: Attempt to cast instance "{0}" to PersistenceCapable failed. \
+    The object implemented org.apache.openjpa.enhance.PersistenceCapable, \
+    but the instance of that interface was loaded by two different ClassLoaders: \
+    "{1}" and "{2}".
 pc-cast: Attempt to cast instance "{0}" to PersistenceCapable failed.  Ensure \
 	that it has been enhanced.
 del-instance: The instance of type "{0}" with oid "{1}" no longer exists in \

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties Mon Sep 18 14:57:52 2006
@@ -20,6 +20,8 @@
 found-pcs: Found {0} classes with metadata in {1} milliseconds.
 not-managed-interface: Cannot set type "{1}" as interface "{0}" implementor. \
     "{0}" is not a managed interface.
+declare-non-interface: Cannot declare on type "{0}" interface "{1}" as it is \
+    not an interface.
 unmanaged-sup-field: Superclass field "{0}" is mapped in the metadata for \
 	subclass "{1}", but is not a persistent field.
 bad-discover-class: The class "{0}" listed in the openjpa.MetaDataFactory \
@@ -250,9 +252,6 @@
 	access. Only one access method is permitted.
 unsupported-id-type: Type "{0}" declares field "{1}" as a primary key, but \
 	keys of type "{2}" are not supported.
-mapped-unknownid: Type "{0}" is mapped to the data store, but does not have \
-	an identity type.  Alter its metadata to declare datastore identity or \
-	to have at least one primary key field.
 empty-fg-name: Attempt to add an unnamed fetch group to "{0}".
 invalid-fg-depth: Fetch group "{0}" specifies invalid recursion depth "{2}" \
     for field "{1}". Recursion depth must be greater than or equal to -1.
@@ -262,8 +261,13 @@
     group "{0}".
 unknown-fg: Attempt to add fetch group "{0}" to type field "{1}" failed. \
     This fetch group has not been defined.
+duplicate-iface-alias: Cannot alias interface "{0}" property "{1}" to local \
+    field "{2}" as the property has already been aliased.
 pc-and-aware: Attempt to register "{0}" as a persistence-aware class failed. \
-	The same class has been registered as persistence-capable already.=======
+	The same class has been registered as persistence-capable already.
+not-non-mapped: Type "{0}" cannot be a non-mapped interface as the class is \
+    not an interface
+non-mapped-pc: A non-mapped interface cannot also be mapped.
 no-metadatafactory: No configuration properties were found. If you are \
     using Ant, please see the <properties> or <propertiesFile> attributes \
     of the task''s nested <config> element.

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java Mon Sep 18 14:57:52 2006
@@ -42,6 +42,7 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.MissingResourceException;
@@ -372,11 +373,19 @@
         if (_mds != null)
             return _mds;
         PropertyDescriptor[] pds = getPropertyDescriptors();
-        _mds = new MethodDescriptor[pds.length * 2];
+
+        List descs = new LinkedList(); 
         for (int i = 0; i < pds.length; i++) {
-            _mds[i * 2] = new MethodDescriptor(pds[i].getWriteMethod());
-            _mds[(i * 2) + 1] = new MethodDescriptor(pds[i].getReadMethod());
+            Method write = pds[i].getWriteMethod();
+            Method read = pds[i].getReadMethod();
+            if (read != null && write != null) {
+                descs.add(new MethodDescriptor(write));
+                descs.add(new MethodDescriptor(read));
+            }
         }
+
+        _mds = (MethodDescriptor[])descs.
+            toArray(new MethodDescriptor[descs.size()]);
         return _mds;
     }
 

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configurations.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configurations.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configurations.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/Configurations.java Mon Sep 18 14:57:52 2006
@@ -18,8 +18,10 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.Properties;
@@ -30,6 +32,7 @@
 
 import org.apache.commons.lang.exception.NestableRuntimeException;
 import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.util.JavaVersions;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.lib.util.Options;
 import org.apache.openjpa.lib.util.ParseException;
@@ -466,36 +469,40 @@
             (ConfigurationProvider.class, loader);
         ConfigurationProvider provider = null;
         int providerCount = 0;
-        StringBuffer errs = null;
+        List errs = null;
         for (int i = 0; i < impls.length; i++) {
-            provider = newProvider(impls[i]);
-            if (provider == null)
-                continue;
-
-            providerCount++;
             try {
+                provider = (ConfigurationProvider) impls[i].newInstance();
+                if (provider == null)
+                    continue;
+
+                providerCount++;
+
                 if ((globals && provider.loadGlobals(loader))
                     || (!globals && provider.loadDefaults(loader)))
                     return provider;
             } catch (MissingResourceException mre) {
                 throw mre;
-            } catch (Exception e) {
-                if (errs == null)
-                    errs = new StringBuffer();
-                else
-                    errs.append(", ");
-                errs.append(e.toString());
+            } catch (Throwable t) {
+                (errs == null ? errs = new ArrayList() : errs).add(t);
             }
         }
 
         String type = (globals) ? "globals" : "defaults";
+        MissingResourceException ex = null;
+
         if (errs != null)
-            throw new MissingResourceException(errs.toString(),
+            ex = new MissingResourceException(errs.toString(),
                 Configurations.class.getName(), type);
-        if (providerCount == 0)
-            throw new MissingResourceException(_loc.get ("no-providers", 
+        else if (providerCount == 0)
+            ex = new MissingResourceException(_loc.get ("no-providers", 
                 ConfigurationProvider.class.getName()).getMessage(),
                 Configurations.class.getName(), type);
+
+        if (ex != null)
+            throw (MissingResourceException) JavaVersions.initCause(ex,
+                errs.size() == 0 ? null : (Throwable) errs.get(0));
+
         return null;
     }
 

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/test/java/org/apache/openjpa/lib/test/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/test/java/org/apache/openjpa/lib/test/AbstractTestCase.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/test/java/org/apache/openjpa/lib/test/AbstractTestCase.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-lib/src/test/java/org/apache/openjpa/lib/test/AbstractTestCase.java Mon Sep 18 14:57:52 2006
@@ -1029,7 +1029,7 @@
      * A ClassLoader that is completely isolated with respect to
      * any classes that are loaded in the System ClassLoader.
      *
-     * @author <a href="mailto:marc@solarmetric.com">Marc Prud'hommeaux</a>
+     * @author Marc Prud'hommeaux
      */
     private static class IsolatedClassLoader extends NestedClassLoader {
 
@@ -1460,7 +1460,7 @@
      * if a test hasn't completed in a shorted amount of time than
      * the global test timeout.
      *
-     * @author <a href="mailto:marc@solarmetric.com">Marc Prud'hommeaux</a>
+     * @author Marc Prud'hommeaux
      */
     private static class WatchdogThread extends Thread {
 

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlan.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlan.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlan.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlan.java Mon Sep 18 14:57:52 2006
@@ -15,15 +15,10 @@
  */
 package org.apache.openjpa.persistence.jdbc;
 
-import org.apache.openjpa.jdbc.kernel.DelegatingJDBCFetchConfiguration;
 import org.apache.openjpa.jdbc.kernel.EagerFetchModes;
-import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
 import org.apache.openjpa.jdbc.kernel.LRSSizes;
 import org.apache.openjpa.jdbc.sql.JoinSyntaxes;
-import org.apache.openjpa.kernel.DelegatingFetchConfiguration;
-import org.apache.openjpa.kernel.FetchConfiguration;
 import org.apache.openjpa.persistence.FetchPlan;
-import org.apache.openjpa.persistence.PersistenceExceptions;
 
 /**
  * JDBC extensions to the fetch plan.
@@ -36,27 +31,87 @@
 public interface JDBCFetchPlan
     extends FetchPlan, EagerFetchModes, LRSSizes, JoinSyntaxes {
 
+    /**
+     * Eager fetch mode in loading relations.
+     * 
+     * @see EagerFetchModes
+     */
     public int getEagerFetchMode();
 
+    /**
+     * Eager fetch mode in loading relations.
+     * 
+     * @see EagerFetchModes
+     */
     public JDBCFetchPlan setEagerFetchMode(int mode);
 
+    /**
+     * Eager fetch mode in loading subclasses.
+     * 
+     * @see EagerFetchModes
+     */
     public int getSubclassFetchMode();
 
+    /**
+     * Eager fetch mode in loading subclasses.
+     * 
+     * @see EagerFetchModes
+     */
     public JDBCFetchPlan setSubclassFetchMode(int mode);
 
+    /**
+     * Type of JDBC result set to use for query results.
+     * 
+     * @see java.sql.ResultSet
+     */
     public int getResultSetType();
 
+    /**
+     * Type of JDBC result set to use for query results.
+     * 
+     * @see java.sql.ResultSet
+     */
     public JDBCFetchPlan setResultSetType(int type);
 
+    /**
+     * Result set fetch direction.
+     * 
+     * @see java.sql.ResultSet
+     */
     public int getFetchDirection();
 
+    /**
+     * Result set fetch direction.
+     * 
+     * @see java.sql.ResultSet
+     */
     public JDBCFetchPlan setFetchDirection(int direction);
 
+    /**
+     * How to determine the size of a large result set.
+     * 
+     * @see LRSSizes
+     */
     public int getLRSSize();
 
+    /**
+     * How to determine the size of a large result set.
+     * 
+     * @see LRSSizes
+     */
     public JDBCFetchPlan setLRSSize(int lrsSize);
 
+    /**
+     * SQL join syntax.
+     *
+     * @see JoinSyntaxes
+     */
     public int getJoinSyntax();
 
+    /**
+     * SQL join syntax.
+     *
+     * @see JoinSyntaxes
+     */
     public JDBCFetchPlan setJoinSyntax(int syntax);
 }

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlanImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlanImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlanImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCFetchPlanImpl.java Mon Sep 18 14:57:52 2006
@@ -31,7 +31,6 @@
  *
  * @since 0.4.0
  * @author Abe White
- * @published
  */
 public class JDBCFetchPlanImpl
     extends FetchPlanImpl

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java Mon Sep 18 14:57:52 2006
@@ -15,6 +15,8 @@
  */
 package org.apache.openjpa.persistence.simple;
 
+import java.util.HashMap;
+import java.util.Map;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityTransaction;
@@ -27,30 +29,25 @@
 /**
  * Simple test case to get an EntityManager and perform some basic operations.
  *
- * @author <a href="mailto:mprudhom@bea.com">Marc Prud'hommeaux</a>
+ * @author Marc Prud'hommeaux
  */
 public class TestPersistence
     extends TestCase {
 
     private EntityManagerFactory emf;
 
-    protected EntityManager getEM() {
-        if (emf == null)
-            emf = Persistence.createEntityManagerFactory("simple-emf-test");
-        assertNotNull(emf);
-
-        EntityManager em = emf.createEntityManager();
-        assertNotNull(em);
-
-        return em;
+    public void setUp() {
+        Map props = new HashMap();
+        props.put("openjpa.MetaDataFactory",
+            "jpa(Types=" + AllFieldTypes.class.getName() + ")");
+        emf = Persistence.createEntityManagerFactory("test", props);
     }
 
-    public void tearDown()
-        throws Exception {
-        super.tearDown();
-
+    public void tearDown() {
+        if (emf == null)
+            return;
         try {
-            EntityManager em = getEM();
+            EntityManager em = emf.createEntityManager();
             em.getTransaction().begin();
             em.createQuery("delete from AllFieldTypes").executeUpdate();
             em.getTransaction().commit();
@@ -61,11 +58,10 @@
     }
 
     public void testCreateEntityManager() {
-        EntityManager em = getEM();
+        EntityManager em = emf.createEntityManager();
 
         EntityTransaction t = em.getTransaction();
         assertNotNull(t);
-
         t.begin();
         t.setRollbackOnly();
         t.rollback();
@@ -75,14 +71,11 @@
         OpenJPAEntityManager ojem = (OpenJPAEntityManager) em;
         ojem.getFetchPlan().setMaxFetchDepth(-1);
         assertEquals(-1, ojem.getFetchPlan().getMaxFetchDepth());
-
         em.close();
     }
 
     public void testPersist() {
-        EntityManager em;
-
-        em = getEM();
+        EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
         em.persist(new AllFieldTypes());
         em.getTransaction().commit();
@@ -90,9 +83,7 @@
     }
 
     public void testQuery() {
-        EntityManager em;
-
-        em = getEM();
+        EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
         AllFieldTypes aft = new AllFieldTypes();
         aft.setStringField("foo");
@@ -101,7 +92,7 @@
         em.getTransaction().commit();
         em.close();
 
-        em = getEM();
+        em = emf.createEntityManager();
         em.getTransaction().begin();
         assertEquals(1, em.createQuery
             ("select x from AllFieldTypes x where x.stringField = 'foo'").

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml Mon Sep 18 14:57:52 2006
@@ -1,24 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             version="1.0">
-
-    <persistence-unit name="simple-emf-test">
-
-        <!-- This is not needed if OpenJPA is the only persistence provider
-             in the classpath.
-          <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
-          -->
-
-        <class>org.apache.openjpa.persistence.simple.AllFieldTypes</class>
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    version="1.0">
 
+    <persistence-unit name="test">
+        <!-- 
+        <provider>
+            org.apache.openjpa.persistence.PersistenceProviderImpl
+        </provider>
+        -->
         <properties>
             <property name="openjpa.ConnectionDriverName"
-                      value="org.apache.commons.dbcp.BasicDataSource"/>
+                value="org.apache.commons.dbcp.BasicDataSource"/>
             <property name="openjpa.ConnectionProperties"
-                      value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,Url=jdbc:derby:target/database/openjpa-test-database;create=true,MaxActive=100,MaxWait=10000,TestOnBorrow=true"/>
+                value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,Url=jdbc:derby:target/database/openjpa-test-database;create=true,MaxActive=100,MaxWait=10000,TestOnBorrow=true"/>
             <property name="openjpa.jdbc.SynchronizeMappings"
-                      value="buildSchema(ForeignKeys=true)"/>
+                value="buildSchema(ForeignKeys=true)"/>
         </properties>
     </persistence-unit>
 </persistence>

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Mon Sep 18 14:57:52 2006
@@ -472,11 +472,9 @@
         if (isMetaDataMode()) {
             // while the spec only provides for embedded exclusive, it doesn't
             // seem hard to support otherwise
-            if (entity == null) {
+            if (entity == null)
                 meta.setEmbeddedOnly(true);
-                if (_cls.isAnnotationPresent(MappedSuperclass.class))
-                    meta.setIdentityType(ClassMetaData.ID_UNKNOWN);
-            } else {
+            else {
                 meta.setEmbeddedOnly(false);
                 if (!StringUtils.isEmpty(entity.name()))
                     meta.setTypeAlias(entity.name());
@@ -1202,7 +1200,7 @@
         if (!anno.optional())
             fmd.setNullValue(FieldMetaData.NULL_EXCEPTION);
         if (anno.targetEntity() != void.class)
-            fmd.setDeclaredType(anno.targetEntity());
+            fmd.setTypeOverride(anno.targetEntity());
         setCascades(fmd, anno.cascade());
     }
 
@@ -1225,7 +1223,7 @@
         if (isMappingOverrideMode() && !StringUtils.isEmpty(anno.mappedBy()))
             fmd.setMappedBy(anno.mappedBy());
         if (anno.targetEntity() != void.class)
-            fmd.setDeclaredType(anno.targetEntity());
+            fmd.setTypeOverride(anno.targetEntity());
         setCascades(fmd, anno.cascade());
     }
 
@@ -1463,9 +1461,9 @@
             props = null;
         } else if (seq.indexOf('(') != -1) // plugin
         {
-            seq = null;
             clsName = Configurations.getClassName(seq);
             props = Configurations.getProperties(seq);
+            seq = null;
         } else {
             clsName = SequenceMetaData.IMPL_NATIVE;
             props = null;

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java Mon Sep 18 14:57:52 2006
@@ -112,8 +112,9 @@
         _factory.lock();
         try {
             if (_queryCache == null)
-                _queryCache = new QueryResultCacheImpl(_factory.getConfiguration().
-                    getDataCacheManagerInstance().getSystemQueryCache());
+                _queryCache = new QueryResultCacheImpl(_factory.
+                    getConfiguration().getDataCacheManagerInstance().
+                    getSystemQueryCache());
             return _queryCache;
         } finally {
             _factory.unlock();

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java Mon Sep 18 14:57:52 2006
@@ -15,22 +15,17 @@
  */
 package org.apache.openjpa.persistence;
 
-import java.util.Iterator;
 import java.util.List;
 
-import org.apache.openjpa.kernel.DelegatingExtent;
-
 /**
  * An extent is a logical view of all instances of a class.
  *
  * @author Abe White
- * @author Pinaki Poddar
  * @since 0.4.0
  * @published
  */
 public interface Extent<T>
     extends Iterable<T> {
-
 
     /**
      * Delegate.

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ExtentImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ExtentImpl.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ExtentImpl.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ExtentImpl.java Mon Sep 18 14:57:52 2006
@@ -24,7 +24,6 @@
  * An extent is a logical view of all instances of a class.
  *
  * @author Abe White
- * @author Pinaki Poddar
  * @since 0.4.1
  * @nojavadoc
  */
@@ -34,7 +33,6 @@
     private final EntityManagerImpl _em;
     private final DelegatingExtent _extent;
     private FetchPlan _fetch = null;
-
 
     /**
      * Constructor; supply delegate.

Modified: incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java?view=diff&rev=447584&r1=447583&r2=447584
==============================================================================
--- incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java (original)
+++ incubator/openjpa/sandboxes/OPENJPA-24/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java Mon Sep 18 14:57:52 2006
@@ -15,13 +15,9 @@
  */
 package org.apache.openjpa.persistence;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Iterator;
 import javax.persistence.LockModeType;
 
-import org.apache.openjpa.kernel.DelegatingFetchConfiguration;
 import org.apache.openjpa.kernel.FetchConfiguration;
 import org.apache.openjpa.meta.FetchGroup;
 
@@ -56,7 +52,6 @@
      */
     public static final int DEFAULT = FetchConfiguration.DEFAULT;
 
-
     /**
      * Delegate.
      */
@@ -120,6 +115,7 @@
      * use when loading objects.
      */
     public FetchPlan addFetchGroups(String... groups);
+
     /**
      * Adds <code>groups</code> to the set of fetch group names to
      * use when loading objects.