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