On 23/07/14 14:21, Claude Warren wrote:
I have lots of moving parts but here goes an attempt at a description.

I have a dataset with multiple named graphs.

I am running a modified (reworked?) version of Fuseki -- Old version but
modified to use JAXB and provide some extra restful functionality to
support queries and jquery clients.

I have 2 threads running in a ScheduledExecutorService.

The Runnables those threads execute do some work (external rest calls) and
then update a named graph with the results.  The Runnables have the dataset
and a resource.   I start a transaction on the dataset and update the
resource. then commit.

To make things more difficult the resource is wrapped with an PA4RDF
annotated object.

Sounds like I need to change the process to send in the URI of the resource
and the model name so that I can get the object within the transaction.

"resource" here being a com.hp.hpl.jena.rdf.model.Resource?

Then, yes, the transaction needs to re-get the Resource as there is a hidden model if you use any resource operations (Resource.get*, Resource.add* etc).

While some uses should work (if you know the internals of Resource), it looks like a bad idea.

----------------

Rambling:

An immediate reaction might be "transactions everywhere" (Jena3). But there are also use cases for the Model API that don't care it would all be a burden and migration cost. One model (no dataset in sight), memory-backed, non-transactional use (common case - single threaded). This ought to have a simple "create-use" style and adding suggested or enforced transactions adds nothing except clutter.

I wonder if there could be a rebinding graph that lives across transaction boundaries (c.f. DatasetGraphTransaction) but enforces transction use once it has been used transactionally at least once.

One simplification we could make is "one model - one dataset". At the moment a model (graph) can be in two+ general purpose datasets. (I can't actually think of a good use for that but its technically possible.)

        Andy


Thx,
Claude





On Wed, Jul 23, 2014 at 1:51 PM, Andy Seaborne <[email protected]> wrote:

On 23/07/14 11:37, Claude Warren wrote:

Are there any known issues mixing transactions on datasources and model
locks (e.g. model.enterCriticalSection(Lock.WRITE)) ?



No. Well, not known to me :-)

But I would hazard a guess you have encountered something.

Could you describe your setup?  I get snippets from your emails but not an
overall picture.

Are you really trying to do multithreads inside one transaction?

Note - it is necessary to get the model inside a transaction and not use
it across transaction boundaries.

(It's very visible API change to fix this :-()

         Andy





Reply via email to