38
EJB (Enterprise Java Beans) 棚橋沙 弥香

EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

Embed Size (px)

Citation preview

Page 1: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJB(Enterprise Java Beans)

棚橋沙弥香

Page 2: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

テーマ選定の背景

現在携わっているJava開発案件で、EJBが使われておりますが、私自身がEJBを扱うのが初めてで知らない技術でしたので、勉強してみたいと思い、今回はこのテーマを選定しました。

Page 3: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

1• EJBとは

2• EJBの利点

3• EJBの歴史

4• EJBの開発環境の作成

5 • Enterprise Bean

6• 非同期処理の実装

目次

Page 4: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJBとは①

EJB(Enterprise Java Beans)は、Java EEフレームワークに含まれる機能の1つ。

Java EEは、企業システムのアプリケーション開発に

必要なさまざまな機能を1つにまとめた包括仕様の総称。

JPA JMS BatchJavaMail

JCA

DI/CDI/EJB JTA

JSP/JSTL JPA EL Servlet

WebSocket JAX-RS JSF

Bean V

alidation

Managed B

ean

Com

mon A

nnota

tion

Inte

rcepto

rs

Concurr

ency U

tilities

Java EE 7

Page 5: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

アプリケーションサーバー

EJBとは②

EJBは、アプリケーションサーバー上で動作するJavaのプログラムのうち、特に「ビジネスロジック」を担当する部品を指す。

データベース

プレゼンテーション層 ビジネスロジック層

データストア層

ユーザー

データ処理を依頼

結果

DBの読み書き

WEBコンテナ

JSP・サーブレット

・・・

JSP・サーブレット

JSP・サーブレット

EJBコンテナ

Enterprise Bean

・・・

Enterprise Bean

Enterprise Beanを管理し、動作させる

EJBの規約に則った特別な

Bean

WEBアプリケーションを稼働させる

Page 6: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

1• EJBとは

2• EJBの利点

3• EJBの歴史

4• EJBの開発環境の作成

5 • Enterprise Bean

6• 非同期処理の実装

目次

Page 7: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJBの利点①

EJBコンテナが、トランザクションの制御や、EJBとして記述したクラスのインスタンスの生成/実行と破棄といったシステムレベルのサービスを提供してくれるため、開発者はビジネスロジックの構築に集中できる。

Page 8: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJBのトランザクション管理

EJBでは、何も指定しなくても、メソッドを実行すると

トランザクションを利用するようになっている。

何も指定しなかった場合は、以下の状態になっている。

・トランザクションをEJBコンテナ管理に任せる。

・トランザクションがない場合は開始され、

ある場合はそのトランザクションを引き継ぐ。

別途、@TransactionManagementアノテーション、

@TransactionAttributeアノテーションにより、

トランザクション仕様を指定することもできる。

Page 9: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

アプリケーションサーバー

EJBの利点②

EJBでは、プレゼンテーション層の差し替えが行えるため、アプリケーションをさまざまな方法で利用できる。

WEBコンテナ

JSP・サーブレット

・・・

JSP・サーブレット

JSP・サーブレット

EJBコンテナ

Enterprise Bean

・・・

Enterprise BeanWebユーザー

HTML

Webサーバー

XMLデータベース

Javaアプリケーション

Page 10: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJBの利点③

Java EE準拠のアプリケーションサーバー上であればどこでも動く。商用アプリケーションサーバーの多くでは、EJBの拡張機能を提供している。

・・・

Java EE準拠のアプリケーションサーバーの例として、

GlassFish、JBoss、WebSphere、WebLogic

などがある。

Page 11: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

1• EJBとは

2• EJBの利点

3• EJBの歴史

4• EJBの開発環境の作成

5 • Enterprise Bean

6• 非同期処理の実装

目次

Page 12: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJBの誕生

EJBは元々、OMGのCORBAやSunのRMIといった

分散オブジェクトに由来する技術であり、RMIをベースに

ビジネスロジックを実装するコンポーネントとして誕生した。

Javaの誕生から3年後の1998年頃に登場している。

・CORBA

様々なプラットフォームでの分散処理の連携を実現するための基本仕様

・RMI

ネットワークを通じてプログラム同士が通信を行ない、異なる

コンピューター上にあるオブジェクト(リモートオブジェクト)の

メソッドを呼び出すための技法

Page 13: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

欠点が多かったEJB2.1以前

EJBは、EJB2.1以前は、複雑で扱いにくいと批判されていた。

通常のJavaプログラミングにはない規約が多数あり、開発者はその規約をよく知っていることが必要で、開発やメンテナンスがしにくかった。

EJBのコンポーネントは,アプリケーションサーバー上に配置しなければ実際に動かせなかったため、単体テストを行いにくかった。

トランザクションやセキュリティといったEJBの実行時情報を、XMLの設定ファイルに記述する必要があった。

Page 14: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

大きく改良されたEJB3.0

