On 31/12/2016 16:42, Andy Seaborne wrote:
> 
>> sometime when concurrently calling the webservice
> 
> Having code fragment does not help here - could it be that one
> request is doing
> 
> Individual.isClass()
> 
> while another is closing the model?
> 
> if so, why is one request closing a shared object? Either keep the 
> object open, or make a fresh object per request.
> 
> Andy
> 

I know it's difficult. But could you please have a look at the way I'm
creating the MyOntModelSpec. Is it correct? If yes, then is the model
correctly created that spec?

Thanks and happy New Year to you all.
Jorge


> 
> On 30/12/2016 11:22, George News wrote:
>> Hi all,
>> 
>> I'm facing a really strange problem when concurrently using a model.
>> I have created a REST webservice which is running some tasks on a
>> model sent through a POST.
>> 
>> In this code, I have created an OntModel and add a resource
>> description to it. I loop over all the statements to check and modify
>> some values. For some of that I'm using Individual.isClass()
>> validation.
>> 
>> The OntModel is based on my own spec and I create it like (just a
>> summary):
>> 
>> private MyOntModelSpec() { 
>> super(OntModelSpec.OWL_MEM_MICRO_RULE_INF);
>> 
>> String locatorPath = Thread.currentThread().getContextClassLoader() 
>> .getResource("").getPath();
>> 
>> // Locate the ont-policy.rdf file and the ontologies to be used 
>> FileManager fm = FileManager.get().clone(); // TODO: There is a bug
>> to be reported that LocatorFiles are not // considered when added 
>> fm.addLocatorFile(locatorPath); OntDocumentManager docMngr = new
>> OntDocumentManager(fm, "etc/my-ont-policy.rdf");
>> 
>> // Parsing data inside the ont-policy.rdf file StreamManager sm =
>> StreamManager.makeDefaultStreamManager(); sm.addLocator(new
>> LocatorFile(locatorPath)); StreamManager.setGlobal(sm);
>> 
>> this.setDocumentManager(docMngr); }
>> 
>> 
>> public static OntModelSpec getInstance() { if (myOntModelSpec ==
>> null) { myOntModelSpec = new myOntModelSpec(); }
>> 
>> return myOntModelSpec; }
>> 
>> Then the OntModel is created as: private MyOntModel() { ontModelSpec
>> = MyOntModelSpec.getInstance(); ontModel =
>> ModelFactory.createOntologyModel(ontModelSpec); 
>> ontModel.read("etc/my.owl", null); }
>> 
>> public static OntModel getInstance() { if (myModel == null) { myModel
>> = new myOntModel(); }
>> 
>> 
>> // Automatically load all the ontologies // included in the
>> etc/my.owl file OntModel m = ModelFactory 
>> .createOntologyModel(myModel.getOntModelSpec()); m.read("etc/my.owl",
>> null); return m; }
>> 
>> And I use it like: OntModel ontModel = MyOntModel.getInstance(); 
>> ontModel.add(inputFromRest);
>> 
>> // snip Individual individual = ontModel.getIndividual("an object
>> URI"); if (individual.isClass()) { // Do whatever }
>> 
>> 
>> Using it one call to the webservice in a sequential way, there is no
>> problem. However sometime when concurrently calling the webservice
>> I'm getting a "org.apache.jena.shared.ClosedException: already
>> closed" when doing the check/validation over the model.
>> 
>> 
>> Caused by: org.apache.jena.shared.ClosedException: already closed at
>> org.apache.jena.graph.impl.GraphBase.checkOpen(GraphBase.java:66) at
>> org.apache.jena.graph.impl.GraphBase.find(GraphBase.java:240) at
>> org.apache.jena.graph.compose.MultiUnion.multiGraphFind(MultiUnion.java:170)
>>
>> 
> at org.apache.jena.graph.compose.MultiUnion.graphBaseFind(MultiUnion.java:147)
>> at org.apache.jena.graph.impl.GraphBase.find(GraphBase.java:241) at
>> org.apache.jena.reasoner.FGraph.findWithContinuation(FGraph.java:69) 
>> at
>> org.apache.jena.reasoner.FinderUtil$Cascade.find(FinderUtil.java:97) 
>> at
>> org.apache.jena.reasoner.FGraph.findWithContinuation(FGraph.java:69) 
>> at
>> org.apache.jena.reasoner.FinderUtil$Cascade.find(FinderUtil.java:97) 
>> at
>> org.apache.jena.reasoner.FinderUtil$Cascade.findWithContinuation(FinderUtil.java:114)
>>
>> 
> at org.apache.jena.reasoner.FinderUtil$Cascade.find(FinderUtil.java:97)
>> at
>> org.apache.jena.reasoner.FinderUtil$Cascade.findWithContinuation(FinderUtil.java:114)
>>
>> 
> at org.apache.jena.reasoner.FinderUtil$Cascade.find(FinderUtil.java:97)
>> at
>> org.apache.jena.reasoner.rulesys.FBRuleInfGraph.findDataMatches(FBRuleInfGraph.java:215)
>>
>> 
> at 
> org.apache.jena.reasoner.rulesys.impl.TopLevelTripleMatchFrame.<init>(TopLevelTripleMatchFrame.java:45)
>> at
>> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.<init>(LPInterpreter.java:140)
>>
>> 
> at 
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.<init>(LPInterpreter.java:100)
>> at
>> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.generatorFor(LPBRuleEngine.java:278)
>>
>> 
> at 
> org.apache.jena.reasoner.rulesys.impl.ConsumerChoicePointFrame.init(ConsumerChoicePointFrame.java:78)
>> at
>> org.apache.jena.reasoner.rulesys.impl.ConsumerChoicePointFrame.<init>(ConsumerChoicePointFrame.java:66)
>>
>> 
> at 
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.setupTabledCall(LPInterpreter.java:675)
>> at
>> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.run(LPInterpreter.java:568)
>>
>> 
> at 
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.next(LPInterpreter.java:190)
>> at
>> org.apache.jena.reasoner.rulesys.impl.Generator.pump(Generator.java:252)
>>
>> 
> at org.apache.jena.reasoner.rulesys.impl.Generator.pump(Generator.java:239)
>> at
>> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.pump(LPBRuleEngine.java:311)
>>
>> 
> at 
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.moveForward(LPTopGoalIterator.java:107)
>> at
>> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.hasNext(LPTopGoalIterator.java:223)
>>
>> 
> at 
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>> at
>> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>>
>> 
> at 
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
>> at
>> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>>
>> 
> at 
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
>> at
>> org.apache.jena.graph.impl.GraphBase.containsByFind(GraphBase.java:299)
>>
>> 
> at org.apache.jena.graph.impl.GraphBase.graphBaseContains(GraphBase.java:277)
>> at org.apache.jena.graph.impl.GraphBase.contains(GraphBase.java:269) 
>> at org.apache.jena.graph.impl.GraphBase.contains(GraphBase.java:286) 
>> at
>> org.apache.jena.ontology.impl.OWLProfile$SupportsCheck.hasType(OWLProfile.java:336)
>>
>> 
> at org.apache.jena.ontology.impl.OWLProfile$3.doCheck(OWLProfile.java:390)
>> at
>> org.apache.jena.ontology.impl.OWLProfile.isSupported(OWLProfile.java:257)
>>
>> 
> at org.apache.jena.ontology.impl.OntClassImpl$1.canWrap(OntClassImpl.java:90)
>> at org.apache.jena.enhanced.EnhNode.canSupport(EnhNode.java:168) at
>> org.apache.jena.enhanced.EnhNode.canAs(EnhNode.java:113) at
>> org.apache.jena.ontology.impl.OntResourceImpl.isClass(OntResourceImpl.java:1305)
>>
>> 
> at mypackage.validateInput(MyClass.java:55)
>> 
>> I don't know why it is happening. Could you give me some hint?
>> 
>> TA for any help. Jorge
>> 
>> 
>> 

Reply via email to