hi johannes from the webdav server side it should be possible to create referenceable node and a property referring to it in a single save call. but you have to know the jcr:uuid in order to set it in the referenceable property. however, the format of that uuid is implementation specific. in other words: you would make sure you create the nodes and the ref-properties with a value valid for the backend. so, i guess at the moment it would be the responsibility of your PHP JCR API implementation to generated a valid uuid since there is no way to call "generateUUID" neither on SPI nor on the DAV-server implementation. regards angela On 6/14/11 10:55 AM, Johannes Stark wrote: > Hi Angela, > > we are using the Jackrabbit Standalone Server and access it via WebDav. So it's case b_. > Well what we do is to rebuild the JCR API in PHP. We have a PHP session that simulates the JCR session. All changes made are cached by the PHP session. On $session->save() all changes are written to Jackrabbit via webdav. It's working great unless for references to new nodes within a session due to the unavailability of uuids. So our thought for the proceeding within PHP was the following: > > - start a PHP session > - begin transaction > - do some work in the PHP cache like adding nodes and properties (unless poperties containing references) > - save session (write everything to Jackrabbit, uuids of new referencable nodes should be available after that) > - create all references in the PHP cache > - save session again (write references to Jackrabbit) > - commit transaction > > We would like to do it this way because that would give us the ability to do a rollback in case of an error during all the writing. > > So I would be great if uuids of new referenceable nodes would be available immediately after they were created via webdav within a transaction. > > > Kind regards, > Johannes > > -------- Original-Nachricht -------- >> Datum: Fri, 10 Jun 2011 10:27:31 +0200 >> Von: Angela Schreiber >> An: users@jackrabbit.apache.org >> Betreff: Re: Adding nodes with references within a single transaction via webdav > >> hi johannes >> >> the subject "Adding nodes with references within a single transaction >> via webdav" somehow leaves me uncertain if i understand your issue. >> >> a_ are you taking about a jcr2spi repository? >> b_ or are you talking about the webdav server implementation? >> >>> What we definitely need for our CMF are references between JCR nodes. >> E.g. you would like to assign pages to menu items or you would like to have a >> picture on several pages and so on. >>> But one big problem for us is that you are not able to reference a node >> until it is persisted. We also had a look at transactions: same issue. >> Referenceable nodes will get their uuid not before the transaction is >> committed. So we are not able to persist two or more content items with references >> to each other within the same transaction. Well this behavior is totally in >> accordance to the spec. >> >> in case of a_: >> >> that's correct. node are only referenceable once the jcr:uuid property >> has been persisted. the reason for this is that the final nature of the >> uuid is defined by the backend and there is little jcr2spi can do about >> this (except if there was an explicit call to the spi-implementation to >> generate the uuid which would as well generated some extra round trips). >> >> in case of b_: >> i think that should be possible as the underlying jcr implementation is >> a jackrabbit-core which makes a node referenceable immediately. >> >> kind regards >> angela >