ゆるくエンジニア日記

職業はシステムエンジニア。日々の学びや感じたことをゆるく記録していきます。

【Java】Struts + EJBについて整理してみる - 2

本記事の目的

  • StrutsEJBJ2EEの関係について、イメージできるようにする。 ※開発現場によって多少の違いがあると思いますので、そこはご容赦ください。

本題

全体像

開発の流れ
  1. war用のプロジェクトと、EJBjar用のプロジェクトで開発
  2. build.xmlでearファイルを作成するように定義
  3. ビルド
  4. 動作させたい環境にデプロイ
    ※ どこかのタイミングで、デプロイ用の定義ファイルを作成する必要があります。
処理の流れ
  1. クライアントからリクエストを発行する
  2. WEBサーバーがリクエストを受け付け、WEBコンテナへリダイレクトする
  3. WEBコンテナ側での処理を実行
  4. 必要があれば JNDI を利用して、EJBコンテナ側と連携する
  5. EJBコンテナ側で処理を実行
  6. 必要であれば JNDI を利用して、DBへのアクセスを実行
  7. 各処理結果をまとめて、JSPコンパイル処理を実行
    (※設定によっては事前にコンパイルされているケースもある)
  8. レスポンスを返却する
Strutsの動き

※整理していて、自分自身も詳しく理解できていないところがあると気づいたので、また整理できたら追記していこうと思います。

  1. ActionServletがリクエストを受け付ける
  2. web.xmlstruts-config.xmlの定義に基づいて、URIからActionFormを生成し、Actionのexecuteメソッドを実行する。
  3. 必要があれば、Action内でEJBの処理を呼び出す
    • JNDIのlookup経由でHomeインターフェースを呼び出し、createメソッドを実行し、Remoteインターフェースを取得
    • Remoteインターフェースから、任意のメソッドを実行
  4. 処理結果をまとめて、ActionForwardを返す。(Actionクラスの戻り値)
  5. JSPコンパイルを実施し、HTMLにしてレスポンスを返却
EJB(とiBatis)の動き

  1. ActionからJNDI経由でBeanクラスを生成(ステートレスセッションBeanの場合は、プーリング領域から取得)
  2. 要求された処理を実行
  3. 必要があれば、DaoManagerを利用してデータソースへのアクセスを実行し、任意のクエリを発行する
  4. 処理結果を返す

ここまでの補足事項としては、EJBについては、ローカルBean用の仕組みを使えば、JNDI経由で呼び出さずとも、クライアントのサーバー内で解決ができるようです。(初めて知った。。。)
また、自分でも結構曖昧だと感じた部分が多かったので、誤りもあるかもしれません。

次から整理する内容は、より実装ベースの話に入ろうかとも思ったのですが、調べると結構実装例はたくさんあるので、やめておきます。(環境構築がめんd...)

ただ、最近勉強しているコンテナを使って、J2EEベースのStruts+EJB+iBatisのイメージを作ってみるのは、面白そうかな?と思いました。

気づき
  • Strutsの詳しい処理について、よくわかっていない
  • EJBの呼び出し周りについて、よくわかっていない
  • DAOの詳しい処理について、よくわかっていない
    → ある意味、わかっていなくても色々連携ができるという意味では、フレームワークとしての役割を果たしてもらっている。
    (ちゃんと時間があるときに調べてみます。)
参考リンク
J2EEEJB関連

atmarkit.itmedia.co.jp

www.ulsystems.co.jp

atmarkit.itmedia.co.jp

EJBの参考

www.samuraiz.co.jp

iBatisの参考

codezine.jp