From 18d9c53ce309b773e9d00832bc10b78f7188c79d Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 20 Apr 2014 17:18:13 +1200 Subject: [PATCH] Fix for #86 - v4 - Remove deprecated QueryListener. You must convert to findIterate() or findVisit() --- .../java/com/avaje/ebean/ExpressionList.java | 9 ---- src/main/java/com/avaje/ebean/Query.java | 30 ------------- .../java/com/avaje/ebean/QueryListener.java | 43 ------------------- .../com/avaje/ebeaninternal/api/SpiQuery.java | 6 --- .../server/expression/JunctionExpression.java | 6 --- .../ebeaninternal/server/query/CQuery.java | 31 +++---------- .../server/querydefn/DefaultOrmQuery.java | 37 +++------------- .../util/DefaultExpressionList.java | 6 --- .../util/FilterExpressionList.java | 6 --- 9 files changed, 13 insertions(+), 161 deletions(-) delete mode 100644 src/main/java/com/avaje/ebean/QueryListener.java diff --git a/src/main/java/com/avaje/ebean/ExpressionList.java b/src/main/java/com/avaje/ebean/ExpressionList.java index 98d912e48..5411379de 100644 --- a/src/main/java/com/avaje/ebean/ExpressionList.java +++ b/src/main/java/com/avaje/ebean/ExpressionList.java @@ -259,15 +259,6 @@ public interface ExpressionList extends Serializable { */ public Query setMapKey(String mapKey); - /** - * Please migrate to using {@link #findIterate()} or {@link #findVisit(QueryResultVisitor)}. - * Set a QueryListener for bean by bean processing. - * - * @see Query#setListener(QueryListener) - * @deprecated Migrate to {@link #findIterate()} or {@link #findVisit(QueryResultVisitor)} - */ - public Query setListener(QueryListener queryListener); - /** * Set to true to use the query for executing this query. * diff --git a/src/main/java/com/avaje/ebean/Query.java b/src/main/java/com/avaje/ebean/Query.java index fa7df252b..284ddbbdb 100644 --- a/src/main/java/com/avaje/ebean/Query.java +++ b/src/main/java/com/avaje/ebean/Query.java @@ -663,36 +663,6 @@ public interface Query extends Serializable { */ public Query setParameter(int position, Object value); - /** - * Please migrate to using {@link #findIterate()} or {@link #findVisit(QueryResultVisitor)} - *

- * Set a listener to process the query on a row by row basis. - *

- *

- * Use this when you want to process a large query and do not want to hold the - * entire query result in memory. - *

- *

- * It this case the rows are not loaded into the persistence context and - * instead are processed by the query listener. - *

