Hi Marcel,

>>please note that your query will not work as expected because it is
invalid and 
>>jackrabbit should actually reject it. see: 
>>https://issues.apache.org/jira/browse/JCR-1211

Why can't we use deref as predicate? What is the other alternative to
resolve the references in XPath.
I looked at your issue, JCR-1211, but could not find details. 






Marcel Reutegger wrote:
> 
> Kisu San wrote:
>> Below is my method, I am using DerbyPersistenceManager. 
>> 
>> Is there anyway, we can by pass using persistence manager? 
>> What are the trade offs of not using persistence manager?
> 
> the persistence manager is an integral part of jackrabbit, you cannot just 
> bypass it.
> 
>> public ArrayList getBulletinList(String bulletinType, String model)
>> throws
>> RepositoryException {
>>              
>>              log.info("Entering .....");
>>              long startTime = System.currentTimeMillis();
>>              //String query = "//" + PRIMARY_NODE + "/child::*";
>>              //String query = "//element(*, bulletin)";
>>              //String query = "//element(*, " + NODE_TYPE + " )";
>>              String query ="/jcr:root/BULLETIN//element(*, " + NODE_TYPE
>> +")[jcr:deref(@btnmodel='" + model +"') and" +
>>                                                                              
>>                         " jcr:deref(@btnbulletin_type='"+ bulletinType +"')] 
>> order
>> by
>> jcr:score() descending";
> 
> please note that your query will not work as expected because it is
> invalid and 
> jackrabbit should actually reject it. see: 
> https://issues.apache.org/jira/browse/JCR-1211
> 
>>              ArrayList list = new ArrayList();
>>              
>>              long getResultsStartTime = System.currentTimeMillis();
>>              
>>              QueryResult results = getQueryResults(query);
>>              
>>              long getResultsEndTime = System.currentTimeMillis();
>>              log.info("getting nodes from Resultset took " + 
>> (getResultsEndTime -
>> getResultsStartTime) + " ms");
>>              
>>              NodeIterator it =  results.getNodes();
>>              
>> 
>>              log.debug("Size is  " + it.getSize());
>>              BulletinDTO dto = null;
>>              //while (it.hasNext()) {
>>              long loopStartTime = System.currentTimeMillis();
>>              for (int i= 0; i < it.getSize(); i++){
>>                      
>>                      Node n = (Node) it.next();
>>                      
>>                      //log.debug("Node name is  " + n.getName());
>>                      
>>                      dto = new BulletinDTO();
>>                      dto.setName(n.getName());
>>                      dto.setUuid(n.getUUID());
>>                      dto.setBulletinId(n.getProperty(ID).getLong());
>>              
>> dto.setBulletinTypeRef(n.getProperty(REF_BULLETIN_TYPE).getNode().getUUID());
>>                      
>> dto.setModelRef(n.getProperty(REF_MODEL).getNode().getUUID());
>>                      dto.setContent(n.getProperty(REF_TOPIC).getStream());
>>                      list.add(dto);
>>                      
>>              }
>>              long loopEndTime = System.currentTimeMillis();
>>              log.info("To loop through and populate 1000 dtos it took" +
>> (loopEndTime -
>> loopStartTime) + " ms");
>>              
>>              long finishTime = System.currentTimeMillis();
>>              log.debug("Finished in " + (finishTime - startTime) + "ms");
>>              log.info("Finished");
>>              return list;
>> 
>>              }
>> 
>> metrics from log are 
>> 13-43-2007 11:43:16:726 - INFO -
>> com.entity.data.daoimpl.GenericDAOImpl.getQueryResults() :Finished in 500
>> ms
>> 13-43-2007 11:43:16:726 - INFO -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :getting nodes
>> from Resultset took 500 ms
>> 13-43-2007 11:43:16:742 - DEBUG -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :Size is  10000
>> 13-43-2007 11:43:32:226 - INFO -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :To loop
>> through
>> and populate 1000 dtos it took15484 ms
>> 13-43-2007 11:43:32:226 - DEBUG -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :Finished in
>> 16000ms
> 
> please note that the size of the query result is 10'000 (!) and not one 
> thousand. the timing quite clearly shows that the majority of the time is
> spend 
> iterating over the result and retrieving the nodes.
> 
>> I made another call with in same session, their logs are
>> 
>> 13-43-2007 11:43:32:414 - INFO -
>> com.entity.data.daoimpl.GenericDAOImpl.getQueryResults() :Finished in 188
>> ms
>> 13-43-2007 11:43:32:414 - INFO -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :getting nodes
>> from Resultset took 188 ms
>> 13-43-2007 11:43:32:430 - DEBUG -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :Size is  10000
>> 13-43-2007 11:43:33:305 - INFO -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :To loop
>> through
>> and populate 1000 dtos it took875 ms
>> 13-43-2007 11:43:33:305 - DEBUG -
>> com.entity.data.daoimpl.BulletinDAOImpl.getBulletinList() :Finished in
>> 1079ms
> 
> note that the over all time to execute your code dropped significantly
> because 
> of the caches in jackrabbit. most nodes are now already cached and the
> time to 
> loop over the nodes dropped to 875 ms.
> 
> regards
>   marcel
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Problem-with-NodeIterator-tf4791277.html#a13743461
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.

Reply via email to