EJB3.0(2007年~)では、以前のバージョンに比べ、

アノテーションが利用できるようになり、プログラミング

が格段に簡単になった。主な特徴は以下の通り。

EJBのコンポーネントをJavaオブジェクトとして記述できるようになった。XMLによる設定は不要になった。

EJBのコンポーネントを簡単に呼び出せるようになった。

Javaオブジェクトとデータベース間のデータ変換を、「JPA(Java Persistence API)」というデータベース・アクセス方法により、簡潔に行えるようになった。

※以降はEJB3.2について説明する。

Page 15: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

1• EJBとは

2• EJBの利点

3• EJBの歴史

4• EJBの開発環境の作成

5 • Enterprise Bean

6• 非同期処理の実装

目次

Page 16: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJB開発環境の作成①

EJBの開発は「JBoss Developer Studio」で行える。

「JBoss Developer Studio」は、JBOSSによるJava EE

アプリケーションを構築するための統合開発環境。

「JBoss Developer Studio」のインストーラは、

以下のサイトからダウンロードできる。

http://developers.redhat.com/products/devstudio/download/

・Installerの「WithEAP」のリンクを選択

→「devstudio-(バージョン)-installer-eap.jar」が

インストーラ。

Page 17: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJB開発環境の作成②

「JBoss Developer Studio」の動作には、Oracle JDK 1.8.0をインストールしておく必要がある。

「JBoss Developer Studio」のダウンロードには、JBoss Communityのアカウントが必要である。

「JBoss Developer Studio」の利用は、無償で行える。

「JBoss Developer Studio」のインストール手順は、

以下を参照のこと。http://myhappiness.hatenablog.com/entry/2013/02/20/015511

Page 18: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

EJB開発環境の作成③

「JBoss Developer Studio」を起動すると、以下のような画面が起動する。

Page 19: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

1• EJBとは

2• EJBの利点

3• EJBの歴史

4• EJBの開発環境の作成

5 • Enterprise Bean

6• 非同期処理の実装

目次

Page 20: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

Enterprise Beanの種類

セッションBean

ビジネスロジックを実装するためのEnterprise Bean。

詳しくは後述する。

メッセージドリブンBean(MDB)

キューまたはトピックからメッセージを受け取ることで

起動する、用途が限定的なEnterprise Bean。

受信

アプリケーションAアプリケーションB

MDB

Enterprise Bean

送信

メッセージ

キューまたはトピック

Page 21: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

セッションBeanの種類

ステートレスセッションBean

ステート(状態)をもたないセッションBean。

Webページのオンライン処理と相性が良い。

ステートフルセッションBean

ステート(状態)をもつセッションBean。

クライアント毎にインスタンスが作成される。

シングルトン

アプリケーション上に1つだけ存在するセッションBean。

タイマー

時間を指定して起動する部品。

Page 22: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートレスセッションBean

ステート(状態)をもたないセッションBean。

EJBクライアントからの呼び出しの量に応じて作成される。

最もよく利用されるEJB。

アプリケーションサーバー

EJBコンテナ

プール

クライアント

@EJBMyStateless bean;

処理が終われば戻され、再利用される

リクエストとEJBのインスタンスに固定の関係はなく、呼ばれた数だけ利用される

足りなければ作る

Page 23: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートレスセッションBeanの定義例

import javax.ejb.Stateless;

@Stateless

public class MyStatelessBean {

public String sayHello(){

return “Hello EJB!!”;

}

}

ステートレスセッションBeanとして取り扱う

Page 24: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートレスセッションBeanの呼出例

import javax.ejb.EJB;

public class CallEJBServlet extends HttpServlet {

@EJB

MyStateless bean;

@Override

protected void doGet(HttpServletRequest request

,HttpServletResponse response)

throws ServletException, IOException {

String msg = bean.sayHello();

}

}EJBのメソッドを呼び出す

呼び出すEJBを定義

※Servlet関連のimport句や処理は省略している

Page 25: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートレスセッションBeanのサンプル作成

ステートレスセッションBeanのサンプル作成は、

以下のように行った。

1. 動的Webプロジェクト(Dynamic Web Project)を新規作成する。

2. 通常のJavaクラスとして、ステートレスセッションBean(MyStatelessBean.java)を作成する。

4. サーブレットクラス(CallEJBServlet.java)を作成し、2.のクラスを呼び出し、3.のJSPに遷移する処理を記述する。

3. 2.の結果を表示するためのJSPを作成する。

Page 26: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートレスセッションBeanのサンプル実行

ステートレスセッションBeanのサンプル実行は、

以下のように行った。

1. サーバービュー(Servers)に、JBOSSサーバーが表示されていることを確認する。

2. 1.のJBOSSサーバーに、作成した動的Webプロジェクトを追加する。

3. 1.のJBOSSサーバーを起動する。

4. Webブラウザから、以下のURLでアクセスする。http://localhost:8080/(動的Webプロジェクト名)/(サーブレットアクセスパス)

