You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by pn...@apache.org on 2004/09/09 10:06:15 UTC

cvs commit: jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/search XQueryExecuter.java

pnever      2004/09/09 01:06:15

  Modified:    proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/search
                        Tag: TWS421_BRANCH XQueryExecuter.java
  Log:
  Performance: cache query results
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.4.1   +66 -60    jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/search/XQueryExecuter.java
  
  Index: XQueryExecuter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/search/XQueryExecuter.java,v
  retrieving revision 1.1
  retrieving revision 1.1.4.1
  diff -u -r1.1 -r1.1.4.1
  --- XQueryExecuter.java	25 Mar 2004 16:18:02 -0000	1.1
  +++ XQueryExecuter.java	9 Sep 2004 08:06:15 -0000	1.1.4.1
  @@ -23,6 +23,8 @@
   
   package org.apache.slide.store.tamino.datastore.search;
   
  +import java.util.*;
  +
   import com.softwareag.common.instrumentation.logging.Level;
   import com.softwareag.common.instrumentation.logging.Logger;
   import com.softwareag.common.instrumentation.logging.LoggerFactory;
  @@ -33,13 +35,6 @@
   import com.softwareag.tamino.db.api.objectModel.TXMLObject;
   import com.softwareag.tamino.db.api.objectModel.TXMLObjectIterator;
   import com.softwareag.tamino.db.api.response.TResponse;
  -import java.util.ArrayList;
  -import java.util.HashMap;
  -import java.util.HashSet;
  -import java.util.Iterator;
  -import java.util.List;
  -import java.util.Map;
  -import java.util.Set;
   import org.apache.slide.common.SlideRuntimeException;
   import org.apache.slide.search.RequestedResource;
   import org.apache.slide.search.SearchException;
  @@ -47,6 +42,7 @@
   import org.apache.slide.search.basic.IBasicQuery;
   import org.apache.slide.search.basic.IBasicResultSet;
   import org.apache.slide.security.AccessDeniedException;
  +import org.apache.slide.store.tamino.common.XDescriptorsHandler;
   import org.apache.slide.store.tamino.common.XGlobals;
   import org.apache.slide.store.tamino.datastore.XConnection;
   import org.apache.slide.store.tamino.datastore.XConnectionKey;
  @@ -55,6 +51,7 @@
   import org.apache.slide.store.tamino.jdomobjects.XDescriptors;
   import org.apache.slide.store.tamino.jdomobjects.XFactory;
   import org.apache.slide.store.tamino.store.ISlideAccessor;
  +import org.apache.slide.store.tamino.store.XParentStore;
   import org.apache.slide.structure.ObjectNode;
   import org.apache.slide.util.ClassName;
   import org.apache.slide.util.Configuration;
  @@ -72,14 +69,14 @@
    * @version $Revision$
    */
   public class XQueryExecuter implements IQueryExecuter {
  -
  +    
       private static final String LOGNAME = LoggerUtil.getThisClassName();
       private static final String CLASSNAME = new ClassName(LOGNAME).getPlainName();
       private static Logger logger = LoggerFactory.getLogger(LOGNAME);
  -
  +    
       private ISlideAccessor slideAccessor;
       private XBasicQueryImpl query;
  -
  +    
       /**
        * Constructor
        *
  @@ -89,7 +86,7 @@
           this.slideAccessor = slideAccessor;
           this.query = (XBasicQueryImpl) query;
       }
  -
  +    
       /**
        * executes the taminoQuery on xdav:metadata.
        *
  @@ -104,22 +101,22 @@
           if( logger.isLoggable(Level.FINE) ){
               logger.entering( CLASSNAME, "execute", new Object[] {taminoQuery} );
           }
  -
  +        
           IBasicResultSet resultSet = new BasicResultSetImpl();
  -
  +        
           try {
               XConnectionKey conKey = new XConnectionKey (slideAccessor, "XQueryExecuter");
               XConnection con = XConnectionPool.getInstance().getXConnection (conKey);
               TXMLObjectAccessor objAccessor =
                   con.newXMLJObjectAccessor (XGlobals.META_COLLECTION);
  -
  +            
               // System.out.println(taminoQuery);
               TQuery tQuery = TQuery.newInstance (taminoQuery);
  -
  +            
               TResponse response;
  -
  +            
               if (query.isLimitDefined() && query.isMetaLimitAllowed ()) {
  -
  +                
                   // we use a hidden feature of API: if only the first bunch
                   // of results is read from Tamino, local transaction mode is
                   // possible
  @@ -129,25 +126,28 @@
                   response = objAccessor.query (tQuery);
               }
               con.close();
  -
  +            
               if (!response.getReturnValue().equals("0"))
                   throw new SearchException ("query failed, return value is " + response.getReturnValue());
  -
  +            
               TXMLObjectIterator it = response.getXMLObjectIterator();
  -
  +            
               boolean useBinding = Configuration.useBinding(query.getStore());
  -            ContentQueryFilter resultCache = new ContentQueryFilter (useBinding, it, query);
  +            
  +            XDescriptorsHandler xdh = (XDescriptorsHandler)((XParentStore)slideAccessor).getDescriptorsStore().getDescriptorsHandler();
  +            
  +            ContentQueryFilter resultCache = new ContentQueryFilter(useBinding, it, query, xdh);
               Iterator nodeIterator = resultCache.getNodeIterator();
  -
  +            
               XPathPropertyExecuter propExecuter =
                   new XPathPropertyExecuter (query, resultCache, slideAccessor);
  -
  +            
               propExecuter.resolveXPathProperties();
  -
  +            
               while (nodeIterator.hasNext()) {
  -
  +                
                   ObjectNode node = (ObjectNode)nodeIterator.next();
  -
  +                
                   // ignore forbidden resources
                   try {
                       RequestedResource resource = new XResourceImpl (node, query, resultCache);
  @@ -156,12 +156,12 @@
                   catch (AccessDeniedException e) {}
               }
           }
  -
  +        
           catch (Exception e) {
               e.printStackTrace();
               throw new SlideRuntimeException (e.getMessage(), true);
           }
  -
  +        
           if( logger.isLoggable(Level.FINE) )
               logger.exiting( CLASSNAME, "execute", resultSet);
           return resultSet;
  @@ -174,11 +174,11 @@
    **/
   class ContentQueryFilter implements IContentQueryFilter {
       private Map inoIdMap = new HashMap ();
  -
  +    
       private List nodeList = new ArrayList (20);
  -
  +    
       private XPath xPath;
  -
  +    
       /**
        * Constructor
        *
  @@ -191,44 +191,45 @@
        */
       ContentQueryFilter (boolean useBinding,
                           TXMLObjectIterator resultIterator,
  -                        XBasicQueryImpl query)
  +                        XBasicQueryImpl query,
  +                        XDescriptorsHandler xdh)
           throws TException {
           ObjectNode node;
  -
  +        
           LimitIterator it;
           if (query.isLimitDefined() && query.isMetaLimitAllowed())
               it = new LimitIterator (resultIterator, query.getLimit());
           else
               it = new LimitIterator (resultIterator, 0);
  -
  +        
           XDescriptorsMappingList lst = query.getDescriptorsMappingList();
           try {
               String xPathString = ".//descriptor/propertyList/" +
                   XGlobals.TAMINO_NAMESPACE_PREFIX + ":" +
                   XGlobals.CONTENT_ID + "/text()";
  -
  -             // System.out.println (xPathString);
  -
  +            
  +            // System.out.println (xPathString);
  +            
               xPath = new JDOMXPath (xPathString);
               xPath.addNamespace (XGlobals.TAMINO_NAMESPACE_PREFIX, XGlobals.TAMINO_NAMESPACE_URI);
  -
  +            
           } catch (JaxenException e) {
               throw new XAssertionFailed (e);
           }
  -
  +        
           while (it.hasNext()) {
               TXMLObject descsObject = null;
  -
  +            
               descsObject = it.next();
  -
  +            
               Element el = (Element) descsObject.getElement();
  -
  +            
               XContentId contentId = getContentId (el);
               if (contentId != null) { // can happen for empty content or directories
  -
  +                
                   String schema = contentId.getSchema();
                   String inoId = contentId.getId();
  -
  +                
                   Set idList = (Set) inoIdMap.get (schema);
                   if (idList == null) {
                       idList = new HashSet (20);
  @@ -236,25 +237,30 @@
                   }
                   idList.add (inoId);
               }
  +            
               XDescriptors xDescs = XFactory.loadDescriptor(el);
  +            
               if (useBinding) {
                   XDescriptorsMapping mapping;
  -
  +                
                   mapping = lst.lookup (xDescs.getUuri());
                   if (mapping == null) {
                       throw new XAssertionFailed ("descriptor not found: " + xDescs.getUuri());
                   }
                   nodeList.addAll (mapping.createObjectNodes(xDescs));
  +                // ===============================================
  +                // TODO: call xhd.cacheQueryResults() somehow here
  +                // ===============================================
               }
               else {
  -
                   node = xDescs.getUuriObjectNode();
                   node.setUri(node.getUuri());
                   nodeList.add (node);
  +                xDescs = xdh.cacheQueryResult(node.getUri(), xDescs);
               }
           }
       }
  -
  +    
       /**
        * Method getContentId
        *
  @@ -265,23 +271,23 @@
        */
       private XContentId getContentId (Element el) {
           XContentId contentId = null;
  -
  +        
           try {
               Iterator it = xPath.selectNodes(el).iterator();
  -
  +            
               if (it.hasNext()) {
  -
  +                
                   Text tContentId = (Text)it.next();
                   contentId = new XContentId (tContentId.getText());
               }
  -
  +            
           } catch (JaxenException e) {
               throw new XAssertionFailed (e);
           }
  -
  +        
           return contentId;
       }
  -
  +    
       /**
        * Method getNodeIterator
        *
  @@ -291,7 +297,7 @@
       Iterator getNodeIterator () {
           return nodeList.iterator();
       }
  -
  +    
       /**
        * Method getXPathFilter
        *
  @@ -313,10 +319,10 @@
               }
               sb.append ("]");
           }
  -
  +        
           return sb.toString();
       }
  -
  +    
       /**
        * returns true, if the result set has entries for this schema
        *
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org