質問

私は、EJBとSpring MVCの持つアプリケーションでHibernateバリを使用しています。私は、JBoss 5は、Hibernate 3とSpring MVCのバージョン3を使用しています。

私は試してみて、キャッチ検証の例外を春例外リゾルバレベルとInvalidStateExceptionメッセージに基づいて、エラーメッセージを生成したいと思います。私は、データアクセス層に例外処理ロジックを置きたくありません。私は、これは、アノテーションによって駆動されるようにしたいとひとつの集中の場所で検証エラーを処理します。

ドメインモデルが正しく検証されていると私は(例えば、フィールド上の長さの制約に違反する)、無効なエンティティを作成しようとすると、期待通りのタイプのInvalidStateExceptionの例外がスローされます。春の例外リゾルバの私のインスタンスで例外をキャッチしようとしているの時点で、私は私の元の例外が消えてしまったとjavax.ejb.EJBTransactionRolledbackExceptionはその場所を取った見つけます。元の例外は、リストによって引き起こされるではありません。

私の最初の推測ではorg.hibernate.validator.InvalidStateExceptionApplicationExceptionで注釈されていなかったということでしたので、私はHibernateのイベントリスナーをインストールし、元の例外をキャッチし、ApplicationExceptionで注釈を付け、新たな例外として、それをrethrew。これは効果がありません。

一つの更なる複雑さは、Web層は、リモートインタフェースを介してEJBを呼び出していることです。私はWebFaultではなく、無駄に私の例外クラスを注釈付きます。

私は、例外がすべての方法をバブルアップを保証するために何をすべきか?

役に立ちましたか?

解決

これを試してみてください!

protected InvalidStateException extractValidationException(Throwable ex) { Throwable e = ex; while (e != null) { if (e instanceof InvalidStateException) { return (ValidationException) e; } else if (e instanceof EJBException) { e = ((EJBException) e).getCausedByException(); } else { e = e.getCause(); } } return null; }

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top