Я разрабатываю веб-приложение, используя Jena и Tomcat, и я обнаружил, что довольно часто, обычно после того, как возникает исключение, что-то происходит с TDB, и определенные вызовы для извлечения данных из модели вызывают это исключение:
org.openjena.atlas.lib.InternalErrorException: Invalid id node for subject (null node): ([00000000000010D2], [000000000000003D], [0000000000000072])
at com.hp.hpl.jena.tdb.lib.TupleLib.triple(TupleLib.java:130)
at com.hp.hpl.jena.tdb.lib.TupleLib.triple(TupleLib.java:116)
at com.hp.hpl.jena.tdb.lib.TupleLib.access$000(TupleLib.java:45)
at com.hp.hpl.jena.tdb.lib.TupleLib$3.convert(TupleLib.java:77)
at com.hp.hpl.jena.tdb.lib.TupleLib$3.convert(TupleLib.java:73)
at org.openjena.atlas.iterator.Iter$4.next(Iter.java:301)
at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:80)
at com.hp.hpl.jena.util.iterator.Map1Iterator.next(Map1Iterator.java:47)
at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:80)
at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(StmtIteratorImpl.java:45)
at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.nextStatement(StmtIteratorImpl.java:55)
at com.example.myApp (myApp.java:123)
Почему это происходит? Я вызываю model.close() в конце каждого метода doPost/doGet. В большинстве случаев кажется, что это работает, только когда что-то идет не так, и сервер выходит из строя или выдает определенные исключения во время разработки, я сталкиваюсь с этой проблемой.
Столкнувшись с этой проблемой, есть ли способ восстановить или единственный способ сохранить в файле регулярные бэкапы тройного хранилища, а затем снова их перечитать?
Заранее спасибо.