On Wed, Dec 16, 2009 at 3:30 PM, Rick Bullotta
<rick.bullo...@burningskysoftware.com> wrote:
> Thanks, Johan.
>
> My concern relates to the "transaction interleaving" that might
> occur...which could definitely result in unexpected consequences, could it
> not?
>
> If I create a transaction on a specific thread, can I safely assume that it
> is independent from a transaction that is started on another thread?  In

Yes you can. Once a transaction is started (NeoService.beginTx) the
transaction will be associated with the current thread.  I just
checked the javadoc and wiki documentation, none of them really
explains this in a clear way so thanks for pointing this out.

Regards,
-Johan

> general, each servlet request will be handled on a separate thread, and we
> will have a background pool of worker threads for other tasks, all of which
> will occasionally need to access Neo.
>
> I just want to make sure I fully understand the transactioning model and its
> implications.
>
> Rick
>
> -----Original Message-----
> From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On
> Behalf Of Johan Svensson
> Sent: Wednesday, December 16, 2009 4:49 AM
> To: Neo user discussions
> Subject: Re: [Neo] Best practices for using Neo within a web application
>
> Hi,
>
> On Tue, Dec 15, 2009 at 2:44 PM, Rick Bullotta
> <rick.bullo...@burningskysoftware.com> wrote:
>> Hello, all.
>>
>> I was wondering if there was any guidance/best practices for leveraging
> Neo
>> in a scenario where multiple servlets in a web application will have the
>> need to read/insert/update/delete nodes and relationships simultaneously.
>>
>
> We are working at getting such information up on the wiki (there are
> some info but it is spread out over different pages and needs to be
> completed/updated).
>
>> In particular:
>>
>>
>>
>> 1)      Must/should the NeoService be a singleton shared amongst all
>> servlets?
>
> Yes or better is not to have singletons and instead use inversion of
> control and inject the NeoService where it is needed.
>
>>
>> 2)      When best to create transactions - on each invocation?
>>
>
> Wrap each request in a transaction, this work well in most scenarios.
>
>> 3)      How do the threading implications of the servlet's service()
> method
>> affect transactions and unintentional transaction nesting?
>
> Should be no problem since trying to start a transaction when there is
> already one running will do nothing and use the current running
> transaction. See http://wiki.neo4j.org/content/Neo_Transactions (flat
> nested transactions).
>
>>
>> 4)      Is there any advantage to using additional EmbeddedReadOnlyNeo
>> instances in cases where access is truly read only?
>>
>
> No. If on the same JVM pass around the normal EmbeddedNeo instance to
> read only requests also.
>
>>
>>
>> In some cases, there may be a desire to have multiple web applications in
>> the same web app server (Tomcat, JBoss, etc.) accessing a common Neo graph
>> structure.  In this case, what are the options?  We were thinking that the
>> only option is RemoteNeo between the web apps, or some other RPC layer
>> invoking methods in classes that reside in the "master" web app that
>> actually has a NeoService instance.
>>
>
> Was a while since I worked with Tomcat/JBoss but I take it the problem
> you have is that each web app has its own class loader? If you somehow
> could put the Neo4j classes and dependencies on a common class loader
> used by all web apps that problem should go away (but I don't really
> know this kind of stuff, anyone else?).
>
> Regards,
> -Johan
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to