ジャージーのリソースと組み合わせて、リクエストごとのトランザクションを実装したいと思います。つまり、トランザクションを管理するための単一の場所が必要なことを意味します。
try {
chain.doFilter(request, response);
commitSession();
} finally {
rollbackSession(); // no-op if already committed
closeSession();
}
過去に、サーブレットフィルタで同様のことを行ったことがありますが、それはジャージーでは機能しません。ジャージーでは、例外がインターセプトされ、Webコンテナフィルターが制御を取り戻すずっと前に500に変換されます。フィルターアプローチを使い続けて、応答コードをチェックできると思いますが、それはあまり魅力的ではありません。これについていくつかの 会話を見てきましたが、ResourceFilter、CloseableService、またはServletContainerなどを使用した確実なアプローチを思い付くことができませんでした。これまでの私のひどい解決策は、カスタムExceptionMapperを実装してロールバックを実行することでした。そこの。誰かがこれをきれいに解決しましたか?
免責事項-このプロジェクトは現在Springを使用していないため、この小さなユースケースでは避けたいと思います。