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/17 16:01:17 UTC

[3/3] git commit: ISIS-567: global flag to disable concurrency checking (ie in an emergency)

ISIS-567: global flag to disable concurrency checking (ie in an emergency)

in addition:
- added some additional logging into JDO objectstore to see where repository queries (vs ORM walking the graph stuff)
  are being made.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/fda447c8
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/fda447c8
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/fda447c8

Branch: refs/heads/master
Commit: fda447c811cabbebdae6bc47455d12134cc1f641
Parents: 7e1a520
Author: Dan Haywood <da...@apache.org>
Authored: Thu Oct 17 15:00:33 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Thu Oct 17 15:00:33 2013 +0100

----------------------------------------------------------------------
 ...rsistenceQueryFindAllInstancesProcessor.java |  9 ++---
 .../PersistenceQueryFindByPatternProcessor.java | 17 --------
 .../PersistenceQueryFindByTitleProcessor.java   | 17 --------
 ...tenceQueryFindUsingApplibQueryProcessor.java | 41 ++++++++++++++------
 .../adaptermanager/AdapterManagerDefault.java   | 13 ++++++-
 .../main/webapp/WEB-INF/persistor.properties    |  5 +++
 .../main/webapp/WEB-INF/persistor.properties    |  6 +++
 7 files changed, 56 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
index 05cdf8f..31aab7d 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
@@ -42,16 +42,15 @@ public class PersistenceQueryFindAllInstancesProcessor extends PersistenceQueryP
     public List<ObjectAdapter> process(final PersistenceQueryFindAllInstances persistenceQuery) {
 
         final ObjectSpecification specification = persistenceQuery.getSpecification();
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("getInstances: class=" + specification.getFullIdentifier());
-        }
         
         Class<?> cls = specification.getCorrespondingClass();
         final Query query = getPersistenceManager().newQuery(cls);
         
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("allInstances(): class=" + specification.getFullIdentifier());
+        }
+        
         final List<?> pojos = (List<?>) query.execute();
         return loadAdapters(specification, pojos);
     }
 }
-
-// Copyright (c) Naked Objects Group Ltd.

http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByPatternProcessor.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByPatternProcessor.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByPatternProcessor.java
index cc8112b..0cbefab 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByPatternProcessor.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByPatternProcessor.java
@@ -37,23 +37,6 @@ public class PersistenceQueryFindByPatternProcessor extends
 
     public List<ObjectAdapter> process(
             final PersistenceQueryFindByPattern persistenceQuery) {
-
-        
-
-        
-//        final Object pojoPattern = persistenceQuery.getPattern().getObject();
-//        
-//        final CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
-//        
-//        
-//        final CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
-//        
-//        final Query query = getEntityManager().createQuery(criteriaQuery);
-//        final List<?> results = query.getResultList();
-//        return loadAdapters(persistenceQuery.getSpecification(), results);
-        
         throw new NotYetImplementedException();
     }
 }
-
-// Copyright (c) Naked Objects Group Ltd.

http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByTitleProcessor.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByTitleProcessor.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByTitleProcessor.java
index 7bdc524..ce91d75 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByTitleProcessor.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindByTitleProcessor.java
@@ -41,23 +41,6 @@ public class PersistenceQueryFindByTitleProcessor extends PersistenceQueryProces
     }
 
     private <Z> List<ObjectAdapter> process(final PersistenceQueryFindByTitle persistenceQuery, Class<Z> correspondingClass) {
-        // TODO
         throw new NotYetImplementedException();
-
-//        final CriteriaQuery<Z> criteriaQuery = getEntityManager().getCriteriaBuilder().createQuery(correspondingClass);
-//
-//        final ObjectSpecification objectSpec = persistenceQuery.getSpecification();
-//        final Root<Z> from = criteriaQuery.from(correspondingClass);
-//        
-//        final EntityType<Z> model = from.getModel();
-//        final SingularAttribute<? super Z, String> titleAttribute = model.getSingularAttribute("title", String.class);
-//        final Path<String> titlePath = from.get(titleAttribute);
-//        titlePath.equals(persistenceQuery.getTitle());
-//        
-//        final TypedQuery<Z> query = getPersistenceManager().createQuery(criteriaQuery);
-//        final List<Z> pojos = query.getResultList();
-//        return loadAdapters(objectSpec, pojos);
     }
 }
-
-// Copyright (c) Naked Objects Group Ltd.

http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
index f858675..ca72b9f 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
@@ -27,17 +27,23 @@ import javax.jdo.Query;
 
 import com.google.common.collect.Maps;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.ObjectAdapterUtils;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
