On Thu, Sep 25, 2008 at 8:06 AM, Michael Hunger <[EMAIL PROTECTED]> wrote:
> Thanks for the answers. The main question however remains. I don't know how 
> this is with Software Transactional Memory.
>
> If you hold nodes between transactions and they are e.g. deleted by another 
> thread/user then your reference is no longer
> valid. Changed properties/relationships shouldn't matter as they are just 
> provided by a transactional neo service. But
> removal is still a problem (imho).

If the node you wrap is deleted "from under you" (for example by
another operation) then you're going to get a runtime exception next
time you invoke a method on that node reference. So it's up to the
layer above to make sure that it invalidates any long-held references
to those nodes. There's nothing we can do to prevent that other than
alerting the client through a runtime exception.

In our applications, we new up domain wrappers very liberally. The
typical "getXXXByYYY()" operations on a service interface are for
example implemented as such:

   // pseudo code
   Person getPersonByName( String name )
   {
      Node underlyingNode = someIndex.getSingleNodeFor( name );
      return new PersonImpl( underlyingNode );
   }

And we also make sure that we in data structures in the upper layers
only store identifyers and execute a lookup, rather than references to
the actual nodes or relationships.

Does that help?

Cheers,

-- 
Emil Eifrém, CEO [EMAIL PROTECTED]
Neo Technology, www.neotechnology.com
Cell: +46 733 462 271 | US: 206 403 8808
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to