jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jukka Zitting" <jukka.zitt...@gmail.com>
Subject Re: IndexOutOfBoundsException in QueryImpl.execute
Date Thu, 18 May 2006 08:07:02 GMT
Hi,

On 5/18/06, Alexandru Popescu <the.mindstorm.mailinglist@gmail.com> wrote:
> Unfortunately there is no attachment :-)

It must have gotten lost along the way. Here's the
ConcurrentQueryTest.java file inline:

----------
import java.io.*;
import java.util.*;
import javax.jcr.*;
import javax.jcr.query.*;
import org.apache.jackrabbit.core.TestRepository;
import junit.framework.TestCase;

public class ConcurrentQueryTest extends TestCase {

    private class QueryRunner implements Runnable {

        private final Session session;

        public QueryRunner(Session session) {
            this.session = session;
        }

        public void run() {
            try {
                for (int i = 0; i < 1000; i++) {
                    QueryManager manager =
                        session.getWorkspace().getQueryManager();
                    Query query = manager.createQuery(
                        "//*[jcr:contains(.,'void')]", Query.XPATH);
                    query.execute().getNodes();
                }
            } catch (Exception e) {
                exception = e;
            } finally {
                session.logout();
            }
        }

    }

    private Exception exception;

    private Session session;

    private Thread a;

    private Thread b;

    protected void setUp() throws Exception {
        Repository repository = TestRepository.getInstance();
        session = repository.login();
        Node n = session.getRootNode().addNode("test");
        for (int i = 0; i < 1000; i++) {
            Node f = n.addNode("node" + i, "nt:file");
            Node r = f.addNode("jcr:content", "nt:resource");
            r.setProperty("jcr:mimeType", "text/plain");
            r.setProperty("jcr:lastModified", Calendar.getInstance());
            InputStream is = new FileInputStream("ConcurrentQueryTest.java");
            try {
                r.setProperty("jcr:data", is);
            } finally {
                is.close();
            }
        }
        session.save();

        exception = null;
        a = new Thread(new QueryRunner(repository.login()));
        b = new Thread(new QueryRunner(repository.login()));
    }

    protected void tearDown() throws Exception {
        session.getItem("/test").remove();
        session.save();
        session.logout();
    }

    public void testConcurrentQuery() throws Exception {
        a.start();
        b.start();
        a.join();
        b.join();
        if (exception != null) {
            fail("Got exception: " + exception.getMessage());
        }
    }

}
----------

BR,

Jukka Zitting

-- 
Yukatan - http://yukatan.fi/ - info@yukatan.fi
Software craftsmanship, JCR consulting, and Java development
Mime
View raw message