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