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 <ahu...@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); + } }