You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/01/03 18:19:14 UTC
svn commit: r492226 - in /incubator/cayenne/main/trunk/core:
cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/
cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/
cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/
Author: aadamchik
Date: Wed Jan 3 09:19:13 2007
New Revision: 492226
URL: http://svn.apache.org/viewvc?view=rev&rev=492226
Log:
various fixes related to JPA integration testing
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKTest.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/IdentityColumnsTest.java
incubator/cayenne/main/trunk/core/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityManager.java
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java?view=diff&rev=492226&r1=492225&r2=492226
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataContext.java Wed Jan 3 09:19:13 2007
@@ -793,7 +793,7 @@
/**
* Registers a transient object with the context, recursively registering all
* transient persistent objects attached to this object via relationships. <p/><i>Note
- * that since 3.0 this method takes {@link Persistent} as an argument instead of a
+ * that since 3.0 this method takes Object as an argument instead of a
* {@link DataObject}.</i>
*
* @param object new object that needs to be made persistent.
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java?view=diff&rev=492226&r1=492225&r2=492226
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java Wed Jan 3 09:19:13 2007
@@ -168,13 +168,8 @@
while (objects.hasNext()) {
Persistent object = (Persistent) objects.next();
ObjectId id = object.getObjectId();
- DataRow dataRow = parent.getContext().currentSnapshot(object);
- if (object instanceof DataObject) {
- DataObject dataObject = (DataObject) object;
- dataRow.setReplacesVersion(dataObject.getSnapshotVersion());
- dataObject.setSnapshotVersion(dataRow.getVersion());
- }
+ ObjectId finalId;
// record id change and update attributes for generated ids
if (id.isReplacementIdAttached()) {
@@ -205,15 +200,28 @@
deletedIds.add(id);
}
- modifiedSnapshots.put(replacementId, dataRow);
+ finalId = replacementId;
}
else if (id.isTemporary()) {
throw new CayenneRuntimeException(
"Temporary ID hasn't been replaced on commit: " + object);
}
else {
- modifiedSnapshots.put(id, dataRow);
+ finalId = id;
+
+ }
+
+ // do not take the snapshot until generated columns are processed (see
+ // code above)
+ DataRow dataRow = parent.getContext().currentSnapshot(object);
+
+ if (object instanceof DataObject) {
+ DataObject dataObject = (DataObject) object;
+ dataRow.setReplacesVersion(dataObject.getSnapshotVersion());
+ dataObject.setSnapshotVersion(dataRow.getVersion());
}
+
+ modifiedSnapshots.put(finalId, dataRow);
}
}
}
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKTest.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKTest.java?view=diff&rev=492226&r1=492225&r2=492226
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKTest.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/DataContextEntityWithMeaningfulPKTest.java Wed Jan 3 09:19:13 2007
@@ -20,6 +20,7 @@
package org.apache.cayenne.access;
import java.util.List;
+import java.util.Map;
import org.apache.art.MeaningfulPKDep;
import org.apache.art.MeaningfulPKTest1;
@@ -34,45 +35,57 @@
*/
public class DataContextEntityWithMeaningfulPKTest extends CayenneCase {
- protected DataContext ctxt;
+ protected DataContext context;
protected void setUp() throws Exception {
super.setUp();
deleteTestData();
- ctxt = getDomain().createDataContext();
+ context = getDomain().createDataContext();
}
public void testInsertWithMeaningfulPK() throws Exception {
- MeaningfulPKTest1 obj = (MeaningfulPKTest1) ctxt.newObject("MeaningfulPKTest1");
+ MeaningfulPKTest1 obj = (MeaningfulPKTest1) context
+ .newObject("MeaningfulPKTest1");
obj.setPkAttribute(new Integer(1000));
obj.setDescr("aaa-aaa");
- ctxt.commitChanges();
+ context.commitChanges();
ObjectIdQuery q = new ObjectIdQuery(new ObjectId(
"MeaningfulPKTest1",
MeaningfulPKTest1.PK_ATTRIBUTE_PK_COLUMN,
1000), true, ObjectIdQuery.CACHE_REFRESH);
- assertEquals(1, ctxt.performQuery(q).size());
+ assertEquals(1, context.performQuery(q).size());
}
public void testGeneratedKey() throws Exception {
- MeaningfulPKTest1 obj = (MeaningfulPKTest1) ctxt.newObject("MeaningfulPKTest1");
+ MeaningfulPKTest1 obj = (MeaningfulPKTest1) context
+ .newObject("MeaningfulPKTest1");
obj.setDescr("aaa-aaa");
- ctxt.commitChanges();
+ context.commitChanges();
assertNotNull(obj.getPkAttribute());
- assertSame(obj, DataObjectUtils.objectForPK(ctxt, MeaningfulPKTest1.class, obj
+ assertSame(obj, DataObjectUtils.objectForPK(context, MeaningfulPKTest1.class, obj
.getPkAttribute()));
+
+ int id = DataObjectUtils.intPKForObject(obj);
+
+ Map snapshot = context.getObjectStore().getDataRowCache().getCachedSnapshot(
+ obj.getObjectId());
+ assertNotNull(snapshot);
+ assertTrue(snapshot.containsKey(MeaningfulPKTest1.PK_ATTRIBUTE_PK_COLUMN));
+ assertEquals(new Integer(id), snapshot
+ .get(MeaningfulPKTest1.PK_ATTRIBUTE_PK_COLUMN));
}
public void testChangeKey() throws Exception {
- MeaningfulPKTest1 obj = (MeaningfulPKTest1) ctxt.newObject("MeaningfulPKTest1");
+ MeaningfulPKTest1 obj = (MeaningfulPKTest1) context
+ .newObject("MeaningfulPKTest1");
obj.setPkAttribute(new Integer(1000));
obj.setDescr("aaa-aaa");
- ctxt.commitChanges();
+ context.commitChanges();
obj.setPkAttribute(new Integer(2000));
- ctxt.commitChanges();
+ context.commitChanges();
// assert that object id got fixed
ObjectId id = obj.getObjectId();
@@ -80,29 +93,31 @@
}
public void testToManyRelationshipWithMeaningfulPK1() throws Exception {
- MeaningfulPKTest1 obj = (MeaningfulPKTest1) ctxt.newObject("MeaningfulPKTest1");
+ MeaningfulPKTest1 obj = (MeaningfulPKTest1) context
+ .newObject("MeaningfulPKTest1");
obj.setPkAttribute(new Integer(1000));
obj.setDescr("aaa-aaa");
- ctxt.commitChanges();
+ context.commitChanges();
// must be able to resolve to-many relationship
- ctxt = createDataContext();
- List objects = ctxt.performQuery(new SelectQuery(MeaningfulPKTest1.class));
+ context = createDataContext();
+ List objects = context.performQuery(new SelectQuery(MeaningfulPKTest1.class));
assertEquals(1, objects.size());
obj = (MeaningfulPKTest1) objects.get(0);
assertEquals(0, obj.getMeaningfulPKDepArray().size());
}
public void testToManyRelationshipWithMeaningfulPK2() throws Exception {
- MeaningfulPKTest1 obj = (MeaningfulPKTest1) ctxt.newObject("MeaningfulPKTest1");
+ MeaningfulPKTest1 obj = (MeaningfulPKTest1) context
+ .newObject("MeaningfulPKTest1");
obj.setPkAttribute(new Integer(1000));
obj.setDescr("aaa-aaa");
- ctxt.commitChanges();
+ context.commitChanges();
// must be able to set reverse relationship
- MeaningfulPKDep dep = (MeaningfulPKDep) ctxt.newObject("MeaningfulPKDep");
+ MeaningfulPKDep dep = (MeaningfulPKDep) context.newObject("MeaningfulPKDep");
dep.setToMeaningfulPK(obj);
- ctxt.commitChanges();
+ context.commitChanges();
}
}
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/IdentityColumnsTest.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/IdentityColumnsTest.java?view=diff&rev=492226&r1=492225&r2=492226
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/IdentityColumnsTest.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/access/IdentityColumnsTest.java Wed Jan 3 09:19:13 2007
@@ -296,11 +296,7 @@
context.commitChanges();
assertNotNull(o.getGeneratedColumn());
-
- // Note - this only *appears* to work, but the following assertion will fail. For
- // now we address the issue by giving a warning in the modeler that generated PKs
- // can't be meaningful.
- // assertEquals(new Integer(33333), o.getObjectId().getIdSnapshot().get(
- // MeaningfulGeneratedColumnTest.GENERATED_COLUMN_PK_COLUMN));
+ assertEquals(new Integer(33333), o.getObjectId().getIdSnapshot().get(
+ MeaningfulGeneratedColumnTestEntity.GENERATED_COLUMN_PK_COLUMN));
}
}
Modified: incubator/cayenne/main/trunk/core/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityManager.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityManager.java?view=diff&rev=492226&r1=492225&r2=492226
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityManager.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityManager.java Wed Jan 3 09:19:13 2007
@@ -29,6 +29,7 @@
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.DataObjectUtils;
import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.access.Transaction;
import org.apache.cayenne.jpa.JpaEntityManager;
@@ -58,18 +59,22 @@
@Override
protected <T> T mergeInternal(T entity) {
checkEntityType(entity);
- Persistent dao = (Persistent) entity;
- return (T) context.localObject(dao.getObjectId(), dao);
+ checkNotRemoved(entity);
+ Persistent persistent = (Persistent) entity;
+ return (T) context.localObject(persistent.getObjectId(), persistent);
}
@Override
protected void removeInternal(Object entity) {
checkEntityType(entity);
+ checkAttached(entity);
context.deleteObject((Persistent) entity);
}
@Override
protected <T> T findInternal(Class<T> entityClass, Object primaryKey) {
+ checkEntityType(entityClass);
+ checkIdType(entityClass, primaryKey);
return (T) DataObjectUtils.objectForPK(context, entityClass, primaryKey);
}
@@ -130,6 +135,36 @@
// TODO: andrus, 8/15/2006 - noop
}
+ /**
+ * Checks if an entity is attached to the current EntityManager, throwing
+ * IllegalArgumentException if not.
+ */
+ protected void checkAttached(Object entity) throws IllegalArgumentException {
+ if (entity instanceof Persistent) {
+ Persistent p = (Persistent) entity;
+ if (p.getPersistenceState() == PersistenceState.TRANSIENT
+ || p.getObjectContext() == null) {
+ throw new IllegalArgumentException("entity is detached: " + entity);
+ }
+ }
+ else {
+ throw new IllegalArgumentException("entity must be Persistent: " + entity);
+ }
+ }
+
+ /**
+ * Checks if an entity is not removed in the current EntityManager, throwing
+ * IllegalArgumentException if it is.
+ */
+ protected void checkNotRemoved(Object entity) throws IllegalArgumentException {
+ if (entity instanceof Persistent) {
+ Persistent p = (Persistent) entity;
+ if (p.getPersistenceState() == PersistenceState.DELETED) {
+ throw new IllegalArgumentException("entity is removed: " + entity);
+ }
+ }
+ }
+
protected void checkEntityType(Class entityClass) throws IllegalArgumentException {
if (entityClass == null) {
throw new IllegalArgumentException("Null entity class");
@@ -150,5 +185,9 @@
String className = (entity != null) ? entity.getClass().getName() : "<null>";
throw new IllegalArgumentException("entity must be Persistent: " + className);
}
+ }
+
+ protected void checkIdType(Class entityClass, Object id) {
+
}
}