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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to