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/10/18 08:23:13 UTC
git commit: ISIS-401: more concurrency exception trapping on edit
Updated Branches:
refs/heads/master fda447c81 -> 6f885839a
ISIS-401: more concurrency exception trapping on edit
when hit OK after editing an object, should trap any change to target object
and redisplay with warning.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6f885839
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6f885839
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6f885839
Branch: refs/heads/master
Commit: 6f885839af01e0bfc13fcadd20b03c39abbc93ae
Parents: fda447c
Author: Dan Haywood <da...@apache.org>
Authored: Fri Oct 18 07:22:58 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Oct 18 07:22:58 2013 +0100
----------------------------------------------------------------------
.../entity/properties/EntityPropertiesForm.java | 2 +-
.../entitylink/EntityLinkSelect2Panel.java | 4 ++++
.../viewer/wicket/ui/panels/FormAbstract.java | 23 ++++++++++++++++++--
.../metamodel/adapter/mgr/AdapterManager.java | 19 +++++++++++++++-
4 files changed, 44 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/6f885839/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index ea55f9c..83c2e07 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -310,7 +310,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
try {
getEntityModel().load(ConcurrencyChecking.CHECK); // could have also just called #getObject(), since CHECK is the default
- } catch(RuntimeException ex){
+ } catch(ConcurrencyException ex){
String recognizedErrorMessage = recognizeException(ex);
if(recognizedErrorMessage == null) {
throw ex;
http://git-wip-us.apache.org/repos/asf/isis/blob/6f885839/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
index 0ec864a..8ed6f75 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
@@ -34,8 +34,10 @@ import org.apache.wicket.model.IModel;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -47,9 +49,11 @@ import org.apache.isis.viewer.wicket.model.util.MementoFunctions;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.components.actions.ActionInvokeHandler;
+import org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersFormPanel;
import org.apache.isis.viewer.wicket.ui.components.widgets.ObjectAdapterMementoProviderAbstract;
import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormComponentPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
/**
* {@link FormComponentPanel} representing a reference to an entity: a link and
http://git-wip-us.apache.org/repos/asf/isis/blob/6f885839/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
index 1c50807..71e4756 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
@@ -20,6 +20,7 @@
package org.apache.isis.viewer.wicket.ui.panels;
import java.util.List;
+import java.util.concurrent.Callable;
import javax.inject.Inject;
@@ -35,6 +36,9 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.Persistor;
import org.apache.isis.viewer.wicket.model.isis.PersistenceSessionProvider;
@@ -42,6 +46,7 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
public abstract class FormAbstract<T> extends Form<T> implements IHeaderContributor, ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, AuthenticationSessionProvider, PersistenceSessionProvider {
@@ -93,18 +98,32 @@ public abstract class FormAbstract<T> extends Form<T> implements IHeaderContribu
}
@Override
- public void process(IFormSubmitter submittingComponent) {
+ public void process(final IFormSubmitter submittingComponent) {
try {
if(submittingComponent instanceof IFormSubmitterWithPreValidateHook) {
IFormSubmitterWithPreValidateHook componentWithPreSubmitHook = (IFormSubmitterWithPreValidateHook) submittingComponent;
preValidationErrorIfAny = componentWithPreSubmitHook.preValidate();
}
- super.process(submittingComponent);
+ if(preValidationErrorIfAny != null) {
+ // an exception has already occurred, so disable for remainder of thread.
+ AdapterManager.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(new Runnable(){
+ @Override
+ public void run() {
+ FormAbstract.super.process(submittingComponent);
+ }
+ });
+ } else {
+ super.process(submittingComponent);
+ }
+
} finally {
preValidationErrorIfAny = null;
}
+
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6f885839/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
index 28fc618..cabcfe6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
@@ -110,15 +110,32 @@ public interface AdapterManager extends Injectable {
/**
* Allows a caller to temporarily disable concurrency checking for the current thread.
*/
- public static <T> T executeWithConcurrencyCheckingDisabled(final Callable<T> callable) throws Exception {
+ public static <T> T executeWithConcurrencyCheckingDisabled(final Callable<T> callable) {
final ConcurrencyChecking prior = ConcurrencyChecking.concurrencyChecking.get();
try {
ConcurrencyChecking.concurrencyChecking.set(ConcurrencyChecking.NO_CHECK);
return callable.call();
+ } catch(Exception ex) {
+ throw new RuntimeException(ex);
} finally {
ConcurrencyChecking.concurrencyChecking.set(prior);
}
}
+
+ /**
+ * Allows a caller to temporarily disable concurrency checking for the current thread.
+ */
+ public static void executeWithConcurrencyCheckingDisabled(final Runnable runnable) {
+ final ConcurrencyChecking prior = ConcurrencyChecking.concurrencyChecking.get();
+ try {
+ ConcurrencyChecking.concurrencyChecking.set(ConcurrencyChecking.NO_CHECK);
+ runnable.run();
+ } finally {
+ ConcurrencyChecking.concurrencyChecking.set(prior);
+ }
+ }
+
+
}
/**