You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2012/05/05 12:29:59 UTC
svn commit: r1334385 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/access/
main/java/org/apache/cayenne/configuration/server/
test/java/org/apache/cayenne/
Author: aadamchik
Date: Sat May 5 10:29:59 2012
New Revision: 1334385
URL: http://svn.apache.org/viewvc?rev=1334385&view=rev
Log:
CAY-1700 Split long DISJOINT_BY_ID prefetch query on several smaller queries
refactoring property access. Instead of deep injection of RuntimeProperties, created
a special property of the DataDomain that can be read directly.
Simplifies unit tests too
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/DataContextMaxIdQualifierTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java?rev=1334385&r1=1334384&r2=1334385&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java Sat May 5 10:29:59 2012
@@ -27,7 +27,6 @@ import java.util.Map;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
-import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.query.ObjectIdQuery;
import org.apache.cayenne.query.Query;
@@ -109,8 +108,7 @@ class DataContextQueryAction extends Obj
DbEntity dbEntity = metadata.getDbEntity();
Integer maxIdQualifierSize = actingDataContext
.getParentDataDomain()
- .getRuntimeProperties()
- .getInt(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY, -1);
+ .getMaxIdQualifierSite();
List<?> paginatedList;
if (dbEntity != null && dbEntity.getPrimaryKeys().size() == 1) {
paginatedList = new SimpleIdIncrementalFaultList<Object>(
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=1334385&r1=1334384&r2=1334385&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java Sat May 5 10:29:59 2012
@@ -38,8 +38,8 @@ import org.apache.cayenne.QueryResponse;
import org.apache.cayenne.access.jdbc.BatchQueryBuilderFactory;
import org.apache.cayenne.cache.NestedQueryCache;
import org.apache.cayenne.cache.QueryCache;
+import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.ObjectContextFactory;
-import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.di.BeforeScopeEnd;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.event.EventManager;
@@ -80,8 +80,7 @@ public class DataDomain implements Query
/**
* @since 3.1
*/
- @Inject
- protected RuntimeProperties runtimeProperties;
+ protected int maxIdQualifierSite;
/**
* @since 3.1
@@ -944,15 +943,6 @@ public class DataDomain implements Query
return jdbcEventLogger;
}
- /**
- * Returns global runtime properties for this data domain.
- *
- * @since 3.1
- */
- RuntimeProperties getRuntimeProperties() {
- return runtimeProperties;
- }
-
void refreshEntitySorter() {
if (entitySorter != null) {
entitySorter.setEntityResolver(getEntityResolver());
@@ -1061,4 +1051,26 @@ public class DataDomain implements Query
public void setDefaultNode(DataNode defaultNode) {
this.defaultNode = defaultNode;
}
+
+ /**
+ * Returns a maximum number of object IDs to match in a single query for queries that
+ * select objects based on collection of ObjectIds. This affects queries generated by
+ * Cayenne when processing paginated queries and DISJOINT_BY_ID prefetches and is
+ * intended to address database limitations on the size of SQL statements as well as
+ * to cap memory use in Cayenne when generating such queries. The default is 10000. It
+ * can be changed either by calling {@link #setMaxIdQualifierSite(int)} or changing
+ * the value for property {@link Constants#SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY}.
+ *
+ * @since 3.1
+ */
+ public int getMaxIdQualifierSite() {
+ return maxIdQualifierSite;
+ }
+
+ /**
+ * @since 3.1
+ */
+ public void setMaxIdQualifierSite(int maxIdQualifierSite) {
+ this.maxIdQualifierSite = maxIdQualifierSite;
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java?rev=1334385&r1=1334384&r2=1334385&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java Sat May 5 10:29:59 2012
@@ -29,7 +29,6 @@ import java.util.Set;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.Persistent;
-import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.map.DbJoin;
@@ -171,8 +170,7 @@ class HierarchicalObjectResolver {
int maxIdQualifierSize = context
.getParentDataDomain()
- .getRuntimeProperties()
- .getInt(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY, -1);
+ .getMaxIdQualifierSite();
List<PrefetchSelectQuery> queries = new ArrayList<PrefetchSelectQuery>();
int qualifiersCount = 0;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java?rev=1334385&r1=1334384&r2=1334385&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java Sat May 5 10:29:59 2012
@@ -37,6 +37,7 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.DataChannelDescriptorLoader;
import org.apache.cayenne.configuration.DataChannelDescriptorMerger;
import org.apache.cayenne.configuration.DataNodeDescriptor;
+import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Injector;
@@ -96,6 +97,9 @@ public class DataDomainProvider implemen
@Inject
protected QueryCache queryCache;
+ @Inject
+ protected RuntimeProperties runtimeProperties;
+
public DataDomain get() throws ConfigurationException {
try {
@@ -174,6 +178,10 @@ public class DataDomainProvider implemen
DataChannelDescriptor descriptor = descriptorMerger.merge(descriptors);
DataDomain dataDomain = createDataDomain(descriptor.getName());
+ dataDomain.setMaxIdQualifierSite(runtimeProperties.getInt(
+ Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY,
+ -1));
+
dataDomain.setQueryCache(new NestedQueryCache(queryCache));
dataDomain.setEntitySorter(injector.getInstance(EntitySorter.class));
dataDomain.setEventManager(injector.getInstance(EventManager.class));
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/DataContextMaxIdQualifierTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/DataContextMaxIdQualifierTest.java?rev=1334385&r1=1334384&r2=1334385&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/DataContextMaxIdQualifierTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/DataContextMaxIdQualifierTest.java Sat May 5 10:29:59 2012
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.configuration.Constants;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.query.PrefetchTreeNode;
import org.apache.cayenne.query.SelectQuery;
@@ -29,13 +29,16 @@ public class DataContextMaxIdQualifierTe
@Inject
protected DataChannelInterceptor queryInterceptor;
+ @Inject
+ protected ServerRuntime runtime;
+
protected TableHelper tBag;
protected TableHelper tBox;
@Override
protected void setUpAfterInjection() throws Exception {
- System.setProperty(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY, "100");
+ runtime.getDataDomain().setMaxIdQualifierSite(100);
dbHelper.deleteAll("BALL");
dbHelper.deleteAll("BOX_THING");
@@ -51,11 +54,6 @@ public class DataContextMaxIdQualifierTe
tBox.setColumns("ID", "BAG_ID", "NAME");
}
- @Override
- protected void tearDownBeforeInjection() throws Exception {
- System.getProperties().remove(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY);
- }
-
public void testDisjointByIdPrefetch() throws Exception {
for (int i = 0; i < 1000; i++) {
tBag.insert(i + 1, "bag" + (i + 1));