我已经开始实现一组类,这些类为MongoDB提供了持久性的直接接口,类似于RDBMS现在未维护的SDB persistor实现。
我正在使用历史悠久的技术,从接口创建必要的具体类,并在每个方法中执行println
,从而允许我跟踪执行。我已经一直到引擎调用光标设置的位置:
public ExtendedIterator<Triple> find(Node s, Node p, Node o) {
System.out.println("+++ MongoGraph:extenditer:find(" + s + p + o + ")");
// TBD Need to turn s,p,o into a match expression! Easy!
MongoCursor cur = this.coll.find().iterator();
ExtendedIterator<Triple> curs = new JenaMongoCursorIterator(cur);
return curs;
}
可悲的是,当我后来称之为:
while(rs.hasNext()) {
QuerySolution soln = rs.nextSolution() ;
System.out.println(soln);
}
事实证明rs.hasNext()
总是假的,即使MongoCursor
中有材料(我可以在find()方法中调试它)。此外,我的具体迭代器next()
中的JenaMongoCursorIterator
函数中的跟踪打印(我认为可以扩展NiceIterator)从未被命中。简而言之,基本设置看起来不错,但引擎永远不会在find()
对于不熟悉软件架构的人来说,尝试使用SDB作为指南是完全无法应对的。它是完全考虑因素并充满了界面和工厂,虽然这很好,但很难导航。
有没有人试图创建自己的persistor实现?如果有的话,有什么基本步骤来获得一个&#34; hello world&#34;运行?在这种情况下,Hello World是一个非优化的实现,可以在某些内容上调用next()
来生成Triple
。
答案 0 :(得分:0)
TLDR:现在正在运作。
我的编码过于热切,而JenaMongoCursorIterator
包含方法hasNexl
,当然在hasNext
的默认实现中没有覆盖t
(带有NiceIterator
)返回false。
这是eclipse和可视化调试和跟踪比常规jdb更容易解决的问题。如果你非常了解软件架构,jdb就没问题,但是如果你不熟悉,那么多个开源文件并且能够将鼠标移到vars等上可以大大增加可以创建到家中的上下文量。关于这个问题。