2

キャメルルート中に交換に追加されたすべての同期にアクセスしたいと思います。

この理由は、特定の種類の例外が発生したときに、メッセージをエラー処理コンポーネントにルーティングし、例外があったとしても、そのエラー処理コンポーネントにそれらの同期の「onCompletion」を実行させたいからです。

を使用して同期が追加されます

exchange.getUnitofWork().addSynchronization(new MySyncAdapter());

そして、私はそれらにアクセスしようとしていました

exchange.handoverCompletions();

ただし、どのコンポーネントから補完を取得しようとしても (実際のコンポーネントまたはエラー コンポーネント)、リストが null であるため、何か間違ったことをしているに違いないと思います。

編集:

以下の彼の答えによると、これはうまくいくはずです:

exchange.addOnCompletion(new MySyncAdapter());
List<Synchronization> syncs = exchange.handoverCompletions();

ただし、syncs はまだ null です。助言がありますか?

4

1 に答える 1

2

この場合、Exchange には Completions/Synchronizations がありません。UnitOfWork インスタンスには、呼び出すexchange.handoverCompletions()と null が返されます。また、別のスレッドで処理されているため、UnitOfWork の同期にもアクセスできません。handoverCompletion が行うように、それらを変更しようとすると、同時実行例外が発生します。

実際には、意図しない方法で何かを使用しようとしています。交換エラーは、ここで概説されている Exception Clause DSL を呼び出して処理する必要があります。これは、開発者が例外タイプを定義し、Exchange をルートに転送してエラー処理コンポーネントでさらに処理できるようにすることで、Exchange エラーをきめ細かくキャプチャできるように設計されています。

よろしく、スコットES

于 2012-06-06T16:27:00.873 に答える