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

Reply via email to