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 2006/10/08 02:54:17 UTC
svn commit: r454052 - in
/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src:
main/java/org/apache/cayenne/ main/java/org/apache/cayenne/access/
main/java/org/apache/cayenne/intercept/ test/java/org/apache/cayenne/
Author: aadamchik
Date: Sat Oct 7 17:54:16 2006
New Revision: 454052
URL: http://svn.apache.org/viewvc?view=rev&rev=454052
Log:
CAY-679 - ObjectContext.registerNewObject() added
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/BaseContext.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/CayenneContext.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/ObjectContext.java
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/intercept/ObjectContextDecorator.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/MockObjectContext.java
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/BaseContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/BaseContext.java?view=diff&rev=454052&r1=454051&r2=454052
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/BaseContext.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/BaseContext.java Sat Oct 7 17:54:16 2006
@@ -58,6 +58,8 @@
public abstract Collection modifiedObjects();
public abstract Persistent newObject(Class persistentClass);
+
+ public abstract void registerNewObject(Persistent object);
public abstract Collection newObjects();
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/CayenneContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/CayenneContext.java?view=diff&rev=454052&r1=454051&r2=454052
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/CayenneContext.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/CayenneContext.java Sat Oct 7 17:54:16 2006
@@ -309,9 +309,25 @@
+ persistentClass);
}
- synchronized (graphManager) {
- return createNewObject(new ObjectId(entity.getName()));
+ ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
+ entity.getName());
+ Persistent object = (Persistent) descriptor.createObject();
+ registerNewObject(object, entity.getName(), descriptor);
+ return object;
+ }
+
+ /**
+ * @since 3.0
+ */
+ public void registerNewObject(Persistent object) {
+ if (object == null) {
+ throw new NullPointerException("An attempt to register null object.");
}
+
+ ObjEntity entity = getEntityResolver().lookupObjEntity(object.getClass());
+ ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
+ entity.getName());
+ registerNewObject(object, entity.getName(), descriptor);
}
/**
@@ -468,11 +484,11 @@
// ****** non-public methods ******
- Persistent createNewObject(ObjectId id) {
- ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
- id.getEntityName());
-
- Persistent object = (Persistent) descriptor.createObject();
+ void registerNewObject(
+ Persistent object,
+ String entityName,
+ ClassDescriptor descriptor) {
+ ObjectId id = new ObjectId(entityName);
// must follow this exact order of property initialization per CAY-653, i.e. have
// the id and the context in place BEFORE setPersistence is called
@@ -481,10 +497,11 @@
object.setPersistenceState(PersistenceState.NEW);
descriptor.injectValueHolders(object);
- graphManager.registerNode(object.getObjectId(), object);
- graphManager.nodeCreated(object.getObjectId());
- return object;
+ synchronized (graphManager) {
+ graphManager.registerNode(object.getObjectId(), object);
+ graphManager.nodeCreated(object.getObjectId());
+ }
}
Persistent createFault(ObjectId id) {
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/ObjectContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/ObjectContext.java?view=diff&rev=454052&r1=454051&r2=454052
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/ObjectContext.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/ObjectContext.java Sat Oct 7 17:54:16 2006
@@ -84,11 +84,20 @@
Persistent newObject(Class persistentClass);
/**
+ * Registers a transient object with the context. The difference with
+ * {@link #newObject(Class)} is that a user creates an object herself, before
+ * attaching it to the context, instead of relying on Cayenne to do that.
+ *
+ * @param object new object that needs to be made persistent.
+ * @since 3.0
+ */
+ void registerNewObject(final Persistent object);
+
+ /**
* Schedules a persistent object for deletion on next commit.
*
- * @throws DeleteDenyException if a
- * {@link org.apache.cayenne.map.DeleteRule#DENY} delete rule is
- * applicable for object deletion.
+ * @throws DeleteDenyException if a {@link org.apache.cayenne.map.DeleteRule#DENY}
+ * delete rule is applicable for object deletion.
*/
void deleteObject(Persistent object) throws DeleteDenyException;
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=454052&r1=454051&r2=454052
==============================================================================
--- 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 Sat Oct 7 17:54:16 2006
@@ -398,7 +398,7 @@
awakeFromDeserialization();
return super.getChannel();
}
-
+
/**
* Returns a DataDomain used by this DataContext. DataDomain is looked up in the
* DataChannel hierarchy. If a channel is not a DataDomain or a DataContext, null is
@@ -776,11 +776,13 @@
/**
* Registers a transient object with the context, recursively registering all
- * transient DataObjects attached to this object via relationships.
+ * transient DataObjects attached to this object via relationships. <p/><i>Note that
+ * since 3.0 this method takes {@link Persistent} as an argument instead of a
+ * {@link DataObject}.</i>
*
* @param object new object that needs to be made persistent.
*/
- public void registerNewObject(final DataObject object) {
+ public void registerNewObject(final Persistent object) {
if (object == null) {
throw new NullPointerException("Can't register null object.");
}
@@ -795,11 +797,11 @@
// sanity check - maybe already registered
if (object.getObjectId() != null) {
- if (object.getDataContext() == this) {
+ if (object.getObjectContext() == this) {
// already registered, just ignore
return;
}
- else if (object.getDataContext() != null) {
+ else if (object.getObjectContext() != null) {
throw new IllegalStateException(
"DataObject is already registered with another DataContext. "
+ "Try using 'localObjects()' instead.");
@@ -809,7 +811,7 @@
object.setObjectId(new ObjectId(entity.getName()));
}
- object.setDataContext(this);
+ object.setObjectContext(this);
object.setPersistenceState(PersistenceState.NEW);
getObjectStore().recordObjectCreated(object);
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/intercept/ObjectContextDecorator.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/intercept/ObjectContextDecorator.java?view=diff&rev=454052&r1=454051&r2=454052
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/intercept/ObjectContextDecorator.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/intercept/ObjectContextDecorator.java Sat Oct 7 17:54:16 2006
@@ -81,6 +81,10 @@
public Persistent newObject(Class persistentClass) {
return context.newObject(persistentClass);
}
+
+ public void registerNewObject(Persistent object) {
+ context.registerNewObject(object);
+ }
public Collection newObjects() {
return context.newObjects();
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/MockObjectContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/MockObjectContext.java?view=diff&rev=454052&r1=454051&r2=454052
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/MockObjectContext.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/test/java/org/apache/cayenne/MockObjectContext.java Sat Oct 7 17:54:16 2006
@@ -98,6 +98,9 @@
public Persistent newObject(Class persistentClass) {
return null;
}
+
+ public void registerNewObject(Persistent object) {
+ }
public void prepareForAccess(Persistent persistent, String property) {
}