hi nicolas
On 7/6/05, Nicolas Belisle <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I'm a Jackrabbit newbie. I'm doing some tests with the tool and I'm having
> problem with concurrent sessions.
>
> I have joined my (simple) test class (JCRTest) and the exception I get from
> running it.
>
> Anyone had similar problems ?
this seems to be a bug, please post a jira issue.
thanks
stefan
>
> Regards,
>
> Nicolas
>
>
> -->The exception report:
> java.util.NoSuchElementException: cdeab285-fdbc-4af3-918a-bf4316a29276
> at org.apache.jackrabbit.core.LazyItemIterator.next(LazyItemIterator.java:157)
> at
> org.apache.jackrabbit.core.LazyItemIterator.nextNode(LazyItemIterator.java:98)
> at app.JCRTest$ThreadDeleter.run(JCRTest.java:107)
>
> -->The class:
> package app;
>
> import java.util.Hashtable;
>
> import javax.jcr.Node;
> import javax.jcr.NodeIterator;
> import javax.jcr.Repository;
> import javax.jcr.RepositoryException;
> import javax.jcr.Session;
> import javax.jcr.SimpleCredentials;
> import javax.jcr.observation.Event;
> import javax.jcr.observation.EventIterator;
> import javax.jcr.observation.EventListener;
> import javax.naming.Context;
> import javax.naming.InitialContext;
>
> import org.apache.jackrabbit.core.jndi.RegistryHelper;
> import org.apache.jackrabbit.core.value.StringValue;
>
> public class JCRTest {
>
> private Repository repository;
>
> public JCRTest(Repository repository) {
> this.repository = repository;
> }
>
> public void execute() throws Exception {
> Session session = this.repository.login(new
> SimpleCredentials("", "".toCharArray()), null);
>
> Node rn = session.getRootNode();
> new ThreadObserver().start();
> Node n = rn.addNode("node" + System.currentTimeMillis(),
> "nt:unstructured");
> n.setProperty("testprop", new StringValue("Hello, World."));
> new ThreadDeleter().start();
>
> session.save();
> session.logout();
> }
>
> public static void main(String[] args) {
> try {
> String configFile = "repository/repository.xml";
> String repHomeDir = "repository";
>
> Hashtable env = new Hashtable();
> env.put(Context.INITIAL_CONTEXT_FACTORY,
> "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
> env.put(Context.PROVIDER_URL, "localhost");
> InitialContext ctx = new InitialContext(env);
>
> RegistryHelper.registerRepository(ctx, "repo",
> configFile, repHomeDir, true);
> Repository r = (Repository) ctx.lookup("repo");
>
> for (int i = 0; i < 20; i++) {
> JCRTest test = new JCRTest(r);
> test.execute();
> }
>
> } catch (Exception e){
> e.printStackTrace();
> }
> }
>
> public class ThreadObserver extends Thread {
> public void run() {
> System.out.println("Observing thread started");
> try {
> Session session = repository.login(new
> SimpleCredentials("", "".toCharArray()));
> EventListener el = new EventListener() {
> public void onEvent(EventIterator
> events) {
> while (events.hasNext()) {
> try {
> Thread.sleep(100);
> } catch (InterruptedException e) {}
>
> Event e = events.nextEvent();
> if (e.getType() ==
> Event.NODE_ADDED) {
> try {
>
> System.out.println("Node
> added : " + e.getPath());
> } catch
> (RepositoryException re) {
>
> re.printStackTrace();
> }
> }
>
> }
> }
> };
>
> session.getWorkspace().getObservationManager().addEventListener(el,
> Event.NODE_ADDED, "/", true, null, null, false);
> session.save();
> //Some time to listen
> Thread.sleep(500);
> session.logout();
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
> }
>
> public class ThreadDeleter extends Thread {
> public void run() {
> System.out.println("Deleter thread started");
> try {
> Session session = repository.login(new
> SimpleCredentials("", "".toCharArray()));
>
> Node rn = session.getRootNode();
> for (NodeIterator ni = rn.getNodes();
> ni.hasNext(); ) {
> Thread.sleep(100);
> Node currentNode = ni.nextNode();
> if
> (currentNode.getName().startsWith("node")) {
> currentNode.remove();
> }
> }
> session.save();
> session.logout();
>
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
> }
> }
>
>