2011-10-23 3 views
1

次の問題があります。私のアプリケーションでは、すべてのユーザーがWebクライアントを通じて、また電子メールを通じてアクションを実行できます。すべてのアクション(コントローラクラス内のメソッド)は、外部キー値ストアに暗黙的に通知を格納する必要があります(私はRedisを使用しています)。さらに、アクションが電子メールで実行された場合、executorには電子メールによるアクション(成功/失敗)。私が経験する主な問題は、懸念を最大限に分離して構造全体をエンジニアリングする方法です。例えば、コントローラメソッド自体が通知の保存/応答メールの送信について何もしないようにします。対応する入力チャネルに基づいて通知を適切に保存する

最初はAOPを使いたいだけで、@Action( "actionType")で自分のメソッドを飾るだけですが、残念ながら送信者が誰かを知る必要があります。私が知る限り、実行時にアノテーション属性に値を割り当てることはできないので、別の方法を考える必要がありました。

2番目のアプローチは、メソッドの実行を停止し、現在のユーザー(セッションスコープのuserServiceから)を取得しますが、もう一度Webコントローラのみで動作するように、 "Around"インターセプタを使用することです。メール処理クラスはステートレスなので、currentUserなどのコンセプトは認識しません(新しいメールが来るたびに、送信者を取得できる唯一の方法はメールのパラメータです)。

I (Webリクエストコントローラとメールプロセッサの両方で)通知が必要なすべてのメソッドから通知サービスを明示的に呼び出すことが最も簡単な方法ですが、もう少し知っているメソッドにつながります。

提案がありますか?

答えて

0

私はAOPアプローチを採用したいと思いますが、ユーザー情報を保持する側面をThreadLocalに分け、Aspectによって初期化されます。この方法で、ロジック全体を実装できますアプリケーションコードを変更することなく

ところで、いい質問です。

関連する問題