On 07/03/12 12:40, Milorad Tosic wrote:
Hi,

I am trying to run sparql queries (including  LOAD)  on Jena with TDB. Other 
then source code, there is very little additional documentation how this should 
to be done. So, I based my code on the recent benchmark code referred by Andy 
few months ago [1]. However, I found that only initial loads run correctly. 
Other subsequent loads fire java.util.ConcurrentModificationException exception 
(undeterministically, depending on platform, time instant, ...). In the rest of 
the message, I include my illustrative test program.

What should be fixed in the given code to enable LOAD sparql queries to work on 
TDB?

Thanks,
Milorad

[1] 
https://jena.svn.sourceforge.net/svnroot/jena/TDB/trunk/src-dev/reports/ReportOutOfMemoryManyGraphsTDB.java

(Aside: the SourceForge code is not active any more)

Using TDB (development but I don't belive anything is different from 0.9.0-incubating-SNAPSHOT) and the associated ARQ and Jena, I get:

Running LOAD <http://geni-orca.renci.org/owl/nlr.rdf>
UpdateRequest created
==== finished ====
Running LOAD <http://geni-orca.renci.org/owl/ben-6509.rdf>
UpdateRequest created
==== finished ====
Running LOAD <http://geni-orca.renci.org/owl/nlr.rdf>
UpdateRequest created
==== finished ====

Is that correct behaviour?
Which version are you using?

        Andy

PS transactions make the critical sections nicer.




import java.io.File;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.reasoner.ReasonerRegistry;
import com.hp.hpl.jena.shared.Lock;
import com.hp.hpl.jena.tdb.TDB;
import com.hp.hpl.jena.tdb.TDBFactory;
import com.hp.hpl.jena.tdb.base.block.FileMode;
import com.hp.hpl.jena.tdb.sys.SystemTDB;
import com.hp.hpl.jena.update.UpdateAction;
import com.hp.hpl.jena.update.UpdateFactory;
import com.hp.hpl.jena.update.UpdateRequest;

public class rdfStoreTesting {

     /**
      * @param args
      */
     public static void main(String[] args) {
         File m_baseDir;
         Model m_triplestore;

         String baseDirPath = "C:\\Temp";
         m_baseDir = new File(baseDirPath+File.separator+"tdb");
         boolean succ = m_baseDir.exists()&&  m_baseDir.isDirectory();
         if(!succ) succ = m_baseDir.mkdir();
         if(!succ){
             m_baseDir = null;
             m_triplestore = null;
             System.err.print("Error opening/creating new folder: 
"+baseDirPath);
         }else{
             SystemTDB.setFileMode(FileMode.direct) ;
             m_triplestore = TDBFactory.createModel(m_baseDir.getPath());
         }

         String querystr = "LOAD<http://geni-orca.renci.org/owl/nlr.rdf>";
         System.out.println("Running "+querystr);
         //    SPARQL UPDATE is handled here
         m_triplestore.enterCriticalSection(Lock.WRITE);
         try {
             UpdateRequest updateRequest = UpdateFactory.create(querystr);
             System.out.println("UpdateRequest created");
             UpdateAction.execute(updateRequest, m_triplestore);
         }catch (Exception e){
             System.err.println(e);
         } finally {
             m_triplestore.commit();
             m_triplestore.leaveCriticalSection();
             TDB.sync(m_triplestore);
         }
         System.out.println("==== finished ====");

         querystr = "LOAD<http://geni-orca.renci.org/owl/ben-6509.rdf>";
         System.out.println("Running "+querystr);
         //    SPARQL UPDATE is handled here
         m_triplestore.enterCriticalSection(Lock.WRITE);
         try {
             UpdateRequest updateRequest = UpdateFactory.create(querystr);
             System.out.println("UpdateRequest created");
             UpdateAction.execute(updateRequest, m_triplestore);
         }catch (Exception e){
             System.err.println(e);
         } finally {
             m_triplestore.commit();
             m_triplestore.leaveCriticalSection();
             TDB.sync(m_triplestore);
         }
         System.out.println("==== finished ====");

         querystr = "LOAD<http://geni-orca.renci.org/owl/nlr.rdf>";
         System.out.println("Running "+querystr);
         //    SPARQL UPDATE is handled here
         m_triplestore.enterCriticalSection(Lock.WRITE);
         try {
             UpdateRequest updateRequest = UpdateFactory.create(querystr);
             System.out.println("UpdateRequest created");
             UpdateAction.execute(updateRequest, m_triplestore);
         }catch (Exception e){
             System.err.println(e);
         } finally {
             m_triplestore.commit();
             m_triplestore.leaveCriticalSection();
             TDB.sync(m_triplestore);
         }
         System.out.println("==== finished ====");
     }
}


Reply via email to