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
>>
>>
>>