I got this while running code with an ontology that has worked many times
before, on both SDB and TDB.
Any guess as to why? Now any calls to get a named model are dying.
Have I corrupted my TDB database? Is there something wrong in my class Database
provided below?
I see that I had not done a TDB.sync(dataset), could that be the problem?
[java] Exception in thread "main"
com.hp.hpl.jena.tdb.base.file.FileException:
ObjectFileStorage.read[prefixes.dat](659)[filesize=713][file.size()=713]:
Impossibly large object : 1914830848 bytes > filesize-(loc+SizeOfInt)=50
[java] at
com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage.read(ObjectFileStorage.java:346)
[java] at com.hp.hpl.jena.tdb.lib.NodeLib.fetchDecode(NodeLib.java:78)
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTableNative.readNodeFromTable(NodeTableNative.java:178)
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTableNative._retrieveNodeByNodeId(NodeTableNative.java:103)
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTableNative.getNodeForNodeId(NodeTableNative.java:74)
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTableWrapper.getNodeForNodeId(NodeTableWrapper.java:55)
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTableInline.getNodeForNodeId(NodeTableInline.java:67)
[java] at com.hp.hpl.jena.tdb.lib.TupleLib.tupleNodes(TupleLib.java:97)
[java] at com.hp.hpl.jena.tdb.lib.TupleLib$1.convert(TupleLib.java:53)
[java] at com.hp.hpl.jena.tdb.lib.TupleLib$1.convert(TupleLib.java:49)
[java] at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:301)
[java] at
com.hp.hpl.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.next(DatasetControlMRSW.java:130)
[java] at
com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.readPrefixMap(DatasetPrefixesTDB.java:173)
[java] at
com.hp.hpl.jena.sparql.graph.GraphPrefixesProjection.getNsPrefixMap(GraphPrefixesProjection.java:62)
[java] at
com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.getPrefixMapping(DatasetPrefixesTDB.java:223)
[java] at
com.hp.hpl.jena.tdb.store.GraphNamedTDB.createPrefixMapping(GraphNamedTDB.java:66)
[java] at
com.hp.hpl.jena.graph.impl.GraphBase.getPrefixMapping(GraphBase.java:186)
[java] at
com.hp.hpl.jena.rdf.model.impl.ModelCom.getPrefixMapping(ModelCom.java:959)
[java] at
com.hp.hpl.jena.rdf.model.impl.ModelCom.withDefaultMappings(ModelCom.java:1003)
[java] at
com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:74)
[java] at
com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:70)
[java] at
com.hp.hpl.jena.rdf.model.ModelFactory.createModelForGraph(ModelFactory.java:176)
[java] at
com.hp.hpl.jena.sparql.core.DatasetImpl.graph2model(DatasetImpl.java:269)
[java] at
com.hp.hpl.jena.sparql.core.DatasetImpl.getNamedModel(DatasetImpl.java:174)
[java] at com.sas.ta.om.Database.getModel(Database.java:60)
[java] at
com.sas.ta.om.CreateInferredModel.create(CreateInferredModel.java:29)
[java] at
com.sas.ta.om.CreateInferredModel.main(CreateInferredModel.java:18)
Right before I ran this, I had deleted all the data for a model with the
following:
Model model = Database.getModel(modelName);
model.begin();
model.removeAll();
model.commit();
model.close();
Database.close();
Here is my Database class:
public class Database {
private static final String TDB_TYPE = "TDB";
private static final String SDB_TYPE = "SDB";
private static final String SDB_ASSEMBLER_FILE = "sdb.ttl";
private static final String TDB_ASSEMBLER_FILE = "tdb.ttl";
private static final String JENA_DBTYPE =
System.getProperty("JENA_DBTYPE");
private static final boolean isTDB = TDB_TYPE.equals(JENA_DBTYPE);
static {
if( isTDB ) TDB.setOptimizerWarningFlag(false);
}
private static Store store = null;
private static Dataset dataset = null;
public static final String getDBType(){
return JENA_DBTYPE;
}
public static void close(){
if( isTDB && dataset != null ){
dataset.close();
} else {
if( store != null ) store.close();
}
}
public static void begin(Model model, ReadWrite mode){
if( isTDB ){
if( dataset == null )
dataset =
TDBFactory.assembleDataset(TDB_ASSEMBLER_FILE);
dataset.begin(mode);
} else {
model.begin();
}
}
public static void commit(Model model){
model.commit();
}
public static void sync(){
if( dataset != null ) TDB.sync(dataset);
}
public static Model getModel(String name){
if( TDB_TYPE.equals(JENA_DBTYPE) ){
if( dataset == null )
dataset =
TDBFactory.assembleDataset(TDB_ASSEMBLER_FILE);
return dataset.getNamedModel(name);
} else {
if( store == null )
store = StoreFactory.create(SDB_ASSEMBLER_FILE);
return SDBFactory.connectNamedModel(store, name);
}
}
}
David Jordan
Senior Software Developer
SAS Institute Inc.
Health & Life Sciences, Research & Development
Bldg R ▪ Office 4467
600 Research Drive ▪ Cary, NC 27513
Tel: 919 531 1233 ▪ [email protected]<mailto:[email protected]>
www.sas.com<http://www.sas.com/>
SAS® … THE POWER TO KNOW®