26.6.2.4 ChangeSet使用時のエラー処理
InvalidChangePolicy
を設定することで、ChangeSet
の移入中または既存のグラフへのChangeSet
の適用中のエラー処理を構成できます。次のオプションがあります。
OnInvalidChange.ERROR
: 例外をスローします(これがデフォルト構成です)OnInvalidChange.IGNORE
: 問題を無視して続行しますOnInvalidChange.IGNORE_AND_LOG
: 問題を無視し、DEBUG
ログ・レベルでログインし、続行しますOnInvalidChange.IGNORE_AND_LOG_ONCE
: 問題タイプごとに初回の発生のみをログに記録します
InvalidChangePolicy
で無視できる問題としては、グラフに存在しない頂点またはエッジの削除を試みた、プロパティ・タイプが一致しない、存在しないプロパティを更新した、タイプが正しくない頂点IDを指定した、または頂点プロバイダかエッジ・プロバイダが無効であるなどがあります。
次の例では、グラフに存在しない頂点9032
を削除しようとしています。IGNORE_AND_LOG
を構成することで、このアクションは無視され、頂点99
のプロパティ値更新は正常に適用されます。
opg4j> var changeSet3 = updatedGraph2.<Integer>createChangeSet()
opg4j> changeSet3.setInvalidChangePolicy(OnInvalidChange.IGNORE_AND_LOG)
opg4j> changeSet3.removeVertex(9032)
opg4j> changeSet3.updateVertex(99).setProperty("prop1", 17)
opg4j> var updatedGraph3 = changeSet3.build() // will log that a vertex removal was ignored
opg4j> var prop1Val = updatedGraph3.getVertex(99).getProperty("prop1") // evaluates to 17
import oracle.pgx.api.*;
GraphChangeSet<Integer> changeSet3 = graph.createChangeSet();
changeSet3.setInvalidChangePolicy(OnInvalidChange.IGNORE_AND_LOG);
changeSet3.removeVertex(9032);
changeSet3.updateVertex(99).setProperty("prop1", 17);
PgxGraph updatedGraph3 = changeSet3.build(); // will log that a vertex removal was ignored
int prop1Val = updatedGraph3.getVertex(99).getProperty("prop1"); // evaluates to 17
ノート:
リモート・グラフ・サーバー(PGX)への接続時は、エラー処理のログ・メッセージはクライアントに転送されません。このような場合、どの問題が無視されたかを判別するには、サーバー・ログにアクセスする必要があります。このためには、/etc/oracle/graph/logback.xml
のデフォルトのLogback構成ファイルと、/etc/oracle/graph/logback-server.xml
のグラフ・サーバー(PGX)ロガー構成ファイルを更新して、DEBUGログを記録する必要があります。そのようにすると、無視された問題を/var/opt/log/pgx-server.log
ファイルで確認できます。
既存のエッジと頂点の追加
頂点またはエッジの追加でのエラー処理(その頂点またはエッジのIDがグラフですでに使用されているか、互換性のないChangeSetアクションで使用されている場合)は、AddExistingVertexPolicy
およびAddExistingEdgePolicy
で構成できます。
ノート:
AddExistingVertexPolicy
およびAddExistingEdgePolicy
のデフォルト設定はIGNORE
です。これは、デフォルトがERROR
であるInvalidChangePolicy
とは異なります。
親トピック: ChangeSetの使用によるロード済グラフの変更