バージョン 1.5 の新機能。
定義
パラメーター
$session: MongoDB$Driver\Session- トランザクションの実行に使用されるクライアント セッション。
$callback: 呼び出し可能- トランザクション内で実行されるコールバック。コールバックは、 MongoDB$Driver\Sessionオブジェクトを最初の引数として受け入れる必要があります。
$transactionOptions: 配列- トランザクション オプション。 MongoDB$Driver\Session::startTransaction に渡されます。サポートされているオプションのリストについては、拡張機能のドキュメントを参照してください。
動作
この関数は、トランザクションの開始、コールバックの呼び出し、トランザクションのコミットを行います。また、事前設定された時間制限内に特定のエラーが発生した後に、このプロセスを再試行するロジックも適用されます。コールバックは、コールバックのMongoDB$Driver\Session 引数をそれらの操作のオプションとして渡すことで、トランザクション内で 1 つ以上の操作を実行することが想定されています。ただし、これは強制されません。
注意
アプリケーションでは 冪等 コールバックを使用することが強く推奨されます。これは、コールバックの実行またはコミット中に再試行可能なエラーが発生した場合に複数回呼び出される可能性があるためです。
コールバックの実行中にスローされた例外は、キャッチされて評価されます。 例外にTransientTransactionErrorエラー ラベルが付いている場合、トランザクションは中止されて再開され、コールバックが再度呼び出されます。 その他の例外の場合、トランザクションは中止され、例外が再スローされて、 with_transaction()の呼び出し元にエラーが伝達されます。
コールバックが正常に実行されると、トランザクションはコミットされます。 UnknownTransactionCommitResult エラー ラベルの付いた例外が発生した場合、コミットは再試行されます。 TransientTransactionErrorエラー ラベルの例外が発生した場合、トランザクションは再起動され、制御はコールバックの呼び出しに戻ります。 その他の例外は再スローされて、 with_transaction()の呼び出し元にエラーが伝達されます。
コールバック実行またはコミット中にエラーが発生した場合、 with_transaction()が最初に呼び出されてから 120 秒未満が経過した場合にのみプロセスは再試行されます。 この時間制限は構成できません。 この時間の経過後、通常再試行される例外はすべて再スローされます。
エラーと例外
MongoDB\Exception\InvalidArgumentException は、パラメータまたはオプションの解析に関連するエラーの場合は です。
MongoDB$Driver\Exception\RuntimeException は、拡張レベルの他のエラーの場合(例:)。