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)