- * - *
-   * QueryListener<Order> listener = ...;
-   *   
-   * Query<Order> query  = Ebean.createQuery(Order.class);
-   *   
-   * // set the listener that will process each order one at a time
-   * query.setListener(listener);
-   *   
-   * // execute the query. Note that the returned
-   * // list (emptyList) will be empty ...
-   * List<Order> emtyList = query.findList();
-   * 
- * @deprecated Deprecated in favor of {@link #findIterate()} and {@link #findVisit(QueryResultVisitor)} - */ - public Query setListener(QueryListener queryListener); - /** * Set the Id value to query. This is used with findUnique(). *

diff --git a/src/main/java/com/avaje/ebean/QueryListener.java b/src/main/java/com/avaje/ebean/QueryListener.java deleted file mode 100644 index 959a3d09c..000000000 --- a/src/main/java/com/avaje/ebean/QueryListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.avaje.ebean; - -/** - * Deprecated, please migrate to using {@link #findIterate()} or {@link #findVisit(QueryResultVisitor)} - *

- * Provides a mechanism for processing a query one bean at a time. - *

- *

- * This is useful when the query will return a large number of results and you - * want to process the beans one at a time rather than whole all of the beans in - * memory at once. - *

- * - *
- * QueryListener<Order> listener = ...;
- *    
- * Query<Order> query  = Ebean.createQuery(Order.class);
- *    
- * // set the listener that will process each order one at a time
- * query.setListener(listener);
- *    
- * // execute the query. Note that the returned
- * // list will be empty ... so don't bother assigning it
- * query.findList();
- * 
- * - * @param - * the type of entity bean - * @deprecated Please migrate to using {@link #findIterate()} or - * {@link #findVisit(QueryResultVisitor)} - */ -public interface QueryListener { - - /** - * Process the bean that has just been read. - *

- * This bean will not be added to the List Set or Map and nor will it be put - * into the PersistenceContext. This is what makes this a good way to process - * a large result set (which could normally use a lot of memory). - *

- */ - public void process(T bean); -} diff --git a/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java b/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java index 792e80beb..fe911ce7d 100644 --- a/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java +++ b/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java @@ -6,7 +6,6 @@ import java.util.List; import com.avaje.ebean.ExpressionList; import com.avaje.ebean.OrderBy; import com.avaje.ebean.Query; -import com.avaje.ebean.QueryListener; import com.avaje.ebean.bean.BeanCollectionTouched; import com.avaje.ebean.bean.CallStack; import com.avaje.ebean.bean.EntityBean; @@ -545,11 +544,6 @@ public interface SpiQuery extends Query { */ public Object getId(); - /** - * Return the queryListener. - */ - public QueryListener getListener(); - /** * Return true if this query should use its own transaction. *

diff --git a/src/main/java/com/avaje/ebeaninternal/server/expression/JunctionExpression.java b/src/main/java/com/avaje/ebeaninternal/server/expression/JunctionExpression.java index 068053ccd..0c19aab89 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/expression/JunctionExpression.java +++ b/src/main/java/com/avaje/ebeaninternal/server/expression/JunctionExpression.java @@ -14,7 +14,6 @@ import com.avaje.ebean.Junction; import com.avaje.ebean.OrderBy; import com.avaje.ebean.PagingList; import com.avaje.ebean.QueryIterator; -import com.avaje.ebean.QueryListener; import com.avaje.ebean.QueryResultVisitor; import com.avaje.ebean.event.BeanQueryRequest; import com.avaje.ebeaninternal.api.HashQueryPlanBuilder; @@ -383,11 +382,6 @@ abstract class JunctionExpression implements Junction, SpiExpression, Expr return exprList.setFirstRow(firstRow); } - @Deprecated - public com.avaje.ebean.Query setListener(QueryListener queryListener) { - return exprList.setListener(queryListener); - } - public com.avaje.ebean.Query setMapKey(String mapKey) { return exprList.setMapKey(mapKey); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java b/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java index 7620f56b0..1fdb7ca21 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java +++ b/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java @@ -12,8 +12,8 @@ import javax.persistence.PersistenceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import com.avaje.ebean.QueryIterator; -import com.avaje.ebean.QueryListener; import com.avaje.ebean.bean.BeanCollection; import com.avaje.ebean.bean.BeanCollectionAdd; import com.avaje.ebean.bean.EntityBean; @@ -23,7 +23,6 @@ import com.avaje.ebean.bean.NodeUsageListener; import com.avaje.ebean.bean.ObjectGraphNode; import com.avaje.ebean.bean.PersistenceContext; import com.avaje.ebeaninternal.api.LoadContext; -import com.avaje.ebeaninternal.api.SpiEbeanServer; import com.avaje.ebeaninternal.api.SpiExpressionList; import com.avaje.ebeaninternal.api.SpiQuery; import com.avaje.ebeaninternal.api.SpiQuery.Mode; @@ -40,7 +39,6 @@ import com.avaje.ebeaninternal.server.deploy.DbReadContext; import com.avaje.ebeaninternal.server.el.ElPropertyValue; import com.avaje.ebeaninternal.server.lib.util.StringHelper; import com.avaje.ebeaninternal.server.querydefn.OrmQueryProperties; -import com.avaje.ebeaninternal.server.transaction.DefaultPersistenceContext; import com.avaje.ebeaninternal.server.type.DataBind; import com.avaje.ebeaninternal.server.type.DataReader; @@ -135,8 +133,6 @@ public class CQuery implements DbReadContext, CancelableQuery { private final SpiQuery query; - private final QueryListener queryListener; - private Map currentPathMap; private String currentPrefix; @@ -277,20 +273,10 @@ public class CQuery implements DbReadContext, CancelableQuery { this.desc = request.getBeanDescriptor(); this.predicates = predicates; - this.queryListener = query.getListener(); - if (queryListener == null) { - // normal, use the one from the transaction - this.persistenceContext = request.getPersistenceContext(); - } else { - // 'Row Level Transaction Context'... - // local transaction context that will be reset - // after each 'master' bean is sent to the listener - this.persistenceContext = new DefaultPersistenceContext(); - } - + this.persistenceContext = request.getPersistenceContext(); + this.maxRowsLimit = query.getMaxRows() > 0 ? query.getMaxRows() : GLOBAL_ROW_LIMIT; - this.backgroundFetchAfter = query.getBackgroundFetchAfter() > 0 ? query - .getBackgroundFetchAfter() : Integer.MAX_VALUE; + this.backgroundFetchAfter = query.getBackgroundFetchAfter() > 0 ? query.getBackgroundFetchAfter() : Integer.MAX_VALUE; this.help = createHelp(request); this.collection = (BeanCollection) (help != null ? help.createEmpty(false) : null); @@ -687,13 +673,8 @@ public class CQuery implements DbReadContext, CancelableQuery { @SuppressWarnings("unchecked") private void readTheRows(boolean inForeground) throws SQLException { while (hasNextBean(inForeground)) { - if (queryListener != null) { - queryListener.process((T)getLoadedBean()); - - } else { - // add to the list/set/map - help.add(collection, getLoadedBean()); - } + // add to the list/set/map + help.add(collection, getLoadedBean()); } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java index 99ceb508e..5a8e3fbd9 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -21,7 +21,6 @@ import com.avaje.ebean.OrderBy.Property; import com.avaje.ebean.PagingList; import com.avaje.ebean.Query; import com.avaje.ebean.QueryIterator; -import com.avaje.ebean.QueryListener; import com.avaje.ebean.QueryResultVisitor; import com.avaje.ebean.RawSql; import com.avaje.ebean.bean.BeanCollectionTouched; @@ -69,8 +68,6 @@ public class DefaultOrmQuery implements SpiQuery { */ private transient ArrayList contextAdditions; - private transient QueryListener queryListener; - /** * For lazy loading of ManyToMany we need to add a join to the intersection * table. This is that join to the intersection table. @@ -1016,26 +1013,6 @@ public class DefaultOrmQuery implements SpiQuery { return this; } - /** - * Return the findListener is one has been set. - */ - public QueryListener getListener() { - return queryListener; - } - - /** - * Set a FindListener. This is designed for large fetches where lots are - * rows are to be processed and instead of returning all the rows they are - * processed one at a time. - *

- * Note that the returning List Set or Map will be empty. - *

- */ - public DefaultOrmQuery setListener(QueryListener queryListener) { - this.queryListener = queryListener; - return this; - } - public Class getBeanType() { return beanType; } @@ -1044,13 +1021,13 @@ public class DefaultOrmQuery implements SpiQuery { this.detail = detail; } - public boolean tuneFetchProperties(OrmQueryDetail tunedDetail) { - return detail.tuneFetchProperties(tunedDetail); - } + public boolean tuneFetchProperties(OrmQueryDetail tunedDetail) { + return detail.tuneFetchProperties(tunedDetail); + } - public OrmQueryDetail getDetail() { - return detail; - } + public OrmQueryDetail getDetail() { + return detail; + } /** * Return any beans that should be added to the persistence context prior to @@ -1244,7 +1221,7 @@ public class DefaultOrmQuery implements SpiQuery { // their own transaction return false; } - if (backgroundFetchAfter > 0 || queryListener != null) { + if (backgroundFetchAfter > 0) { // run in own transaction as we can't know how long // the background fetching will continue etc return true; diff --git a/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java b/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java index cfa5695f2..d5a972154 100644 --- a/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java +++ b/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java @@ -17,7 +17,6 @@ import com.avaje.ebean.OrderBy; import com.avaje.ebean.PagingList; import com.avaje.ebean.Query; import com.avaje.ebean.QueryIterator; -import com.avaje.ebean.QueryListener; import com.avaje.ebean.QueryResultVisitor; import com.avaje.ebean.event.BeanQueryRequest; import com.avaje.ebeaninternal.api.HashQueryPlanBuilder; @@ -221,11 +220,6 @@ public class DefaultExpressionList implements SpiExpressionList { return query.setMapKey(mapKey); } - @Deprecated - public Query setListener(QueryListener queryListener) { - return query.setListener(queryListener); - } - public Query setUseCache(boolean useCache) { return query.setUseCache(useCache); } diff --git a/src/main/java/com/avaje/ebeaninternal/util/FilterExpressionList.java b/src/main/java/com/avaje/ebeaninternal/util/FilterExpressionList.java index ef607ea5d..415e6a50d 100644 --- a/src/main/java/com/avaje/ebeaninternal/util/FilterExpressionList.java +++ b/src/main/java/com/avaje/ebeaninternal/util/FilterExpressionList.java @@ -14,7 +14,6 @@ import com.avaje.ebean.FutureRowCount; import com.avaje.ebean.OrderBy; import com.avaje.ebean.PagingList; import com.avaje.ebean.Query; -import com.avaje.ebean.QueryListener; import com.avaje.ebeaninternal.api.SpiExpressionList; import com.avaje.ebeaninternal.server.expression.FilterExprPath; @@ -136,11 +135,6 @@ public class FilterExpressionList extends DefaultExpressionList { return rootQuery.setFirstRow(firstRow); } - @Deprecated - public Query setListener(QueryListener queryListener) { - return rootQuery.setListener(queryListener); - } - public Query setMapKey(String mapKey) { return rootQuery.setMapKey(mapKey); }