Hello everyone.

I try open previously closed TDB in one java instance.

And got next error:
Exception in thread "main" com.hp.hpl.jena.shared.ClosedException:
already closed
at com.hp.hpl.jena.graph.impl.GraphBase.checkOpen(GraphBase.java:66)
at com.hp.hpl.jena.graph.impl.GraphBase.add(GraphBase.java:201)
at com.github.hronom.test.jena.TestReopenTdb.main(TestReopenTdb.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Here is full code:
package com.github.hronom.test.jena;

import com.hp.hpl.jena.graph.Graph;
import com.hp.hpl.jena.graph.NodeFactory;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.sparql.core.DatasetGraph;
import com.hp.hpl.jena.tdb.TDBFactory;

import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.riot.RDFFormat;

import java.nio.file.Path;
import java.nio.file.Paths;

public class TestReopenTdb {
   public static final Path pathToTdb = Paths.get("test_tdb");

   public static void main(String[] args) {
       Graph graph = openTdb(pathToTdb);

       // Fill graph.
       graph.add(
           new Triple(
               NodeFactory.createURI("http://example/unit13";),
               NodeFactory.createURI("http://example/name";),
               NodeFactory.createLiteral("Unit 13", "en")
           )
       );

       graph.add(
           new Triple(
               NodeFactory.createURI("http://example/unit13";),
               NodeFactory.createURI("http://example/type";),
               NodeFactory.createURI("http://example/robot";)
           )
       );

       graph.add(
           new Triple(
               NodeFactory.createURI("http://example/unit13";),
               NodeFactory.createURI("http://example/creationYear";),
               NodeFactory.createURI("http://example/2015";)
           )
       );

       RDFDataMgr.write(System.out, graph, RDFFormat.NTRIPLES);

       graph.close();

       graph = openTdb(pathToTdb);

       graph.add(
           new Triple(
               NodeFactory.createURI("http://example/unit15";),
               NodeFactory.createURI("http://example/creationYear";),
               NodeFactory.createURI("http://example/2015";)
           )
       );

       graph.close();
   }

   /**
    * Open specified TDB as Graph. If TDB was already opened then return him.
    *
    * @param tdbPath Path to TDB directory.
    * @return Opened Graph.
    */
   private static Graph openTdb(Path tdbPath) {
       // Open TDB.
       DatasetGraph datasetGraph =
TDBFactory.createDatasetGraph(tdbPath.toString());
       return datasetGraph.getDefaultGraph();
   }
}

So how I can reopen TDB in one instance?

Jena version 2.13.0

Reply via email to