From: <wol...@us...> - 2004-03-05 11:37:28
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/http/servlets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5368/src/org/exist/http/servlets Modified Files: XQueryServlet.java Log Message: Fixed some synchronization issues in the XQuery engine: * Compiled XQuery expressions are no longer shared between different threads. The XQuery cache in XQueryServlet and XQueryGenerator is declared as thread local now. * The XQueryContext of a compiled XQuery now gets the correct database broker object set. Index: XQueryServlet.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/http/servlets/XQueryServlet.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** XQueryServlet.java 16 Feb 2004 13:02:17 -0000 1.5 --- XQueryServlet.java 5 Mar 2004 11:15:29 -0000 1.6 *************** *** 99,103 **** private String encoding = null; ! private Map cache = new HashMap(); /* (non-Javadoc) --- 99,111 ---- private String encoding = null; ! private ThreadLocal cache = new ThreadLocal() { ! ! /* (non-Javadoc) ! * @see java.lang.ThreadLocal#initialValue() ! */ ! protected Object initialValue() { ! return new HashMap(); ! } ! }; /* (non-Javadoc) *************** *** 210,221 **** CompiledExpression compiled; ! CachedQuery cached = (CachedQuery)cache.get(path); if(cached == null || (!cached.isValid())) { String xquery = readQuery(f); compiled = service.compile(xquery); cached = new CachedQuery(f, compiled); ! cache.put(path, cached); ! } else compiled = cached.getExpression(); ResourceSet result = service.execute(compiled); for(ResourceIterator i = result.getIterator(); i.hasMoreResources(); ) { --- 218,230 ---- CompiledExpression compiled; ! CachedQuery cached = (CachedQuery)((Map)cache.get()).get(path); if(cached == null || (!cached.isValid())) { String xquery = readQuery(f); compiled = service.compile(xquery); cached = new CachedQuery(f, compiled); ! ((Map)cache.get()).put(path, cached); ! } else { compiled = cached.getExpression(); + } ResourceSet result = service.execute(compiled); for(ResourceIterator i = result.getIterator(); i.hasMoreResources(); ) { |