yes, i'll see if i get time to go down that path. it's mostly to keep the
programmer happy and productive, not a 100% requirement.


On Thu, Jul 7, 2011 at 9:58 PM, Michael Hunger <
michael.hun...@neotechnology.com> wrote:

> Right those are some of the issues.
>
> So one way would be to specify a tx timeout upfront which automatically
> rolls back the tx (you can just add a kind of timer/TTL to the tx-session
> object) and clears it as well.
>
> Keeping state on the server is always a problem but I don't see a different
> solution for that. But it might worth a try especially if it helps you with
> your concrete scenario.
>
> Michael
>
>
>
> Am 07.07.2011 um 15:30 schrieb Patrik Sundberg:
>
> > good idea. i'll ponder it for a bit.
> >
> > but yes, we clearly need to keep state around, so for REST it'd be
> carried
> > around in session. but on server side I guess you have issues with never
> > ending transactions, how to cull them, etc. since it's a stateless
> > req/response comm channel. on a permanent channel it's easy to detect
> > disconnect and clean up, over http not as easy.
> >
> > thanks
> >
> >
> > On Thu, Jul 7, 2011 at 12:42 PM, Michael Hunger <
> > michael.hun...@neotechnology.com> wrote:
> >
> >> But then it would be possible to write a RequestFilter for the
> Neo4j-Server
> >> that does start and commit/rollbacks transactions.
> >>
> >> I.e. you create a tx object and put it in the session-context if there
> is
> >> none and return a tx-token that the filter uses (e.g. as header-field).
> >> then later you can pull it out again and attach it to the current thread
> >> (that's the tricky part).
> >> On commit or rollback you just do that with the tx (after attaching it
> to
> >> the thread).
> >>
> >> As the RestfulGraphDb and the Filter share the same execution thread
> this
> >> could/should work.
> >>
> >> I wouldn't want to support that in the neo4j server by default as this
> >> creates a lot of server-side state that has to be managed.
> >>
> >> But if it works out one could publish that as server-extension.
> >>
> >> HTH
> >>
> >> Michael
> >>
> >> Am 07.07.2011 um 13:30 schrieb Patrik Sundberg:
> >>
> >>> Following up on the topic of transactions for client API.
> >>>
> >>> What is the current plan for some sort of client side API supporting
> >>> transactions?
> >>>
> >>> I'm playing around with some ideas here and the lack of transaction
> >> support
> >>> in the client API is problematic. I know there's BATCH support in the
> >> REST
> >>> API which effectively is a transaction, but it doesn't always suit. For
> >>> example I have the following steps that I'd like to accomplish:
> >>> - create a reference node
> >>> - check if a node with a given domain id exist in an index, if it does,
> >> fail
> >>> - create an entity node for the given domain id
> >>> - add entity node to the index
> >>> - attach entity node to ref node
> >>> - create a node representing a specific version of the entity node
> >>> - attach the version node to the entity node, with some properties on
> the
> >>> relationships signifying valid time
> >>>
> >>> That should all be considered an atomic operation, all or nothing.
> Doing
> >> it
> >>> step by step is very easy and natural with REST API, but trying to roll
> >> back
> >>> on error is flaky.
> >>>
> >>> I think could batch it, but from a programming style it becomes pretty
> >>> unnatural. Same thing with a plugin for doing the steps. The natural
> flow
> >> of
> >>> code client side gets distorted by having to collect a lot of data
> >> upfront
> >>> and then provide all that data to a method call. It's doable, just
> >> doesn't
> >>> seem ideal.
> >>>
> >>> Using an embedded db, exposing as some sort of service etc is also
> >> doable,
> >>> it's just that my domain is graph related and I'm pretty happy with
> just
> >> the
> >>> "primitives" and using a remote server (if I could have transactions).
> >>> Number of clients are quite a few and need to share their data + don't
> >> all
> >>> run all the time so can't make the client API the embedded api.
> >>>
> >>> I'd think it's not an uncommon situation and many people wishing for a
> >>> support for natural client side transaction API (similar to embedded
> >> api).
> >>>
> >>> Patrik
> >>>
> >>>
> >>> On Tue, Jul 5, 2011 at 12:27 PM, Patrik Sundberg
> >>> <patrik.sundb...@gmail.com>wrote:
> >>>
> >>>> yeah, harder problem than my first hunch.
> >>>>
> >>>> sounds like plugins is the way to go for now, hopefully introduction
> of
> >>>> non-rest protocol with same interface as embedded API in 1.5 will
> >> simplify
> >>>> things in the future.
> >>>>
> >>>> thanks
> >>>>
> >>>>
> >>>> On Mon, Jul 4, 2011 at 11:07 PM, Michael Hunger <
> >>>> michael.hun...@neotechnology.com> wrote:
> >>>>
> >>>>> Patrick,
> >>>>>
> >>>>> I've already thought long and hard about that.
> >>>>>
> >>>>> The problem is you can't implement that transparently as you can
> never
> >>>>> allow code in a second call rely on data derived from a previous one.
> >>>>>
> >>>>> The simplest form that I came up with is a "BatchCommand" that gets
> an
> >> API
> >>>>> interface injected that allows requests but doesn't return data.
> >>>>>
> >>>>> The execution of this Batch command would then return a "BatchResult"
> >> with
> >>>>> all the data acquired during the batch operation.
> >>>>>
> >>>>> Another way would be to inject the normal GraphDatabaseService
> >> interface,
> >>>>> record the invocations in a first phase and then execute the batch
> >> command
> >>>>> again (this time ignoring the inputs but then returning the results)
> >> but
> >>>>> this is bad from a usability perspective.
> >>>>>
> >>>>> One critical issue is the creation of relationships as they depend on
> >> the
> >>>>> correct node-ids of previously created nodes. Jacob already thought
> >> about
> >>>>> some means of referring to previous output data but I think kept away
> >> from
> >>>>> that as we didn't want to make this batch-interface a turing complete
> >>>>> language.
> >>>>>
> >>>>> So you see, it's not that simple.
> >>>>>
> >>>>> Michael
> >>>>>
> >>>>> Am 27.06.2011 um 20:45 schrieb Patrik Sundberg:
> >>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> Since there is now possible to send off batches of operations via
> the
> >>>>> REST
> >>>>>> interface, I was wondering if anyone has started to look at
> >> implementing
> >>>>>> transactions in the java REST client (
> >>>>>> https://github.com/jexp/neo4j-java-rest-binding) ?
> >>>>>>
> >>>>>> It would seem possible, but I can also see it could involve some
> major
> >>>>>> reorganizing of the internals of the client to make everything aware
> >> of
> >>>>>> transactions and submit via batch command.
> >>>>>>
> >>>>>> Patrik
> >>>>>> _______________________________________________
> >>>>>> Neo4j mailing list
> >>>>>> User@lists.neo4j.org
> >>>>>> https://lists.neo4j.org/mailman/listinfo/user
> >>>>>
> >>>>> _______________________________________________
> >>>>> Neo4j mailing list
> >>>>> User@lists.neo4j.org
> >>>>> https://lists.neo4j.org/mailman/listinfo/user
> >>>>>
> >>>>
> >>>>
> >>> _______________________________________________
> >>> Neo4j mailing list
> >>> User@lists.neo4j.org
> >>> https://lists.neo4j.org/mailman/listinfo/user
> >>
> >> _______________________________________________
> >> Neo4j mailing list
> >> User@lists.neo4j.org
> >> https://lists.neo4j.org/mailman/listinfo/user
> >>
> > _______________________________________________
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
>
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to