質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Java

    14102questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Java EE

    376questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

EJBは何に使うのでしょうか?

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 3,837

jimyo

score 219

EJBについて調べると「ビジネスロジックに使う」「サーバーサイドのコンポーネント」など抽象的な説明しか見つからず、具体例は「DB処理」か「タイマー処理」しか見たことがありません。

かくいう自分もDB処理にしか使っていないのですが他にどのような使い方があるのでしょうか?
(@Transactionalアノテーションが追加されてからCDIでもトランザクション処理ができるようになりますますEJBの存在価値がわからなくなりました)

よろしかったらステートレス・ステートフル・シングルトンの使い分けも教えていただけると嬉しいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+5

EJBの用途はありません。ありません。

じゃ、なんでEJBなんてものが存在しているのか。ざっくりいうと「歴史的理由」です。それ以上の意味はほぼないと思ってよいです。
http://d.hatena.ne.jp/ryoasai/20110528/1306594182 も参照してみてください。

EJBはもともと、ビジネスロジックそのものを分散コンポーネントとして流通可能にしようとする意図で登場しました。ビジネスロジックを提供する「EJBean提供者」EJBeanを動作させる基盤となる「JavaEEサーバ(=EJBコンテナ)」、それらを組み合わせて業務を組み上げる「デプロイヤ」の3者の役割がJavaEE仕様として明確に決められていました。それら3者をつなぎ合わせるのがコンテナ設定ファイルであり、実際のデータベース接続先と論理名との対応をコンテナ設定ファイルに記載しておき、EJBeanからはその論理名だけを使うように実装することで、ビジネスロジックを実装した時点よりずっとあとに、デプロイヤが実際のデータベース名を決定する、といったことを目指したのです。

しかし、そんな仕様は複雑すぎて、設計も大変で、実行もとても重たかったため、狙っていたコンポーネント市場も形成されず、アンチEJBeanとしての「POJO」「依存性の注入」「設定より規約」という概念が登場し、その概念を実装した Spring や Seasar といったフレームワークが生まれ、これら概念がJava仕様に逆輸入された、という道のりを辿ってきました。もともとのEJBのコンセプトはすっかり骨抜きになっているため、すでにEJBの存在価値はないと言ってもよいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/01 17:46

    ご回答を拝見しました。JavaEEへの評価が厳しすぎるように感じたのですが、これはJavaEE6もしくは7を使用されたうえでのご意見でしょうか?

    キャンセル

  • 2016/04/01 17:47

    引用コンテンツのまとめには「Java EEは重くて使えないと信じている人も一度最新のCDIを試してみるとその生産性の高さを実感できると思います」との記載が有りますが、ご承知でしょうか。

    キャンセル

  • 2016/04/01 18:27 編集

    DI初期にアノテーションは少々使っていましたが、CDIは使ったことはありません。BlueMoonさん、鋭いご指摘に感謝します。
    なるほど、Qiitaの記事「JavaEEをはじめよう!」によれば、JavaEEのアノテーションを付与するだけで、永続化をはじめ、面倒な何やらかんやらを簡単にJavaEEフレームワーク(EJBコンテナ)に押し付けられる、と解釈しました。なかなかEJBって便利なヤツですね。

    キャンセル

  • 2016/04/01 23:48

    自分の解釈にも死角が有るのかと思い、恐る恐る質問させて頂きました。浸透が遅いと感じる背景には、過去のマイナスイメージが残っているせいも有るのでしょうかね。お付き合い頂き有難うございました。

    キャンセル

checkベストアンサー

+3

JavaEE6,7でもJPAによるDataBaseアクセスに使用します。
下記はJavaEEを解説したコンテンツですが、中盤以降にJPAの説明が有りEJBを利用した例が有ります。

JavaEEをはじめよう!

ステートレス、シングルトンについては簡単にしか触れていませんが、コンテンツ紹介の書籍には具体的に書かれていました。ご参考までに。

質問内容を改めて見て、DBアクセスには利用済で他の用法が無いかというご質問でしたのですね。EJBはJavaEEコンテナ(glassfish,weblogic,websphere)の機能をコントロールする為のAPI的役割を持つものです。ですからコンテナ機能を利用したいという要件が無ければ、DBアクセスにしか利用しないのが通常ではないでしょうか。glassfishの利用経験しかないのですが、セキュリティ機能としてレルム認証に使用したことは有ります(学習がてらですが)。アプリケーションロジックとは独立して権限管理を実装できるメリットは有ります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Java

    14102questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Java EE

    376questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。