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®

Reply via email to