On 02/01/2017 13:00, Dave Reynolds wrote:
>>
>> Yes it does. I want to speedup things, as ontologies are not changing.
>>
>> <DocumentManagerPolicy>
>>     <!-- policy for controlling the document manager's behaviour -->
>>     <processImports rdf:datatype="&xsd;boolean">true</processImports>
>>     <cacheModels rdf:datatype="&xsd;boolean">true</cacheModels>
>> </DocumentManagerPolicy>
>>
>>> Does the code you haven't shown us close your OntModels somewhere?
>>
>> I call OntModel close on local models vars. But each time I'm creating a
>> new model, so don't understand why it's being closed.
> 
> It sounds like your OntModels include imports. These are implemented as
> separate sub-models which are bound into a multi-union. If you close the
> OntModel that will (I think) close all the imported models.
> 
> If some of those imported models are cached (which seems to be the case
> with your setup) and thus shared with other OntModels then you will be
> closing submodels of other concurrent OntModel instances. That would
> explain your symptoms.

I have removed the cached and now it takes ages to perform stuff. As an
example, something that took 20 sec now it takes 170 sec. I cannot go
for that solution.

> 
> Since all your models seem to be in-memory then you could simply drop
> the close(), it's not necessary here.

Are there any kind of models available in current Jena version? I was
storing the Dataset using TDB. Then I call getNamedModel() on the
dataset and work with it or just with the in-memory.

Is there any way to use another thing different that the file based TDB?

>>> However, since FileManager caching doesn't look particularly thread-safe
>>> to me then unless you are doing your own synchronization around all the
>>> operations that touch it that could also cause problems.
>>
>> Could you further explain that? I don't fully understand. What operation
>> are touch what? The local ontology files are there just in case the
>> remote ones are not accessible.
> 
> FileManager doesn't say it is thread safe and from a quick look at the
> code it doesn't seem to be. So if you have two different threads which
> are concurrently importing models via the same FileManager then the
> cache could become corrupted.
> 
> Possible ways round that would include:
> 
>  - preloading your FileManager cache will all the relevant imported
> models so there's no concurrent update to the cache

How can I do that? Sorry for the "silly" question. It seems the easiest
way to solve the problem.

I'm also thinking on FileManager.setModelCaching(false). Would it make
any sense?

>  - build your own thread-safe filemanager (hmm, don't think the design
> allows for that)
> 
>  - perform all your local OntModel instantiation from within a suitably
> protected critical section so that all the import processing is done by
> a single thread
> 
> Dave
> 
> 
> 

Reply via email to