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

Reply via email to