JavaEE
今回は Java EE 7 連載の最終回として、CDI の拡張機能を紹介する。 CDI は拡張ポイントを提供して独自の拡張ができるようにしている。具体的に可能なのは以下のようなことである。 独自スコープを追加する CDI Beanでないクラスを CDI Bean として登録し、…
前回の記事では Concurrency Utilities for Java EE のManagedExecutorServiceによる並行処理の例を紹介した。 今回はManagedScheduledExecutorServiceについて解説する。 ManagedScheduledExecutorServiceのサンプル この仕組みは、以前の記事で紹介した1分…
今回から2回に分けて Concurrency Utilities for Java EE を紹介する。今回は前編として、Concurrency Utilities for Java EE の概要と、アプリケーションサーバー側で管理・提供するスレッドプールの1つであるManagedExecutorServiceを紹介する。 Java SE …
前回は Bean ValidationのListとgroupsを使って、複雑な制約条件を記述する方法を紹介した。今回は Bean Validation を組み込んだフレームワークの例として、JPA での使用例を紹介する。 JPA では、エンティティクラスに制約アノテーションを設定することで…
前々回と前回の記事では、Bean Validation の基本的なアノテーションの使用方法と、カスタムアノテーションの作成方法を紹介した。基本的にこれらは、1つの Bean に対して共通のバリデーションを定義するものである。 今回は、1つの Bean に対して複数の制約…
Bean Validation では独自のバリデーションを行うカスタム制約を作成できる。今回はカスタム制約を作成する方法を紹介する。 カスタム制約は以下の2つの方法で作成可能だ。 既存の制約を組み合わせる。 独自のバリデーション処理を作成する。 方法1:既存の…
今回から数回に分けて、Bean Validation を紹介する。 Bean Validation(JSR-303)は JavaBeans のバリデーションを行う仕組みである。Java EE6 から追加され、Java EE7 でのバージョンは1.1である。 Bean Validationとは Bean Validation は、JavaBeans の…
前回の記事までは、WebSocket のサーバー側の実装例を中心に紹介し、クライアント側の実装は JavaScript を利用してきた。 しかし、Java EE の WebSocket API はクライアント用の API も備えている。そのため、このクライアント用 API を使用すれば、ブラウ…
前回の記事では WebSocket の基本的な実装方法を示した。 WebSocket を用いて本格的なアプリケーションを作る場合、メッセージの送受信をどのように行うかが課題となる。WebSocket には、HTML の FORM のように、構造的なデータを送る仕組みはない。このため…
今回から数回に分けて、 Java EE7 で追加された機能の1つである WebSocket の解説を行う。 WebSocket はクライアント(ブラウザ)とサーバー間で相互通信を行うためのプロトコルで、1つのコネクションを使ってブラウザとサーバーが何度もメッセージの送受信…
以前の記事 で、 Java EE7から追加された @Transactional による宣言的トランザクションについて解説した。その中で、glassfish4.1 では、ロールバック時に根本原因がわからないという不具合があることを述べた。 また、その対策として例外ログを出力するイ…
CDIを使用したクラスのユニットテスト、すなわちJUnitなどのテストツールを使用した自動テストはどのように行うべきだろうか。 今回はユニットテストの方法について紹介する。 テスト対象のクラス 今回テストを行う対象は、前回の記事で紹介した、DAOを通じ…
Java EE7から、CDI Beanに対する宣言的トランザクションが使用可能になった。 宣言的トランザクションの使用を宣言しておくと、メソッドの開始と同時に暗黙的にトランザクションを開始し、メソッドの終了時にトランザクションをコミットまたはロールバックで…
前回までで、CDIの基本的な仕組みを紹介した。今回は、CDIのスコープの中でも特殊なスコープである、会話スコープ(@ConversationScoped) について解説する。 @RequestScoped, @SessionScopde, @ApplicationScoped はServletのスコープにもあるので、多くの方…
前回の記事では、インジェクションするクラスの候補が複数ある場合の様々な対処方法を紹介した。 今回は、Producerの効果的な利用方法を2つ紹介する。 リソースパラメータをProducerフィールドで一元管理する まずはProducerフィールドを使って、データソー…
前々回と前回の記事で、CDIの基本的な部分であるスコープとインジェクションについて解説した。 今回は、インジェクション候補のクラスが複数ある場合の様々な対処方法を紹介する。 実装や継承関係がある場合のスコープ指定 実装や継承関係がある場合は、実…
前回は、CDIの定義方法を解説した。 今回は、CDI Beanをインジェクションする方法を紹介する。 インジェクションが可能なクラスの種類 インジェクションを行うには、@Injectアノテーションを使用する。 @Injectが使用可能なクラス、すなわちCDI Beanをプロパ…
前回の記事では、CDIの概要とインジェクションのサンプルを紹介した。 今回から2回に分けて、CDIの基本的な利用方法を紹介する。前半の今回は、CDI Beanの定義で指定するスコープについて解説する。 CDI Beanに指定できるクラス CDI Beanに指定できるクラス…
今回から数回に分けてCDI(Contexts and Dependency Injection)を紹介する。 CDIは Java EE 6から追加されたDI(Dependency Injection、依存性注入)のための仕様である。 Java EE 7におけるCDIのバージョンは1.1であり、またJava EE 7から CDIはデフォルト…
今回はJPAのまとめとして、JPAをより良く使う方法や知っておくとよいトピックについて述べる。 1. テーブル定義とエンティティクラス定義の整合性を保つ仕組み 以前の記事で紹介したように、JPAではスキーマジェネレーションを用いて、エンティティクラスか…
前回までJPAの使用方法を解説してきた。今回は、JPAを利用する上で、テーブルの主キーおよびエンティティのIDの設計で考慮しておくべき事柄を説明する。 複合主キーの定義方法 IDの定義方法を検討をするために、まずJPAでの複合主キーの定義方法を解説する。…
前回までの3回の記事で、JPAが提供する3つのクエリの定義方法を紹介した。 今回はJPAクエリの番外編として、Querydslとストアドプロシージャを紹介する。 Querydslの概要 Querydsl は様々なクエリを生成するためのDSLライクなAPIを提供するオープンソースのJ…
前々回と前回の記事で、JPAが提供する3つのクエリの定義方法のうち、JPQLとNaitiveQueryについて解説した。 今回は、最後の1つであるCriteria APIについて解説する。 Criteria API Criteria API は、API呼び出しによってクエリオブジェクトを構築する方法で…
前回の記事ではJPAのクエリの定義方法のうち、JPQLについて解説した。 今回はNative Queryについて解説する。 Native Queryとは Native Queryは直接SQLを実行する機能であり、JPQLではサポートされてないSQLやデータベース製品固有の方言などを実行すること…
今回から3回に分けて、JPAでエンティティを検索する手段であるクエリを解説する。 JPA では javax.persistence.Query というオブジェクトで、問い合わせの内容を表す。 このQueryを作成する方法は以下の3種類がある。 JPQL (Java Persistence Query Language…
前回の記事では、JUnit上で動作するJPAのサンプルコードを紹介した。 今回は、前回のサンプルをベースにして、JPAを使う上で重要な機能である永続性コンテキストについて解説する。 永続性コンテキスト JPAは永続性コンテキストというある種のバッファのよう…
JPA(Java Persistence API)は、データベースなどの永続化記憶とJavaのオブジェクトとのマッピングを定義して、SQLをあまり書くことなくデータベースとの同期を取ることができる仕組みである。 JPAはO-Rマッピングだけでなく、永続化コンテキストによる同期…
これから企業向けのWebシステムを作るとすれば、どのようなフレームワークを採用すればよいのだろうか。 10年ほど前であれば、Struts1 をベースにして、Spring のような他の OSS と組み合わせるのが一般的な選択肢だった。この記事を読んでいる人の中にも、…