You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/07/09 09:42:30 UTC
[2/4] git commit: ISIS-460: synchronize adapters for deleted pojos.
ISIS-460: synchronize adapters for deleted pojos.
This follows on from ISIS-459.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/5bbaa954
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/5bbaa954
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/5bbaa954
Branch: refs/heads/master
Commit: 5bbaa954222303d4674ac0157636680f08079a06
Parents: 4ab4ac0
Author: Dan Haywood <da...@apache.org>
Authored: Tue Jul 9 08:38:24 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Jul 9 08:38:24 2013 +0100
----------------------------------------------------------------------
.../persistence/FrameworkSynchronizer.java | 32 +++++++++++++++++++-
.../persistence/IsisLifecycleListener.java | 8 ++++-
.../system/transaction/IsisTransaction.java | 4 ++-
3 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/5bbaa954/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java
index 35e6099..fd11872 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/FrameworkSynchronizer.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ResolveState;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
@@ -46,6 +47,7 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedCallbackFac
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.runtime.persistence.PersistorUtil;
import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.AdapterManagerSpi;
import org.apache.isis.core.runtime.system.persistence.OidGenerator;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
@@ -63,7 +65,7 @@ public class FrameworkSynchronizer {
* Just used for logging.
*/
public enum CalledFrom {
- EVENT_LOAD, EVENT_STORE, EVENT_PREDIRTY, OS_QUERY, OS_RESOLVE, OS_LAZILYLOADED, EVENT_PREDELETE
+ EVENT_LOAD, EVENT_STORE, EVENT_PREDIRTY, OS_QUERY, OS_RESOLVE, OS_LAZILYLOADED, EVENT_PREDELETE, EVENT_POSTDELETE
}
@@ -109,6 +111,9 @@ public class FrameworkSynchronizer {
PersistorUtil.toEndState(adapter);
}
adapter.setVersion(datastoreVersion);
+ if(pojo.jdoIsDeleted()) {
+ adapter.changeState(ResolveState.DESTROYED);
+ }
ensureFrameworksInAgreement(pojo);
}
@@ -229,6 +234,21 @@ public class FrameworkSynchronizer {
}
+ public void postDeleteProcessingFor(final PersistenceCapable pojo, final CalledFrom calledFrom) {
+ withLogging(pojo, new Runnable() {
+ @Override
+ public void run() {
+ ObjectAdapter adapter = getAdapterManager().getAdapterFor(pojo);
+ if(!adapter.isDestroyed()) {
+ adapter.changeState(ResolveState.DESTROYED);
+ }
+
+ ensureFrameworksInAgreement(pojo);
+ }
+ }, calledFrom);
+
+ }
+
// /////////////////////////////////////////////////////////
// Helpers
// /////////////////////////////////////////////////////////
@@ -287,7 +307,17 @@ public class FrameworkSynchronizer {
throw new IsisException(MessageFormat.format("adapter oid={0} has oid in invalid state; should be transient; pojo: {1}", oid, pojo));
}
+ } else if(pojo.jdoIsDeleted()) {
+
+ // make sure the adapter is destroyed
+ if (!adapter.getResolveState().isDestroyed()) {
+ throw new IsisException(MessageFormat.format("adapter oid={0} has resolve state in invalid state; should be destroyed but is {1}; pojo: {2}", oid, adapter.getResolveState(), pojo));
+ }
+
} else {
+
+
+
// make sure the adapter is persistent
if (!adapter.getResolveState().representsPersistent()) {
throw new IsisException(MessageFormat.format("adapter oid={0} has resolve state in invalid state; should be in a persistent but is {1}; pojo: {2}", oid, adapter.getResolveState(), pojo));
http://git-wip-us.apache.org/repos/asf/isis/blob/5bbaa954/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/IsisLifecycleListener.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/IsisLifecycleListener.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/IsisLifecycleListener.java
index c9118a8..1362d88 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/IsisLifecycleListener.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/IsisLifecycleListener.java
@@ -131,7 +131,13 @@ public class IsisLifecycleListener implements AttachLifecycleListener, ClearLife
@Override
public void postDelete(InstanceLifecycleEvent event) {
- withLogging(Phase.POST, event, new RunnableEnsureFrameworksInAgreement(event));
+ withLogging(Phase.POST, event, new RunnableAbstract(event){
+ @Override
+ protected void doRun() {
+ final PersistenceCapable pojo = Utils.persistenceCapableFor(event);
+ synchronizer.postDeleteProcessingFor(pojo, CalledFrom.EVENT_POSTDELETE);
+ }
+ });
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/5bbaa954/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index f4b91b5..76f1df3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -370,7 +370,9 @@ public class IsisTransaction implements TransactionScopedComponent {
if (command instanceof DestroyObjectCommand) {
final ObjectAdapter adapter = command.onAdapter();
adapter.setVersion(null);
- adapter.changeState(ResolveState.DESTROYED);
+ if(!adapter.isDestroyed()) {
+ adapter.changeState(ResolveState.DESTROYED);
+ }
}
}
} finally {