+import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore;
 import org.apache.isis.objectstore.jdo.datanucleus.metamodel.JdoPropertyUtils;
 import org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer;
 
 public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQueryProcessorAbstract<PersistenceQueryFindUsingApplibQueryDefault> {
     
+    private static final Logger LOG = LoggerFactory.getLogger(PersistenceQueryFindUsingApplibQueryProcessor.class);
+
     public PersistenceQueryFindUsingApplibQueryProcessor(final PersistenceManager persistenceManager, final FrameworkSynchronizer frameworkSynchronizer) {
         super(persistenceManager, frameworkSynchronizer);
     }
@@ -50,16 +56,7 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
         
         final List<?> results;
         if((objectSpec.getFullIdentifier() + "#pk").equals(queryName)) {
-            // special case handling
-            final Class<?> cls = objectSpec.getCorrespondingClass();
-            if(!JdoPropertyUtils.hasPrimaryKeyProperty(objectSpec)) {
-                throw new UnsupportedOperationException("cannot search by primary key for DataStore-assigned entities");
-            }
-            final OneToOneAssociation pkOtoa = JdoPropertyUtils.getPrimaryKeyPropertyFor(objectSpec);
-            String pkOtoaId = pkOtoa.getId();
-            final String filter = pkOtoaId + "==" + map.get(pkOtoaId);
-            final Query jdoQuery = getPersistenceManager().newQuery(cls, filter);
-            results = (List<?>) jdoQuery.execute();
+            results = getResultsPk(queryName, map, objectSpec);
         } else {
             results = getResults(objectSpec, queryName, map, cardinality);
         }
@@ -67,12 +64,34 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
         return loadAdapters(objectSpec, results);
     }
 
+    // special case handling
+    private List<?> getResultsPk(final String queryName, final Map<String, Object> map, final ObjectSpecification objectSpec) {
+        final Class<?> cls = objectSpec.getCorrespondingClass();
+        if(!JdoPropertyUtils.hasPrimaryKeyProperty(objectSpec)) {
+            throw new UnsupportedOperationException("cannot search by primary key for DataStore-assigned entities");
+        }
+        final OneToOneAssociation pkOtoa = JdoPropertyUtils.getPrimaryKeyPropertyFor(objectSpec);
+        final String pkOtoaId = pkOtoa.getId();
+        final String filter = pkOtoaId + "==" + map.get(pkOtoaId);
+        final Query jdoQuery = getPersistenceManager().newQuery(cls, filter);
+        
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("query: " + queryName + ", filter: " + filter);
+        }
+        
+        return (List<?>) jdoQuery.execute();
+    }
+
     private List<?> getResults(ObjectSpecification objectSpec, final String queryName, final Map<String, Object> argumentsByParameterName, final QueryCardinality cardinality) {
         
         final PersistenceManager persistenceManager = getJdoObjectStore().getPersistenceManager();
         final Class<?> cls = objectSpec.getCorrespondingClass();
         final Query jdoQuery = persistenceManager.newNamedQuery(cls, queryName);
         
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("query: " + queryName + ", args: " + argumentsByParameterName);
+        }
+        
         final List<?> results = (List<?>) jdoQuery.executeWithMap(argumentsByParameterName);
         if (cardinality == QueryCardinality.MULTIPLE) {
             return results;
@@ -84,7 +103,7 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
         final Map<String, Object> argumentsByParameterName = Maps.newHashMap();
         for (final String parameterName : argumentAdaptersByParameterName.keySet()) {
             final ObjectAdapter argumentAdapter = argumentAdaptersByParameterName.get(parameterName);
-            final Object argument = ObjectAdapterUtils.unwrapObject(argumentAdapter);
+            final Object argument = ObjectAdapter.Util.unwrap(argumentAdapter);
             argumentsByParameterName.put(parameterName, argument);
         }
         return argumentsByParameterName;

http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index 5ceb378..8008327 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -31,6 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.ensure.Ensure;
@@ -62,7 +63,6 @@ import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 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;
@@ -325,7 +325,7 @@ public class AdapterManagerDefault implements AdapterManagerSpi {
                        otherVersion != null && 
                        thisVersion.different(otherVersion)) {
                         
-                        if(ConcurrencyChecking.isCurrentlyEnabled()) {
+                        if(isConcurrencyCheckingGloballyEnabled() && ConcurrencyChecking.isCurrentlyEnabled()) {
                             LOG.info("concurrency conflict detected on " + recreatedOid + " (" + otherVersion + ")");
                             final String currentUser = getAuthenticationSession().getUserName();
                             throw new ConcurrencyException(currentUser, recreatedOid, thisVersion, otherVersion);
@@ -395,6 +395,11 @@ public class AdapterManagerDefault implements AdapterManagerSpi {
         return createdAdapter;
     }
 
+    private boolean isConcurrencyCheckingGloballyEnabled() {
+        final boolean disabled = getConfiguration().getBoolean("isis.persistor.disableConcurrencyChecking", false);
+        return !disabled;
+    }
+
 
     // //////////////////////////////////////////////////////////////////
     // adapter deletion
@@ -843,6 +848,10 @@ public class AdapterManagerDefault implements AdapterManagerSpi {
         return IsisContext.getAuthenticationSession();
     }
     
+    protected IsisConfiguration getConfiguration() {
+        return IsisContext.getConfiguration();
+    }
+
 
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
index c541e09..6d5effd 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
@@ -15,6 +15,11 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
+
+# for emergency use only
+isis.persistor.disableConcurrencyChecking=false
+
+
 #
 # configuration file holding the JDO objectstore's JDBC configuration
 # (this is a bit of a hack... just exploiting fact that Isis also loads this file)

http://git-wip-us.apache.org/repos/asf/isis/blob/fda447c8/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
index 104535b..ef7ca1d 100644
--- a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
+++ b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties
@@ -15,6 +15,12 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
+
+
+# for emergency use only
+isis.persistor.disableConcurrencyChecking=false
+
+
 #
 # configuration file holding the JDO objectstore's JDBC configuration
 # (this is a bit of a hack... just exploiting fact that Isis also loads this file)