User: dsundstrom
Date: 02/01/15 13:55:34
Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc
JDBCAbstractQueryCommand.java
Log:
Added support for read ahead on find.
Revision Changes Path
1.6 +47 -23
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCAbstractQueryCommand.java
Index: JDBCAbstractQueryCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCAbstractQueryCommand.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- JDBCAbstractQueryCommand.java 2002/01/05 12:08:50 1.5
+++ JDBCAbstractQueryCommand.java 2002/01/15 21:55:33 1.6
@@ -13,6 +13,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
@@ -29,6 +30,7 @@
import org.jboss.ejb.EntityEnterpriseContext;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
import org.jboss.logging.Logger;
import org.jboss.util.FinderResults;
@@ -42,7 +44,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Joe Shevland</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Justin Forder</a>
- * @version $Revision: 1.5 $
+ * @version $Revision: 1.6 $
*/
public abstract class JDBCAbstractQueryCommand implements JDBCQueryCommand {
private JDBCStoreManager manager;
@@ -51,8 +53,9 @@
private JDBCEntityBridge selectEntity;
private JDBCCMPFieldBridge selectField;
+ private List preloadFields = new ArrayList(0);
private String sql;
- private List parameters = new ArrayList();
+ private List parameters = new ArrayList(0);
public JDBCAbstractQueryCommand(
JDBCStoreManager manager, JDBCQueryMetaData q) {
@@ -74,7 +77,12 @@
Object[] args,
EntityEnterpriseContext ctx) throws FinderException {
- boolean debug = log.isDebugEnabled();
+ JDBCStoreManager selectManager = null;
+ ReadAheadCache selectReadAheadCache = null;
+ if(selectEntity != null) {
+ selectManager = selectEntity.getManager();
+ selectReadAheadCache = selectManager.getReadAheadCache();
+ }
Collection results = new ArrayList();
@@ -100,12 +108,26 @@
// load the results
if(selectEntity != null) {
- // load the pks
- Object[] pkRef = new Object[1];
+ Object[] ref = new Object[1];
+
while(rs.next()) {
- pkRef[0] = null;
- selectEntity.loadPrimaryKeyResults(rs, 1, pkRef);
- results.add(pkRef[0]);
+ int index = 1;
+ ref[0] = null;
+
+ // get the pk
+ index = selectEntity.loadPrimaryKeyResults(rs, index, ref);
+ Object pk = ref[0];
+ results.add(ref[0]);
+
+ // read the preload fields
+ for(Iterator iter=preloadFields.iterator(); iter.hasNext();) {
+ JDBCFieldBridge field = (JDBCFieldBridge)iter.next();
+ ref[0] = null;
+
+ // read the value and store it in the readahead cache
+ index = field.loadArgumentResults(rs, index, ref);
+ selectReadAheadCache.addPreloadData(pk, field, ref[0]);
+ }
}
} else {
// load the field
@@ -117,8 +139,7 @@
}
}
} catch(Exception e) {
- if (debug)
- log.debug(e);
+ log.debug("Find failed", e);
throw new FinderException("Find failed: " + e);
} finally {
JDBCUtil.safeClose(ps);
@@ -131,15 +152,12 @@
}
// Convert the pk collection into finder results
- boolean readAheadOnLoad = queryMetaData.getReadAhead().isOnLoadUsed();
FinderResults finderResults = new FinderResults(
- results, null, null, null, readAheadOnLoad);
+ results, queryMetaData.getReadAhead(), null, null);
- // If read ahead is on, store the finder results for optimized loading.
- if(readAheadOnLoad) {
- // add to the cache
- manager.getReadAheadCache().insert(
- new Long(finderResults.getListId()), finderResults);
+ // add to the cache
+ if(!queryMetaData.getReadAhead().isNone()) {
+ selectReadAheadCache.addFinderResult(finderResults);
}
// If this is a finder, we're done.
@@ -148,18 +166,16 @@
}
// This is an ejbSelect, so we need to convert the pks to real ejbs.
- EntityContainer container = manager.getContainer();
+ EntityContainer selectContainer = selectManager.getContainer();
if(queryMetaData.isResultTypeMappingLocal()) {
- JDBCStoreManager selectManager = selectEntity.getManager();
-
LocalContainerInvoker localInvoker;
- localInvoker = selectManager.getContainer().getLocalContainerInvoker();
+ localInvoker = selectContainer.getLocalContainerInvoker();
return localInvoker.getEntityLocalCollection(finderResults);
} else {
ContainerInvoker invoker;
- invoker = container.getContainerInvoker();
- return invoker.getEntityCollection(finderResults);
+ invoker = selectContainer.getContainerInvoker();
+ return invoker.getEntityCollection(finderResults);
}
}
@@ -200,6 +216,14 @@
protected void setSelectField(JDBCCMPFieldBridge selectField) {
this.selectEntity = null;
this.selectField = selectField;
+ }
+
+ protected List getPreloadFields() {
+ return preloadFields;
+ }
+
+ protected void setPreloadFields(List preloadFields) {
+ this.preloadFields = preloadFields;
}
/**
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development