本エントリーは「Java EE Advent Calendar 2013」の6日目だ。
既に JavaEE7 がリリースされているが、今回は Windows Azure + WebLogic Server + Eclipseを利用した JavaEE6 の開発環境を用意し、CDIを利用した簡単なアプリケーションを実行する。
環境構築対象である Winodws Azure を利用するためには契約が必要(契約したとしても Windows Azure標準の設定では無料枠内でしか利用できないようになっているため安心)であるが、Eclipseと WebLogic Server の環境構築情報については任意のJavaEE環境で参考になるはずだ。
WebLogic Server 12c on Windows Azureの環境構築
こちらについては、以下のスライドと共に私の直近エントリである 「WebLogic Server 12c を Windows Azureの Windows Server 2012 R2 で動かしてみる id:waritohutsu:20131130:1385804228」を参照して欲しい。
Windows Azureの仮想マシンを利用すれば、WebLogic Server 12c がインストール済のインスタンスを利用することができる。
今回は開発環境のみ構築しているが、必要に応じて WebLogic Server 12c がインストール済の OracleLinuxを利用して本番環境相当のものも容易に構築可能だ。
Eclipseを利用した JavaEE6 開発環境を整え、EARプロジェクトを作る
Eclipseで JavaEE開発環境を整える際、以下の点に留意が必要だ。
- Eclipseは Classic でなく、for JavaEE Developers を利用する
- JSFや CDIに対する IDE サポートを利用するには JBoss Tools を追加でインストールする必要がある
- デフォルトでは WebLogic Server 用の Server Adapter が無いので、別途でインストールする
- WAR プロジェクト、EJBプロジェクト、EAR プロジェクトの関係に注意
これらのインストール手順を以下のスライドにまとめたので、こちらを参考にして欲しい。
Eclipse for JavaEE Developers + JBoss Tools でコーディング
手順をまとめているスライドでは WAR, EJBプロジェクトに対して以下の *.javaと *.xhtmlを追加している。スライドのパッケージエクスプローラの情報を参考に、以下のコードを作成する。
<!DOCTYPE html><html><head><metahttp-equiv="refresh"content="0; URL=faces/index.xhtml"></head></html>
- index.xhtmlでは EL 式を利用して resources.application.properties からメッセージを参照しているほか、EL式からアクションを実行している。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"><f:loadBundle basename="resources.application" var="msg" /><head><title><h:outputText value="#{msg.welcomeTitle}" /></title></head><body><h3><h:outputText value="#{msg.welcomeHeading}" /></h3><p><h:outputText value="#{msg.welcomeMessage}" /></p><h:form><h:commandButton action="#{indexAction.doAction()}"value="アクション実行" /></h:form></body></html>
- IndexAction.javaは index.xhtmlから呼ばれるアクションであり、 CDIを利用しているため javax.faces.bean.ManagedBean を利用せずに @Named のみ利用している
package org.mydomain.action; import javax.inject.Inject; import javax.inject.Named; import org.mydomain.logic.IndexLogic; @Namedpublicclass IndexAction { @Inject IndexLogic indexLogic; public String doAction() { System.out.println("アクション実行"); String result = indexLogic.doLogic(); return result; } }
- IndexLogic.javaは EJB側に格納される。CDIに認識させるために @Named を付与し、Stateless Session Bean とするため @Stateless を付与している
package org.mydomain.logic; import javax.ejb.Stateless; import javax.inject.Named; @Named@Statelesspublicclass IndexLogic { public String doLogic() { System.out.println("!!!! do logic"); return"0"; } }
以上のコードを作成した後、WebLogic Server 12c に管理ポータルからデプロイ*1し、アクションを実行すると以下の様に WebLogic Server の標準コンソールにメッセージが出力される。