I'm using jena-tdb-0.9.0-incubating. It's not so easy to use the development version at the moment as my test project isn't a Maven project. However, if I add this code to the test case below, right before the call to "ds.close();", then the generated repository on a clean creation is saved in such a way that I can reopen and use it, if that tells you anything useful...
DatasetGraph dsg = ds.asDatasetGraph(); if (dsg instanceof DatasetGraphTransaction) { ((DatasetGraphTransaction)dsg).getBaseDatasetGraph().sync(); } > -----Original Message----- > From: Andy Seaborne [mailto:andy.seaborne.apa...@gmail.com] On Behalf > Of Andy Seaborne > Sent: Friday, April 27, 2012 12:09 PM > To: jena-users@incubator.apache.org > Subject: Re: Using TDB for persistent storage > > On 26/04/12 15:21, Crapo, Andrew (GE Global Research) wrote: > > I'm trying out TDB as a triple store. I'm not sure if this is a bug or > > a misunderstanding. I have the following JUnit test code: > > Which version? > I don't think the sync bug affects this example, but if you could run the > current development version where it's fixes, that would be great. > > Otherwise, can this be turned into a test case I might be able to run? > All the OWL and specifics of the data are unlikely to be related. > > Andy > > > > > > *private**static*String /assetFN/= "assetcore.owl"; > > > > *private**static*String /locoFN/= "locomotive.owl"; > > > > *private**static*String /evolutionFN/= "evolution.owl"; > > > > *private**static*String /es44c4FN/= "es44c4.owl"; > > > > ... > > > > Dataset ds = *null*; > > > > File tdbDir = *new*File(/tdbFolder/); > > > > *if*(!tdbDir.exists()) { > > > > ds = TDBFactory./createDataset/(/tdbFolder/); > > > > ds.addNamedModel(/assetUri/, loadModel(/blueprintsFolder/+ > > File./separator/+ /assetFN/)); > > > > ds.addNamedModel(/locoUri/, loadModel(/blueprintsFolder/+ > > File./separator/+ /locoFN/)); > > > > ds.addNamedModel(/evolutionUri/, loadModel(/blueprintsFolder/+ > > File./separator/+ /evolutionFN/)); > > > > ds.addNamedModel(/es44c4Uri/, loadModel(/blueprintsFolder/+ > > File./separator/+ /es44c4FN/)); > > > > } > > > > *else*{ > > > > ds = TDBFactory./createDataset/(/tdbFolder/); > > > > } > > > > Iterator<String> mniter = ds.listNames(); > > > > *while*(mniter.hasNext()) { > > > > System./out/.println("TDB repository contains model '"+ mniter.next() > > + "'"); > > > > } > > > > ds.close(); > > > > When I run it the first time it works as I expected, listing the four > > OWL models that I have added to the repository. However, if I run it a > > second time, now that the tdbFolder exists, I get a null pointer > > exception in the call to mniter.hasNext(). The Dataset (ds) created > > from an existing TDB folder doesn't appear to be a valid Dataset. Am I > > doing something wrong? > > > > The loadModel method is as follows: > > > > *private*OntModel loadModel(String owlFilename) *throws*IOException > { > > > > OntModel model = > > ModelFactory./createOntologyModel/(OntModelSpec./OWL_MEM/); > > > > OntDocumentManager docMgr = model.getDocumentManager(); > > > > docMgr.setProcessImports(*false*); // we don't want to do the import > > yet, just load the model > > > > File modelFile = *new*File(owlFilename); > > > > InputStream is = *new*FileInputStream(modelFile); > > > > BufferedReader in = > *new*BufferedReader(*new*InputStreamReader(is)); > > > > String base = *null*; > > > > RDFReader reader = model.getReader(); > > > > reader.read(model, is, base); > > > > in.close(); > > > > *return*model; > > > > } > > > > *Andrew Crapo* > > Information Scientist > > GE Global Research > > > > T +1 518 387 5729 > > F +1 518 387 6104 > > D *833 5729 > > E cr...@research.ge.com > > www.research.ge.com > > > > One Research Circle > > Niskayuna, NY 12309 USA > > General Electric Company > > > > GE imagination at work > >
smime.p7s
Description: S/MIME cryptographic signature