2016-10-27 10 views
1

私は、システムからデータを読み込み、その一部をApache Jena Model/DataSetに保存する大規模で複雑なソフトウェアにwokringしています。 1つの小さなことを除いて、すべてうまく動作します。モデル内の2つのエンティティ間に 'hasPart'関係を追加しようとすると、決して適用されません。Apache JenaはhasPart関係を追加していません

I.e.私がコードをデバッグすると、log4jは、トランスコードがアクティブではないと思われるエラーを報告することがわかります。

私の質問では、このような状況が発生する可能性があります。開いているトランザクションはアクティブではありませんか? 'hasPart'プロパティを追加する前の行がトランザクションを開始しているので、かなり混乱しているようです(begin(ReadWrite.WRITE)DataSet))。例外はスローされず、log4jログメッセージがコンソールに記録されます。

現在のところ、私は問題をタイムリーに示す最小限のコードを作成することはできません。ですから、私の質問は、ある種の魂がポインタや理論的な説明を持っているなら、より自然なものです。どんなポインタや説明も大いに訴えられるでしょう。

答えて

3

残念ながら、ログ・トレースやコード・スニペット(直接実行可能ではありませんが、MWEが役に立ちます)を提供していない場合は、SOコミュニティが役立ちます。

まず、を使用してhasPartの関係を表す必要があります。

保存する前にcheck all Model statementsをお奨めします。その後、make sure you are in a Transaction

これが役立つ場合は、問題のあいまいな説明ではなく、実際の質問の回答になるように質問を正しく更新してください。

+0

コンソールのログ出力は次のようになります。[ERROR]非アクティブ:11514 - これはBlockMgrJournalという名前のクラスから発生したものと考えられます。checkActive。 – RVarttinen

+1

https://github.com/apache/jena/blob/master/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/BlockMgrJournal.java#L300がメッセージの送信元のようです。実行中のFusekiのデータファイルで書き込みトランザクションを開こうとしていますか?もしそうなら、あなたはそれをしてはいけません。それでもやりたい場合は、JavaアプリケーションとFusekiが同じプロセスで実行されていることを確認してください:https://jena.apache.org/documentation/tdb/faqs.html#multi-jvm – berezovskyi

1

Datasetからリソースを抽出し、代わりにその参照を使用していることが証明されました(コードは最初に作成されたインスタンスへの参照を保持していました)。プロパティ(hasPart)を追加すると期待どおりに動作しました。ロギングフレームワークによってエラーが報告されず、hasPartプロパティが適所にあります。

影響を受けるリソースは、Datasetのデフォルトグラフにあります。

観測getResource(uri)を使用してリソースを返しますが、インスタンスIDとしてコピー(?)と思われます。

詳細については、berezovskiyにお問い合わせいただきありがとうございます。

関連する問題