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<[email protected]>
An: [email protected]
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