【Java】Struts + EJBについて整理してみる - 2
本記事の目的
本題
全体像
開発の流れ
- war用のプロジェクトと、EJBjar用のプロジェクトで開発
- build.xmlでearファイルを作成するように定義
- ビルド
- 動作させたい環境にデプロイ
※ どこかのタイミングで、デプロイ用の定義ファイルを作成する必要があります。
処理の流れ
- クライアントからリクエストを発行する
- WEBサーバーがリクエストを受け付け、WEBコンテナへリダイレクトする
- WEBコンテナ側での処理を実行
- 必要があれば JNDI を利用して、EJBコンテナ側と連携する
- EJBコンテナ側で処理を実行
- 必要であれば JNDI を利用して、DBへのアクセスを実行
- 各処理結果をまとめて、JSPのコンパイル処理を実行
(※設定によっては事前にコンパイルされているケースもある) - レスポンスを返却する
Strutsの動き
※整理していて、自分自身も詳しく理解できていないところがあると気づいたので、また整理できたら追記していこうと思います。
- ActionServletがリクエストを受け付ける
- web.xmlとstruts-config.xmlの定義に基づいて、URIからActionFormを生成し、Actionのexecuteメソッドを実行する。
- 必要があれば、Action内でEJBの処理を呼び出す
- JNDIのlookup経由でHomeインターフェースを呼び出し、createメソッドを実行し、Remoteインターフェースを取得
- Remoteインターフェースから、任意のメソッドを実行
- 処理結果をまとめて、ActionForwardを返す。(Actionクラスの戻り値)
- JSPのコンパイルを実施し、HTMLにしてレスポンスを返却
EJB(とiBatis)の動き
- ActionからJNDI経由でBeanクラスを生成(ステートレスセッションBeanの場合は、プーリング領域から取得)
- 要求された処理を実行
- 必要があれば、DaoManagerを利用してデータソースへのアクセスを実行し、任意のクエリを発行する
- 処理結果を返す
ここまでの補足事項としては、EJBについては、ローカルBean用の仕組みを使えば、JNDI経由で呼び出さずとも、クライアントのサーバー内で解決ができるようです。(初めて知った。。。)
また、自分でも結構曖昧だと感じた部分が多かったので、誤りもあるかもしれません。
次から整理する内容は、より実装ベースの話に入ろうかとも思ったのですが、調べると結構実装例はたくさんあるので、やめておきます。(環境構築がめんd...)
ただ、最近勉強しているコンテナを使って、J2EEベースのStruts+EJB+iBatisのイメージを作ってみるのは、面白そうかな?と思いました。
気づき
- Strutsの詳しい処理について、よくわかっていない
- EJBの呼び出し周りについて、よくわかっていない
- DAOの詳しい処理について、よくわかっていない
→ ある意味、わかっていなくても色々連携ができるという意味では、フレームワークとしての役割を果たしてもらっている。
(ちゃんと時間があるときに調べてみます。)