Andy, Which part of that document is the part that might help? My code already creates a new Store for each transaction. My code already uses begin/commit.
(I've read the document many times previously, by the way.) Dave L. -----Original Message----- From: Andy Seaborne [mailto:a...@apache.org] Sent: Monday, April 15, 2013 9:42 AM To: users@jena.apache.org Subject: Re: Concurrency in Jena/SDB This might help: http://jena.apache.org/documentation/sdb/javaapi.html#connection-management Andy On 15/04/13 14:38, David Jordan wrote: > > So every call to a method of Model or OntModel is done in a separate > transaction? This could easily explain the poor performance I am getting, and > those of others who have complained about SDB performance in this group. > > Your code example is very sparse. Are there calls to make to get to an > associated JDBC transaction? All of the JDBC connection info is described in > Jena's assembler files, so it seems like an API should be available to access > the needed JDBC objects. > > -----Original Message----- > From: Damian Steer [mailto:cm...@bristol.ac.uk] On Behalf Of Damian Steer > Sent: Monday, April 15, 2013 9:27 AM > To: users@jena.apache.org > Subject: Re: Concurrency in Jena/SDB > > > On 15 Apr 2013, at 12:35, "Lebling, David (US SSA)" > <david.lebl...@baesystems.com> wrote: > >> Andy, >> >> I was hoping you might have some guidance as to what you mean by "You need >> to control the JDBC transaction in your code to get isolation between JVMs." >> >> Is there some interface in SDB that will accomplish this, or does this >> require SQL-implementation-specific code, thus tearing down the SDB façade? >> If it does require such implementation-specific code, do you have any >> pointers to examples which do it correctly? Is it necessary to write one's >> own transaction begin/commit/abort methods? > > SDB (as you'd expect) handles transactions itself by default. All model > operations happen in a single transaction, with a minor wrinkle around really > big loads (it will start committing every 20,000 triples iirc to avoid huge > transactions). > > You can also wrap operations like this to get some of that behaviour across a > number of operations: > > model.notifyEvent(GraphEvents.startRead) ; try { ... do add/remove operations > ... > } finally { > model.notifyEvent(GraphEvents.finishRead) ; } > > However it's not especially smart, so you can take control of the transaction > yourself by setting autocommit to false on the JDBC connection. SDB will then > assume the client is responsible for managing the transactions. > > Just remember to commit() and reset autocommit when you finish. > > Damian >