Hi Andy,

Yeh, that was on my debugging list! I've seemingly tracked it down to a
maven problem. I'm working in eclipse: when I created a new project and
copied all the files across and ran it in eclipse, it worked; as soon as I
built and packed via maven, I got the error. I'll do some more digging...

Chris

On 28 February 2018 at 18:31, Andy Seaborne <[email protected]> wrote:

> Chris,
>
> It looks like details matter - could you send a complete, minimal example
> (i.e. standalone and runnable)?
>
> Thanks
>
>     Andy
>
> On 28/02/18 17:26, Chris Wood wrote:
>
>> Yeh, I thought I was doing that! I've taken that line of code out anyway
>> but it seems to make no difference...
>>
>> On 28 February 2018 at 16:55, Rob Vesse <[email protected]> wrote:
>>
>> Notice that Andy specifically said in his response:
>>>
>>>    call this very early (before any TDB related activity)
>>>
>>> Rob
>>>
>>> On 28/02/2018, 16:21, "Chris Wood" <[email protected]> wrote:
>>>
>>>      Hi Rob - sorry, that was an over-simplification of the psedocode; I
>>> do
>>> call
>>>
>>>          dataset.begin(ReadWrite.WRITE);
>>>
>>>      after initialising it.
>>>
>>>      I had also wondered if setFileMode makes any difference - I was
>>> using
>>> it
>>>      because of this Andy's comment here:
>>>      http://users.jena.apache.narkive.com/zUPFzLcm/tdb-
>>> shutdown-does-not-release-the-files
>>>
>>>      Chris
>>>
>>>      On 28 February 2018 at 14:54, Rob Vesse <[email protected]>
>>> wrote:
>>>
>>>      > Two things look odd:
>>>      >
>>>      > - You never call dataset.begin() to start the transaction yet you
>>> later
>>>      > try to commit() it
>>>      > - Calling SystemTDB.setFileMode() after opening a dataset probably
>>> doesn't
>>>      > have any effect on already open datasets though I could be wrong
>>> on
>>> this
>>>      > point
>>>      >
>>>      > Rob
>>>      >
>>>      > On 28/02/2018, 13:08, "Chris Wood" <[email protected]> wrote:
>>>      >
>>>      >     Hi Andy,
>>>      >
>>>      >     It's probably a bit more complicated than I originally
>>> suggested.
>>>      > Inside my
>>>      >     try statement I do a bit of processing in a separate class (I
>>> create a
>>>      > new
>>>      >     in-memory Dataset, and return the model from it, so I can add
>>> it
>>> to my
>>>      > my
>>>      >     main dataset); but I also use this class to initialise the
>>> default
>>>      > model. I
>>>      >     wonder if this is confusing the transaction...
>>>      >
>>>      >     With a bit of pseudocode:
>>>      >
>>>      >         Dataset dataset = TDBFactory.createDataset("path
>>> /to/tdb");
>>>      >         Model model = new Processing(dataset).;
>>>      >         SystemTDB.setFileMode(FileMode.direct);
>>>      >
>>>      >         try {
>>>      >            Model m = model.dataStructure();
>>>      >            model.add(m);
>>>      >            dataset.commit();
>>>      >         } finally {
>>>      >            dataset.close();
>>>      >         }
>>>      >
>>>      >       Processing.java:
>>>      >
>>>      >         main:
>>>      >           public Processing(Dataset dataset) {
>>>      >     super(dataset.getDefaultModel().getGraph());
>>>      >           }
>>>      >
>>>      >         dataStructure():
>>>      >           Dataset d1 = TDBFactory.createDataset();
>>>      >           Model m1 = d1.getDefaultModel();
>>>      >
>>>      >           // add stuff to m1 from an independent datasource
>>>      >
>>>      >           return m1;
>>>      >
>>>      >
>>>      >     On 28 February 2018 at 11:30, Andy Seaborne <[email protected]>
>>> wrote:
>>>      >
>>>      >     > Chris,
>>>      >     >
>>>      >     > Is the dataset TDB (from TDBFactory) or a dataset holding a
>>> model,
>>>      > maybe
>>>      >     > with added inference, where the base graph is backed by TDB?
>>>      >     >
>>>      >     > It is better to put changes to the dataset inside a
>>> transaction.
>>>      > Failing
>>>      >     > that, it should be sync'ed  -- TDB.sync().
>>>      >     >
>>>      >     >     Andy
>>>      >     >
>>>      >     > http://jena.staging.apache.org/documentation/txn/
>>>      >     >
>>>      >     > On 27/02/18 18:33, Chris Wood wrote:
>>>      >     >
>>>      >     >> I've got a small application that follows the standard
>>> recommended
>>>      >     >> pattern:
>>>      >     >>
>>>      >     >>      // initialise dataset / model
>>>      >     >>      ...
>>>      >     >>      try {
>>>      >     >>          // ... add statements
>>>      >     >>          StmtIterator r = this.my_model.listStatements();
>>>      >     >> System.out.println(r.toList().size());
>>>      >     >> this.dataset.commit();
>>>      >     >>      } catch (SQLException e) {
>>>      >     >>          e.printStackTrace();
>>>      >     >>      } finally {
>>>      >     >> this.dataset.close();
>>>      >     >>      }
>>>      >     >>
>>>      >     >> I was running this with Jena 3.0.1, and all was fine. I've
>>> just
>>>      > upgraded
>>>      >     >> to
>>>      >     >> 3.6.0. When I run the code and then check the tdb that is
>>> generated
>>>      > with
>>>      >     >> (on Windows):
>>>      >     >>
>>>      >     >>       tdbquery --loc="database" "SELECT (count(*) as ?t)
>>> where {?a
>>>      > ?b ?c
>>>      >     >> . }"
>>>      >     >>
>>>      >     >> I get a NullPointerException:
>>>      >     >>
>>>      >     >> Exception
>>>      >     >> java.lang.NullPointerException
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.transaction.JournalControl.replay(
>>>      >     >> JournalControl.java:280)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.transactio
>>> n.JournalControl.recoverSegmen
>>>      >     >> t(JournalControl.java:185)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.transactio
>>> n.JournalControl.recoverFromJo
>>>      >     >> urnal(JournalControl.java:137)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.StoreConne
>>> ction.forceRecoverFromJournal(
>>>      >     >> StoreConnection.java:150)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.StoreConne
>>> ction._makeAndCache(StoreConne
>>>      >     >> ction.java:255)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.StoreConnection.make(
>>> StoreConnection.java:214)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.StoreConnection.make(
>>> StoreConnection.java:220)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.transaction.DatasetGraphTransaction.<
>>>      >     >> init>(DatasetGraphTransaction.java:70)
>>>      >     >>          at org.apache.jena.tdb.sys.
>>> TDBMaker._create(TDBMaker.
>>>      > java:55)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.sys.TDBMak
>>> er.createDatasetGraphTransacti
>>>      >     >> on(TDBMaker.java:42)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.TDBFactory._
>>> createDatasetGraph(TDBFactory.
>>>      > java:89)
>>>      >     >>          at
>>>      >     >> org.apache.jena.tdb.TDBFactory.createDatasetGraph(
>>>      > TDBFactory.java:71)
>>>      >     >>          at org.apache.jena.tdb.TDBFactory.createDataset(
>>>      > TDBFactory.
>>>      >     >> java:55)
>>>      >     >>          at tdb.cmdline.ModTDBDataset.
>>> createDataset(ModTDBDataset.
>>>      > java:
>>>      >     >> 103)
>>>      >     >>          at arq.cmdline.ModDataset.
>>> getDataset(ModDataset.java:36)
>>>      >     >>          at arq.query.getDataset(query.java:176)
>>>      >     >>          at arq.query.queryExec(query.java:213)
>>>      >     >>          at arq.query.exec(query.java:153)
>>>      >     >>          at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
>>>      >     >>          at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
>>>      >     >>          at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
>>>      >     >>          at tdb.tdbquery.main(tdbquery.java:33)
>>>      >     >>
>>>      >     >> What seems really weird is that if I run the code *again*
>>> (without
>>>      >     >> deleting
>>>      >     >> the dataset directory) the triplestore is populated.
>>>      >     >>
>>>      >     >>   - If I run the code ensuring I use v3.0.1, this doesn't
>>> happen,
>>>      > and the
>>>      >     >> tdbquery command works on the first attempt.
>>>      >     >>   - The print statement showing the number of statements in
>>> the
>>>      > dataset
>>>      >     >> shows the correct number in all cases.
>>>      >     >>
>>>      >     >> What has changed between 3.0.1 and 3.6.0 to cause this (and
>>> any
>>>      > hints on
>>>      >     >> what I need to do to resolve it would be greatly
>>> appreciated!)
>>>      >     >>
>>>      >     >> Thanks
>>>      >     >> Chris
>>>      >     >>
>>>      >     >>
>>>      >
>>>      >
>>>      >
>>>      >
>>>      >
>>>      >
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>

Reply via email to