わいるどふらい(WildFly)って何?から学ぶEJB

WildFlyは、オープンソースJavaEEアプリケーションサーバです。

WildFlyは、Javaで記述されたサーバサイドアプリケーションを動作させるための基盤を提供します。
www.ossnews.jp

JBoss Application Serverから改名しました。

WildFly(ワイルドフライ)とは、JBoss AS(コミュニティ版)とJBoss EAPエンタープライズ版)との混同を避けるため2014年4月にJBoss ASが改名された名称です。
その為、名称が変更されたのみとなっており、開発コミュニティ(オープンソースプロジェクト)やソフトウェア自体などJBoss ASと変わりません。
www.ossplaza.com

JBoss Application Server は1999年にEnterprise JavaBeansコンテナとして開発をされたJ2EEアプリケーションサーバです。
www.ossplaza.com

Tomcatとの違いはEJBが使えることです。

同様なサーバサイドプラットフォームとして「Tomcat」があります。
Tomcat」はJSP/Servletを処理するアプリケーションサーバです。
WildFly」は、TomcatをWebコンテナとして搭載しています。そのため、EJBJSP/Servletの両方を処理できます。
www.ossnews.jp

Tomcatで提供される機能は基本的にServlet, JSP, JDBC接続プールのみで、他のものは提供されていません。シンプルですが、他のものが必要になったときに、それらをインテグレーションするコストが発生するなど、少し面倒なことになります。
TomcatになくてJBossにあるものを軽く列挙してみます。

Java EEなもの
JTAトランザクションマネージャ
EJB
MDB
JPA
・JMS
JCA
JAX-WS
JBoss固有なもの
JMX
log4jを用いたログ基盤
・分散キャッシュなどの各種クラスタリングサービス
nekop.hatenablog.com

log4jはログを出力するAPIです。

ponsuke-tarou.hatenablog.com

EJBは、JavaEEに既定されているサーバサイド向けのJavaBeansです。

EJBを利用したシステムの開発者は必要な機能を「Bean」(ビーン)と呼ばれるJavaクラスとして開発していき、これを繋ぎ合わせてアプリケーションを構築する。BeanはEJBの仕様に準拠したアプリケーションサーバに組み込まれて実行される。サーバ側でトランザクション処理やDI(Dependency Injection:依存性注入)、セキュリティ制御などの諸機能を提供してくれるため、Beanの開発者はこれらに個別に対応する必要はなく、自らのビジネスロジックの記述に集中できる。
e-words.jp

まず、JavaBeansはJavaで書かれた再利用可能なソフトウェアコンポーネントのことです。

Java Beansはプログラムの再利用を目的としており、汎用的なロジックで構成されているクラスである。Javaで作成された移植可能なプラットフォームに依存しないコンポーネント・モデルで、JavaBean仕様に従う。 サーバーサイド向けのJavaBeansはEnterprise JavaBeansと呼ばれている。
JavaBeans - Wikipedia

JavaBeansは、Sun Microsystems社のJavaBeans仕様に準拠した再使用可能なソフトウェア・コンポーネントです。JavaBeans仕様は、JavaBeanとなる一式のJavaクラスによって実装されるインタフェースおよびパッケージングの詳細を規定します。 開発者は、JavaBeansをプログラムを使用して組み合せるか、Oracle JDeveloperなどのビジュアル・プログラミング環境を使用してアプリケーションを作成できます。
Oracle Javaロードマップ: JavaBeans

技術的な仕様のことを指してJavaBeansということもあります。

Javaで作成された移植可能なプラットフォームに依存しないコンポーネント・モデルで、JavaBean仕様に従う。 再使用可能なコンポーネントを作成できる。
用語集

JavaBeansの特徴

JavaによるWebアプリケーション入門

①プロパティ

JavaBeansは、「プロパティ」と呼ばれるものをもつJavaクラスです。あるBeanが持つ「属性」を「プロパティ」と考えることができます。
Javaのクラスでは、クラスの属性は、クラス中のフィールドで表現されると考えられます。ところが、あるBeanが持つプロパティは、クラスのフィールドとは関係ありません。ある特定のネーミング・ルールに従ったメソッドの存在が、そのBeanのプロパティを決めているのです。
JavaBeansのネーミング・ルールでは、あるBeanに次のようなメソッドがあるとき、そのBeanにはtitleというプロパティが存在することになります。

String getTitle ( ) ;
void   setTitle ( String title);
  • ネーミング・ルール
    • setter、getter:プロパティ名の先頭の文字を大文字にして、"set"や"get"の文字を加える
      • setter名 = "set" + ( プロパティ名 )'
      • getter名 = "get" + ( プロパティ名 )'
    • プロパティ名:setter名やgetter名から、先頭の"set"、"get"を取り除いた文字列
      • プロパティ名 = ( setter名から、先頭の"set"を取り除いたもの ) = ( getter名から、先頭の"get"を取り除いたもの )
② 永続化

Beanは、必要に応じてオブジェクトの状態を保存したり、復元したりすることができなければいけません。このことを、Beanを「永続化」する、といいます。このためには、Beanにjava.io.Serializableインタフェースを実装する必要があります。このインタフェースにはメソッドは定義されていないので、次のように定義するだけで構いません。

import java . io . Serializable;

public class HogeBean implements Serializable {
     .....
}
③ 引数無しのコンストラクタ

Beanには引数無しのコンストラクタが必要です。

import java . io . Serializable;

public class HogeBean implements Serializable {
public HogeBean ( ) {
.....
}
.....
}

Beanの種類

Session Bean:セッションを保持し、一時的なロジックを保存するオブジェクト

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

  • Stateful Session Bean:クライアントごとの状態を保持するセッションBean
  • Stateless Session Bean:クライアントごとの状態を保持しないセッションBean
  • Singleton Session Bean:常に同じインスタンスへのアクセスが保証されているシングルトンなセッションBean
Message Driven Bean ( メッセージ駆動型Bean):非同期処理の記述などJMS(Java Message Service)を使い、非同期のメソッドの呼び出しをサポートするEnterprise Bean
Entity Bean:永続的なデータを保存するオブジェクト、(Java EE 7)EJB 3.2で廃止

f:id:ponsuke_tarou:20180529002156j:plain