You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/11/09 11:17:04 UTC
[isis] branch v2 updated: ISIS-2020: setting FIXME markers for
known issues with DN's FederatedDataStore
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new f512052 ISIS-2020: setting FIXME markers for known issues with DN's FederatedDataStore
f512052 is described below
commit f51205290fa23679797ed91a030fea0e687ff1e5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Nov 9 12:16:58 2018 +0100
ISIS-2020: setting FIXME markers for known issues with DN's
FederatedDataStore
Task-Url: https://issues.apache.org/jira/browse/ISIS-2020
---
.../services/jdosupport/IsisJdoSupport_v3_2.java | 18 ++++++++++---
.../PersistenceQueryFindAllInstancesProcessor.java | 5 +---
...sistenceQueryFindUsingApplibQueryProcessor.java | 30 ++++++++++++++--------
.../queries/PersistenceQueryProcessorAbstract.java | 14 +++++++---
4 files changed, 47 insertions(+), 20 deletions(-)
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport_v3_2.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport_v3_2.java
index 0bcb2df..bbe5bb3 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport_v3_2.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport_v3_2.java
@@ -23,6 +23,7 @@ import java.util.List;
import javax.annotation.Nullable;
import javax.jdo.JDOQLTypedQuery;
+import javax.jdo.Query;
import javax.jdo.query.BooleanExpression;
import org.datanucleus.store.rdbms.RDBMSPropertyNames;
@@ -98,7 +99,9 @@ public interface IsisJdoSupport_v3_2 extends org.apache.isis.applib.services.jdo
// -- UTILITY
/**
- * from <a href="http://www.datanucleus.org/products/accessplatform/jdo/query.html">DN-5.2</a>
+ * Fetch Optimization
+ * <p>
+ * From <a href="http://www.datanucleus.org/products/accessplatform/jdo/query.html">DN-5.2</a> ...
* <p>
* For RDBMS any single-valued member will be fetched in the original SQL query, but with
* multiple-valued members this is not supported. However what will happen is that any
@@ -110,8 +113,17 @@ public interface IsisJdoSupport_v3_2 extends org.apache.isis.applib.services.jdo
*/
@Programmatic
default void disableMultivaluedFetch(JDOQLTypedQuery<?> query) {
- String key = RDBMSPropertyNames.PROPERTY_RDBMS_QUERY_MULTIVALUED_FETCH;
- query.extension(key, "none");
+ query.extension(RDBMSPropertyNames.PROPERTY_RDBMS_QUERY_MULTIVALUED_FETCH, "none");
+ }
+
+ /**
+ * Fetch Optimization
+ * @see {@link IsisJdoSupport_v3_2#disableMultivaluedFetch(JDOQLTypedQuery)}
+ * @param query
+ */
+ @Programmatic
+ default void disableMultivaluedFetch(Query<?> query) {
+ query.addExtension(RDBMSPropertyNames.PROPERTY_RDBMS_QUERY_MULTIVALUED_FETCH, "none");
}
}
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
index d2d292d..e84d71c 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
@@ -29,7 +29,6 @@ import org.apache.isis.applib.services.jdosupport.IsisJdoSupport_v3_2;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.runtime.persistence.query.PersistenceQueryFindAllInstances;
-import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession5;
public class PersistenceQueryFindAllInstancesProcessor extends PersistenceQueryProcessorAbstract<PersistenceQueryFindAllInstances> {
@@ -43,8 +42,7 @@ public class PersistenceQueryFindAllInstancesProcessor extends PersistenceQueryP
@Override
public List<ObjectAdapter> process(final PersistenceQueryFindAllInstances persistenceQuery) {
- final IsisJdoSupport_v3_2 isisJdoSupport =
- IsisContext.getServicesInjector().lookupServiceElseFail(IsisJdoSupport_v3_2.class);
+ final IsisJdoSupport_v3_2 isisJdoSupport = isisJdoSupport();
final ObjectSpecification specification = persistenceQuery.getSpecification();
final Class<?> cls = specification.getCorrespondingClass();
@@ -61,5 +59,4 @@ public class PersistenceQueryFindAllInstancesProcessor extends PersistenceQueryP
}
-
}
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
index 2e70bce..3ac3d97 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
@@ -27,6 +27,7 @@ import javax.jdo.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.services.jdosupport.IsisJdoSupport_v3_2;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -60,9 +61,13 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
return loadAdapters(results);
}
+ // -- HELPER
+
// special case handling
private List<?> getResultsPk(final PersistenceQueryFindUsingApplibQueryDefault persistenceQuery) {
+ final IsisJdoSupport_v3_2 isisJdoSupport = isisJdoSupport();
+
final String queryName = persistenceQuery.getQueryName();
final Map<String, Object> map = unwrap(persistenceQuery.getArgumentsAdaptersByParameterName());
final ObjectSpecification objectSpec = persistenceQuery.getSpecification();
@@ -74,11 +79,13 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
final OneToOneAssociation pkOtoa = JdoPropertyUtils.getPrimaryKeyPropertyFor(objectSpec);
final String pkOtoaId = pkOtoa.getId();
final String filter = pkOtoaId + "==" + map.get(pkOtoaId);
+
+ /* FIXME[ISIS-2020] as of Oct. 2018: likely not working on FederatedDataStore
+ * see PersistenceQueryFindAllInstancesProcessor for workaround using type-safe query instead
+ */
final Query<?> jdoQuery = persistenceSession.newJdoQuery(cls, filter);
-
- // http://www.datanucleus.org/servlet/jira/browse/NUCCORE-1103
- jdoQuery.addExtension("datanucleus.multivaluedFetch", "none");
-
+ isisJdoSupport.disableMultivaluedFetch(jdoQuery); // fetch optimization
+
if (LOG.isDebugEnabled()) {
LOG.debug("{} # {} ( {} )", cls.getName(), queryName, filter);
}
@@ -93,6 +100,8 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
private List<?> getResults(final PersistenceQueryFindUsingApplibQueryDefault persistenceQuery) {
+ final IsisJdoSupport_v3_2 isisJdoSupport = isisJdoSupport();
+
final String queryName = persistenceQuery.getQueryName();
final Map<String, Object> argumentsByParameterName = unwrap(
persistenceQuery.getArgumentsAdaptersByParameterName());
@@ -100,11 +109,13 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
final ObjectSpecification objectSpec = persistenceQuery.getSpecification();
final Class<?> cls = objectSpec.getCorrespondingClass();
- final Query<?> jdoQuery = persistenceSession.newJdoNamedQuery(cls, queryName);
-
- // http://www.datanucleus.org/servlet/jira/browse/NUCCORE-1103
- jdoQuery.addExtension("datanucleus.multivaluedFetch", "none");
-
+
+ /* FIXME[ISIS-2020] as of Oct. 2018: likely not working on FederatedDataStore
+ * see PersistenceQueryFindAllInstancesProcessor for workaround using type-safe query instead
+ */
+ final Query<?> jdoQuery = persistenceSession.newJdoNamedQuery(cls, queryName);
+ isisJdoSupport.disableMultivaluedFetch(jdoQuery);
+
if(persistenceQuery.hasRange()) {
jdoQuery.setRange(persistenceQuery.getStart(), persistenceQuery.getEnd());
}
@@ -146,4 +157,3 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
}
-// Copyright (c) Naked Objects Group Ltd.
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
index 3dfb4b8..e5b4a42 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
@@ -22,14 +22,16 @@ import java.util.List;
import javax.jdo.listener.InstanceLifecycleEvent;
+import org.datanucleus.enhancement.Persistable;
+
+import org.apache.isis.applib.services.jdosupport.IsisJdoSupport_v3_2;
+import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.IsisLifecycleListener;
import org.apache.isis.core.runtime.system.persistence.PersistenceQuery;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession5;
-import org.datanucleus.enhancement.Persistable;
-
-import org.apache.isis.commons.internal.collections._Lists;
public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQuery>
implements PersistenceQueryProcessor<T> {
@@ -66,6 +68,12 @@ implements PersistenceQueryProcessor<T> {
}
return adapters;
}
+
+ // -- HELPER
+
+ protected static IsisJdoSupport_v3_2 isisJdoSupport() {
+ return IsisContext.getServicesInjector().lookupServiceElseFail(IsisJdoSupport_v3_2.class);
+ }
}