On 26/05/14 15:54, Claude Warren wrote:
Look like I needed to add a model=dataset.getDefaultModel() statement to
the commit block os that it reads:
if (cnt % 500 == 0) {
System.out.println( cnt );
dataset.commit();
dataset.begin( ReadWrite.WRITE );
model=dataset.getDefaultModel();
}
Why? I would expect that the model would track the transaction set on the
dataset.
Should be possible but it's hard to balance compatibility
(non-transactional use) with being about to mix TDB graphs into general
purpose dataset and also get efficiency (get SPARQL processing to be
handled by TDB, code that calls .getDefaultModel and not assigning to a
local variable).
Come Jena3, this could be improved with changes to the application
contract for the more corner cases (single thread overlapping
transactions for example). Maybe drop the direct SPARQL execution of
TDB graphs in general purpose, mixed datasets and resort to general
SPARQL execution.
It's not just Models - Resources have an implicit graph.
What would be really helpful is to have an example test case that
illustrated some aspect of the problem which was compact and standalone.
Andy
Claude
On Mon, May 26, 2014 at 3:48 PM, Claude Warren <[email protected]> wrote:
I have code that uses Jena-Libs 2.11.1 and executes the following block:
(edited for brevity)
dataset.begin( ReadWrite.WRITE);
try {
Model model = dataset.getDefaultModel();
Property[] props = ( create an array of properties in Model)
String dcsId = "someStringValue";
int cnt = 0;
..... (get an iterator on a set of rows from a db table)
while (rIter.hasNext())
{
cnt++;
Row r = rIter.next();
Resource eventR = model.createResource( makeURI( eventUri,
r.getColumn(dcsId).toString()), typeURI);
for (int i=0;i<cols.size();i++)
{
Object o = r.getColumn(i);
if (props[i] != null && o != null)
{
String val = o.toString();
if (val.length()>0)
{
eventR.addProperty( props[i], val); // <-- line 134 as noted
in call stack below
}
}
}
// commit every 500 entries
if (cnt % 500 == 0) {
System.out.println( cnt );
dataset.commit();
dataset.begin( ReadWrite.WRITE );
}
}
}
}
}
finally {
dataset.commit();
}
The table I am reading from contains several 10's of thousands of rows. I
am basically converting from relational table to RDF graph.
However, after the first 500 subjects are committed (5000 +/- triples) I
run into the following problem while adding the 6th property to subject
502.
DEBUG [main] (MySQLTableDef.java:261) - Query String: SELECT ... <--
Initial debugging statement
500 <-- output from commit block in code above
ERROR [main] (Log.java:94) - Not active: 1
ERROR [main] (Log.java:94) - **** Not active: 1
Now, I know this is a transaction error. But I think I have a
transaction, as I restart one right after the commit after the 500th
record. Log is made in the BlockMgrJournal.checkActive() and the call
stack appears as follows:
BlockMgrJournal.checkActive() line: 306
BlockMgrJournal._promote(Block) line: 220
BlockMgrJournal.promote(Block) line: 215
BPTreeRecordsMgr(PageBlockMgr<T>).promote(Page) line: 110
BPTreeRecords.promote() line: 119
BPTreeRecords.internalInsert(Record) line: 131
BPTreeNode.internalInsert(Record) line: 468
BPTreeNode.internalInsert(Record) line: 468
BPTreeNode.insert(BPTreeNode, Record) line: 212
BPlusTree.addAndReturnOld(Record) line: 328
BPlusTree.add(Record) line: 320
TupleIndexRecord.performAdd(Tuple<NodeId>) line: 60
TupleIndexRecord(TupleIndexBase).add(Tuple<NodeId>) line: 64
TupleTable.add(Tuple<NodeId>) line: 96
NodeTupleTableConcrete.addRow(Node...) line: 87
TripleTable.add(Node, Node, Node) line: 58
DatasetGraphTDB.addToDftGraph(Node, Node, Node) line: 100
DatasetGraphTDB(DatasetGraphTriplesQuads).add(Node, Node, Node, Node)
line: 47
GraphTDB(GraphView).performAdd(Triple) line: 140
GraphTDB.performAdd(Triple) line: 87
GraphTDB(GraphBase).add(Triple) line: 202
ModelCom.add(Resource, Property, RDFNode) line: 1159
ModelCom.add(Resource, Property, String, String, boolean) line: 161
ModelCom.add(Resource, Property, String) line: 149
ResourceImpl.addProperty(Property, String) line: 241
JenaSink.updateTable(UpdateBlock) line: 134
Any help fixing this problem would be appreciated.
Claude
--
I like: Like Like - The likeliest place on the web<http://like-like.xenei.com>
LinkedIn: http://www.linkedin.com/in/claudewarren