適切なEJB例外処理-クライアントからのClassNotFoundException

StackOverflow https://stackoverflow.com/questions/1401108

  •  05-07-2019
  •  | 
  •  

質問

Hibernateを使用してデータベースにデータを永続化するEJBがいくつかあります。これらのEJBと通信する分厚いSwingクライアントがあります。クライアントはデータベースについて何も知りません(ドライバーjarを知りません)。

1つのトランザクション中にHibernate ConstraintViolationExceptionがスローされる場合があります。すべての例外をキャッチし、EJBExceptionで次のようにラップします。

catch(HibernateException e) {
    e.printStackTrace();
    throw new EJBException(e);
}

私が得ている問題は、クライアント側のJBoss Invokerによって例外が非整列化されると、クライアントがクラスパスにsqlドライバーjarを持たないためClassNotFoundExceptionがスローされることです(PSQLExceptionの場合)。

このアプリケーションを変更して、キャッチされた例外を常にこのようなejbexceptionコンストラクターに渡すようにしたため、スタックトレースの履歴を取得できます。今、私は元の開発者がこれをしなかった理由を見つけています。

この時点で、クライアントにpostgresドライバーjarを含めるか、キャッチした例外をEJBExceptionコンストラクターに渡すかを削除する2つのオプションが表示されます。誰か他の提案があり、他の人がEJBの例外をどのように処理するのか興味がありますか?

役に立ちましたか?

解決

私の見解では、クライアントであるエンドユーザーは、問題の技術的な詳細を知る必要はありません。したがって、さまざまなレイヤーの境界では、技術的な例外を一般的な「自然のエラーXYZが発生しました」に変換することは非常に合理的です。

私が使用したスキームは、例外が検出された時点でサーバーが一意のエラー番号を割り当てることです。次に、その番号を含む診断をログに書き込みます。クライアントに報告されるメッセージには、単に番号が含まれています。サポートデスクは、その特定のエラー番号を介して問題のユーザーのレポートを関連付けることができます。

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