Page 27: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートフルセッションBean①

ステート(状態)をもつセッションBean。

画面遷移に紐付く情報などを保持する。

クライアント毎にインスタンスが作成される。

アプリケーションサーバー

EJBコンテナ

プール

クライアント

@EJBMyStateful bean;

リクエストとEJBのインスタンスに固定の関係があり、保持される

クライアント

@EJBMyStateful bean;

クライアント

@EJBMyStateful bean;

Page 28: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートフルセッションBean②

ステートフルセッションBeanは、ライフサイクルをもつ。

クライアント

@EJBMyStateful bean;

アプリケーションサーバー

EJBコンテナ

プール1.生成

2.活性化/3.非活性化

4.破棄

セッションBeanのインスタンスに対する呼び出しが一定時間ないと、非活性化される。

Page 29: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートフルセッションBean③

アノテーション名 呼ばれるタイミング

@PostConstruct コンストラクタが呼ばれた後

@PostActive 活性化された後

@PrePassivate 非活性化される前

@PreDestroy 破棄される前

@Remove 破棄を行う際(@PreDestroyの後)

ステートフルセッションBeanは、ライフサイクルのコールバックメソッドをもつ。

Page 30: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

ステートフルセッションBeanの定義例

import javax.ejb.Stateful;

import javax.annotation.PostConstruct;

import java.util.logging.*

@Stateful

public class MyStatefulBean {

public String sayHello(){

return “Hello EJB!!”;

}

@PostConstruct

public void calledPostConstruct(){

logger.log(Level.INFO, "PostConstruct called.");

}

private static final Logger = ・・・以下略・・・

}

ステートフルセッションBeanとして取り扱う

ライフサイクルのコールバックメソッド利用例

※呼び出し・作成・実行手順はステートレスセッションBeanの場合と同じ

Page 31: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

シングルトンセッションBeanと定義例

import javax.ejb.Singleton;

import javax.ejb.Startup;

@Singleton

@Startup

public class MySingletonBean{

・・・以下略・・・

}

シングルトンセッションBeanとして取り扱う

アプリケーション上に1つだけ存在するセッションBeanをシングルトンセッションBeanという。

デプロイされたアプリケーションが有効化されたタイミングで、すぐオブジェクトを生成する

※呼び出し・作成・実行手順はステートレスセッションBeanの場合と同じ

Page 32: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

タイマー

時間に関係する処理や、定期的な処理をアプリケーションサーバー上で実装したい場合に、タイマーを利用できる。

例えば、以下のような場合に用いる。

・時間帯によって挙動を変えるために内部の設定を変更する。

・定期的に外部システムから情報を取得したり、

システムの外部に提供する。

・アプリケーションの情報を定期的に出力する。

Page 33: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

タイマーの定義例

import javax.annotation.PostConstruct;

import javax.ejb.*;

import java.util.logging.*;

@Singleton

@Startup

public class LogTimer{

@PostConstruct

@Schedule(hour=“9”, minute=“0-10”, second=“0”)

public void myTimer(){

logger.log(Level.INFO, “LogTimer called.");

}

private static final Logger = ・・・以下略・・・

}

9:00~9:10まで、1分刻みでログ出力を行う

※サーバーを起動したタイミングでセッションBeanが生成され、myTimerメソッドが実行されるようになる

Page 34: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

1• EJBとは

2• EJBの利点

3• EJBの歴史

4• EJBの開発環境の作成

5 • Enterprise Bean

6• 非同期処理の実装

目次

Page 35: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

同期処理と非同期処理

非同期処理は、あるタスクが実行をしている際に、他のタスクが別の処理を実行できるが、同期処理は実行できない。

Page 36: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

非同期処理の定義例

import javax.ejb.Stateless;

import javax.ejb.Asynchronous;

import java.util.logging,*;

@Stateless

public class MyAsyncBean {

@Asynchronous

public void sendMail (){

logger.log(Level.INFO, “sending mail started.”);

}

private static final Logger = ・・・以下略・・・

}

非同期処理を行う(付与しない場合は同期処理)

Page 37: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

まとめ

現状のEJB3.2では、トランザクション管理をコンテナで自動で行ったり、タイマーや非同期処理を行ったりする処理を、アノテーションを付与するだけで簡単に行えるようになっていることがわかりました。

Java EEには、EJB以外にもいろいろな技術があるようですので、もっと勉強してみたいと思います。

Page 38: EJB - ジェイスクール – 新宿でJAVAを勉強するならジェ …vol8][S_Tanahashi... ·  · 2016-12-05WebSocket JAX-RS JSF on n on tors es Java EE 7. ... GlassFish、JBoss、WebSphere、WebLogic

参考文献

Java EE7 徹底入門

標準 Javaフレームワークによる高信頼性Webシステム

の構築

EJBの仕組みを知ろう

http://www.itmedia.co.jp/enterprise/0401/30/epn11.html