2016-10-27 3 views
1

Ich arbeite an einer großen komplexen Software, die Daten von einem System liest und Teile davon in einem Apache Jena speichert Model/DataSet. Alles funktioniert gut, bis auf eine kleine Sache: Beim Versuch, eine hasPart-Beziehung zwischen zwei Entitäten im Modell hinzuzufügen, wird sie nie angewendet.Apache Jena fügt keine hasPart-Beziehung hinzu

I.e. Wenn ich den Code debugge, kann ich sehen, dass log4j einen Fehler meldet, der scheinbar anzeigt, dass die Transkation nicht aktiv ist.

Also, zu meiner Frage: Was könnte dazu führen, dass eine geöffnete Transaktion nicht aktiv ist? Es scheint ziemlich verwirrend, da die Zeile vor dem Hinzufügen der Eigenschaft 'hasPart' die Transaktion startet (begin(ReadWrite.WRITE) auf der DataSet)). Es wird keine Ausnahme ausgelöst, nur die protokollierte log4j-Fehlermeldung auf der Konsole.

Leider kann ich derzeit kein minimales Stück Code produzieren, das das Problem rechtzeitig aufzeigt. Meine Frage ist also mehr von der Natur, wenn eine Art Seele einen Zeiger oder eine theoretische Erklärung hat - das wird sehr nützlich sein. Jeder Zeiger oder jede Erklärung wird sehr geschätzt.

Antwort

3

Leider kann wenig die SO-Community helfen, wenn Sie nicht einmal einen Log-Trace oder ein Code-Snippet bereitstellen (muss nicht direkt ausführbar sein, sondern ein MWE hilft).

Zuerst sollten Sie DCMI hasPart term für die Darstellung hasPart Beziehung verwenden.

Ich empfehle Ihnen, check all Model statements, bevor Sie es speichern. Danach make sure you are in a Transaction.

Wenn dies Ihnen hilft, bitte aktualisieren Sie die Frage richtig, so dass dies eine Antwort auf eine echte Frage werden kann, nicht nur eine vage Beschreibung des Problems.

+0

Die Protokollausgabe auf der Konsole sieht folgendermaßen aus: [ERROR] Nicht aktiv: 11514 - und ich denke, es stammt aus einer Klasse namens BlockMgrJournal, Methode: checkActive. – RVarttinen

+1

https://github.com/apache/jena/blob/master/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/BlockMgrJournal.java#L300 scheint die Quelle der Nachricht zu sein . Versuchen Sie, Schreibvorgänge für die Datendateien eines laufenden Fuseki zu öffnen? Wenn ja, solltest du es nicht tun. Wenn Sie dies dennoch tun möchten, stellen Sie sicher, dass Ihre Java-App und Fuseki im selben Prozess ausgeführt werden: https://jena.apache.org/documentation/tdb/faqs.html#multi-jvm – berezovskyi

1

Es erwies sich, dass das Extrahieren der Ressource aus der Dataset und die Verwendung dieser Referenz stattdessen (der Code enthielt einen Verweis auf die Instanz erstellt) das Hinzufügen der Eigenschaft (hasPart) erwies sich als erwartet zu funktionieren. Vom Protokollierungs-Framework wurde kein Fehler gemeldet und die hasPart-Eigenschaft ist vorhanden.

Die betroffenen Ressourcen befinden sich im Standarddiagramm von Dataset.

Beobachtung: Verwendung von getResource(uri) gibt die Ressource zurück, aber es scheint eine Kopie (?) Zu sein, da sich die Instanz-ID: s unterscheidet.

Dank berezovskiy für die Details zu helfen.

Verwandte Themen