hi alexander
On Jan 31, 2008 1:00 PM, Alexander Nesterov <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I have problems with adding child nodes to one parent node from
> different sessions running in concurrent threads.
>
> I've wrote a test which creates two sessions and launches two threads
> used to add nodes to the same parent node. The names of child nodes
> are unique. According to JCR-584 "Improve handling of concurrent node
> modifications" the following scenario "session 1 adds or removes child
> node 'x', session 2 adds or removes child node 'y'" should run
> gracefully. But my test constantly fails with various exceptions like:
>
> Exception in thread "Thread-8" java.lang.RuntimeException:
> javax.jcr.nodetype.ConstraintViolationException: /A/7 needs to be
> saved as well.
>
> or
>
> Exception in thread "Thread-8" java.lang.RuntimeException:
> javax.jcr.RepositoryException: /A: unable to update item.: Unable to
> resolve path for item:
> 016b885a-64aa-45b9-a990-05cbabb4586f/{http://www.jcp.org/jcr/1.0}primaryType:
> Unable to resolve path for item:
> 016b885a-64aa-45b9-a990-05cbabb4586f/{http://www.jcp.org/jcr/1.0}primaryType
>
> The code of my test is the following:
>
> public void testSync() throws Exception
> {
> Node rootNode = getSession ().getRootNode ();
> rootNode.addNode ("A");
> rootNode.save();
>
> final Session session1 = getRepository().login (new SimpleCredentials
> ("userName", "password".toCharArray()));
> final Session session2 = getRepository().login (new SimpleCredentials
> ("userName", "password".toCharArray()));
>
> Thread thread1 = new Thread (new Runnable()
> {
> public void run()
> {
> try
> {
> addNodes ("A", session1, 0);
> }
> catch (RepositoryException ex)
> {
> throw new RuntimeException (ex);
> }
> }
> });
>
> Thread thread2 = new Thread (new Runnable()
> {
> public void run()
> {
> try
> {
> addNodes ("A", session2, 1001);
> }
> catch (RepositoryException ex)
> {
> throw new RuntimeException (ex);
> }
> }
> });
>
> thread1.start();
> thread2.start();
>
> thread1.join();
> thread2.join();
> }
>
> private void addNodes (String parentName, Session session, int startIndex)
> throws RepositoryException
> {
> Node parentNode = session.getRootNode().getNode (parentName);
> for (int i = startIndex; i < startIndex + 100; i++)
> {
> String name = Integer.toString (i);
> parentNode.addNode (name);
> parentNode.save();
> }
> }
>
> The test fails both on Jackrabbit 1.3.3 and 1.4.
>
> Do I get something wrong or is it a bug in Jackrabbit?
this seems to be a bug. could you please create a jira issue
and include your test case?
thanks!
stefan
>
> TIA,
> --
> Alexander Nesterov
>