Hi Waler,
I invested some efforts to create a template class implementing
waitForLock() functionality. It respects the JSR, so it can be used with
any implementation that supports locking.
You can read about it here :
http://www.mail-archive.com/jackrabbit-dev%40incubator.apache.org/msg01870.html
Note: I haven't used it in production. I also welcome any comments...
Regards,
Nicolas
Le 10:29 2005-08-11, vous avez écrit:
>Hi Stefan,
>
>>the first InvalidItemStateException is correct. i'll investigate the
>>ItemNotFoundException. i guess there's a 'synchronized' missing somewhere...
>
>I extended my testcase a little bit. Now I lock the rootnode for
>adding/deleting subnodes. But the program hangs sometimes while
>locking or releasing the lock again.
>
>Some waitForLock() method would be cool too ;) Perhaps with
>some sort of waitQueue. But I know - its not in the spec.
>
>cheers,
>Walter
>--
>
>public void run() {
> // simulate a user...
> debug("started.");
> String state = "";
> Lock l = null;
> Node rn = null;
> try {
> debug("1");
> rn = session.getRootNode();
> debug("2");
> int count = 0;
> while(rn.isLocked() && count < 30) {
> sleep();
> count++;
> }
> debug("3");
> l = rn.lock(false, true);
> debug("4");
> state = "searching testnode";
> if (rn.hasNode("testnode-" + identity)) {
> debug("4.1");
> try {
> state = "removing testnode";
> rn.getNode("testnode-" + identity).remove();
> debug("4.2");
> session.save();
> sleep();
> } catch(ItemNotFoundException infe) {
> debug("error while removing testnode " +
> identity);
> infe.printStackTrace();
> }
> }
> debug("5");
> state = "adding testnode";
> Node n = rn.addNode("testnode-" + identity ,
> "nt:unstructured");
> debug("6");
> session.save();
> debug("7");
> rn.unlock();
> debug("8");
> state = "setting property";
> n.setProperty("testprop", new StringValue("Hello
> World!"));
> session.save();
> sleep();
>
> for(int i=0; i<100; i++) {
> state = "adding subnode " + i;
> n.addNode("x" + i, "nt:unstructured");
> state = "adding property to subnode " + i;
> n.setProperty("testprop","xxx");
> if(i%10==0) {
> state = "saving pending subnodes";
> session.save();
> System.out.print(".");
> }
> sleep();
> }
> session.save();
>
> } catch( Exception e) {
> debug("Exception: " + state);
> e.printStackTrace();
> } finally {
> if(l != null && rn != null) {
> try {
> rn.unlock();
> } catch( RepositoryException e )
> {
> }
> }
> session.logout();
> }
>
> debug("ended.");
> }
|