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とは異なります。