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 ====");
}
}