JavaEE7をはじめよう(1)
これから企業向けのWebシステムを作るとすれば、どのようなフレームワークを採用すればよいのだろうか。
10年ほど前であれば、Struts1 をベースにして、Spring のような他の OSS と組み合わせるのが一般的な選択肢だった。この記事を読んでいる人の中にも、当時に作成された Struts1 ベースのシステムを今も保守している方がいるのではないだろうか。
そのため、今年になって発見された Struts1 の脆弱性問題は非常に大きなインパクトがあったように思う。Struts1 系のメンテナンスはすでに終了しており、私にとっては、今後作っていくシステムをどのような構成にするかを、改めて考える機会になった。
そのようなわけで、これから数回にわたって JavaEE についての記事を書いていく。
ここでは必ずしも、 JavaEE こそがこれからのWeb開発にふさわしい唯一の選択肢だと言いたいわけではない。
とはいえ、J2EEという名前で重厚で複雑だった時と比較して、軽量かつ簡単に開発できるようになったことや、標準技術のために仕様が大きく変わったり、突然メンテナンスが終了したりする可能性が低い点で、以前に比べて有力な選択肢になったと考えている。
(個人的には、Scala や Play Framework も気に入っているので、そちらも記事もいずれは書いてみたい。)
JavaEE の仕様
Java EE は Javaによる主に企業向けのサーバーシステム構築のための仕様集で、現在の最新バージョンは JavaEE7 である。
各バージョンに含まれる主な仕様の内容や更新内容を示す。
J2EE1.4以前( - 2003年)
JavaEE5 (2006年) - 開発のしやすさを全面に打ち出し大幅な見直しが実施されたバージョン
JavaEE6 (2009年)
- JSF 2.0 - 設定ファイルの簡素化やWeb標準への適合など開発容易性の強化
- facelets - xhtmlベースのJSFの標準view
- EJB 3.1 - Ear不要でWarのみのデプロイ,非同期処理の追加
- Servlet 3 - 非同期処理の追加、アノテーションベース定義の追加
- CDI - Java EE 全域にわたる DI/AOPの提供
- JAX-RS - REST によるWebシステム構築のフレームワーク
- Webプロファイル - JavaEE のミニセットを定義
- プルーニング - JAX-RPCなど使われなくなった仕様を随時廃止していく
- 組み込みコンテナ - 単体テストにおけるEJBサポート
JavaEE7 (2013年)
今後取り上げる内容
前述のJava EE の全てを取り上げると膨大な量になるので、主にWeb向けのシステムを構築するにあたって重要なものを、サンプルアプリケーションを通じて紹介していく。
現在予定している内容は以下の通り
- JPA - 概要、データ準備、単体テストの方法
- JSF - 概要、複合コンポーネント、ajax、初期化
- CDI - 概要、単体テスト、インターセプタ
- JAX-RS - 概要
- WebSocket - 概要
- jBatch - 概要
- 非同期・concurrency - 概要
- EJB - JMS、スケジューラ、組み込みコンテナによる単体テスト
サンプルアプリケーション
サンプルアプリケーションは以下に公開している。
現在、JSFを使用したチャットアプリケーションを作成済みである。
なお、アプリケーションはとりあえず動けばよい程度なので、Herokuの無料プランで稼動している。
そのため、処理速度などに難があるかもしれないが、了承願いたい。
メールアドレスは、gravatar というメールアドレスから
アバター画像を取得するサービスの利用ためのみに使用している。
gravatarに登録のないアドレスでも問題ないので、@を含む適当な文字列を入れてかまわない。 また、このアプリケーションはインメモリDBで稼動しているので、アプリケーションの停止(一定時間アクセスが無い場合、Herokuはアプリケーションを停止する) と同時にデータは破棄されるので、安心して使用いただきたい。
また、サンプルアプリケーションはDBを使用したWEBアプリケーションであり、 それぞれの仕様を以下のレイヤーに分けて使用し、各レイヤー間の依存性はCDIを用いている。
レイヤ | 役割 | 仕様 |
---|---|---|
View層 | 利用者へのUIを提供 | xhtml(facelets), html(JAX-RS) |
プレゼンテーション層 | viewからのリクエスト受付、ビジネスロジック起動 | CDIによるJSF管理Bean※(JSF), リソース(JAX-RS) |
ロジック・サービス層 | ビジネスロジックの提供 | POJO(CDI Bean) または EJB |
永続化層 | DBへの入出力・同期 | JPA |
実行環境
Java EEの全ての機能を実行するには、Java EE に準拠しているアプリケーションサーバーが必要となる。 現状ではJava EE7に対応しているものは以下の通り。
なお、サンプルアプリケーションを公開している Heroku にはJava EE実行環境がないため、 組み込み版 GlassFish をライブラリとして取り込んだJavaアプリケーションとして実行している。
開発環境
次回
[前多 賢太郎]