5

エンタープライズ アプリケーションには、サービス層(ビジネス ロジックとデータベース アクセスを含む EJB3.0) とWeb 層(サーブレット/JSP) があります。分散マシンの JBoss AS 7 では、分離された ear と war がデプロイされます。

サービス層には、ステートフルEJBとステートレスEJB の両方が含まれます。

メソッド呼び出し用の EJB インターセプターがあります。Web層からログインしたユーザーの場合、ユーザー情報はHttpSessionに保存されます (ユーザーの検証は、DB で自分のアカウントとパスワードをクエリすることで簡単に処理されます)。

パフォーマンス チューニングでは、どのユーザーがそれらの EJB メソッドを呼び出したか、ユーザー情報、日付情報などを知る必要があります。これらは抽出されてログに記録されるか、解析のために DB に保存されます。

今私の質問は:

EJB 層で呼び出し元の情報を区別する方法は?

EJB インターセプターは、EJB メソッドのパラメーターと、それがいつ呼び出されたかを取得できます。しかし、誰がそれを呼んだかはわかりません。

EJB 層と Web 層を組み合わせるのが見苦しいことはわかっています。したがって、Session/Request オブジェクトから必要なものを取得するのに役立つ場合でも、HttpSession/HttpRequest を EJB レイヤーに渡しません。

また、Web からすべての EJB メソッドにパラメータとして TuningInfo (リクエスト情報、ユーザー情報などを含む) を渡すことができないほど多くの EJB メソッドがあります。

EJB層で呼び出し元の情報を取得することは可能ですか?

前もって感謝します。

4

1 に答える 1

1

Web層とEJB層が同じJVM上にある場合、スレッドローカル経由でユーザー情報を渡すことができます。 http://javacodesamples.wordpress.com/2012/07/11/understanding-the-concept-behind-threadlocal/

于 2012-10-17T21:28:22.397 に答える