normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Eclipse を使った JavaEE6 環境(主にWebLogic Server)を簡単に用意して開発してみる on Windows Azure

本エントリーは「Java EE Advent Calendar 2013」の6日目だ。
既に JavaEE7 がリリースされているが、今回は Windows Azure + WebLogic Server + Eclipse を利用した JavaEE6 の開発環境を用意し、CDI を利用した簡単なアプリケーションを実行する。
環境構築対象である Winodws Azure を利用するためには契約が必要(契約したとしても Windows Azure 標準の設定では無料枠内でしか利用できないようになっているため安心)であるが、EclipseWebLogic Server の環境構築情報については任意のJavaEE環境で参考になるはずだ。

WebLogic Server 12c on Windows Azure の環境構築

こちらについては、以下のスライドと共に私の直近エントリである 「WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かしてみる id:waritohutsu:20131130:1385804228」を参照して欲しい。

WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かす

Windows Azure仮想マシンを利用すれば、WebLogic Server 12c がインストール済のインスタンスを利用することができる。
今回は開発環境のみ構築しているが、必要に応じて WebLogic Server 12c がインストール済の Oracle Linux を利用して本番環境相当のものも容易に構築可能だ。

Eclipse を利用した JavaEE6 開発環境を整え、EARプロジェクトを作る

EclipseJavaEE 開発環境を整える際、以下の点に留意が必要だ。

  • Eclipse は Classic でなく、for JavaEE Developers を利用する
  • JSFCDI に対する IDE サポートを利用するには JBoss Tools を追加でインストールする必要がある
  • デフォルトでは WebLogic Server 用の Server Adapter が無いので、別途でインストールする
  • WAR プロジェクト、EJB プロジェクト、EAR プロジェクトの関係に注意

これらのインストール手順を以下のスライドにまとめたので、こちらを参考にして欲しい。

Eclipse for JavaEE Developers + JBoss Tools でコーディング

手順をまとめているスライドでは WAR, EJB プロジェクトに対して以下の *.java と *.xhtml を追加している。スライドのパッケージエクスプローラの情報を参考に、以下のコードを作成する。

<!DOCTYPE html>
<html>
<head>
<meta http-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;

@Named
public class IndexAction {

	@Inject
	IndexLogic indexLogic;

	public String doAction() {
		System.out.println("アクション実行");
		String result  = indexLogic.doLogic();
		return result;
	}
}
  • IndexLogic.javaEJB 側に格納される。CDI に認識させるために @Named を付与し、Stateless Session Bean とするため @Stateless を付与している
package org.mydomain.logic;

import javax.ejb.Stateless;
import javax.inject.Named;

@Named
@Stateless
public class IndexLogic {
	public String doLogic() {
		System.out.println("!!!! do logic");
		return "0";
	}
}

以上のコードを作成した後、WebLogic Server 12c に管理ポータルからデプロイ*1し、アクションを実行すると以下の様に WebLogic Server の標準コンソールにメッセージが出力される。

*1:何故か Eclipse 経由でアプリケーションを実行した場合、CDI が上手く動作しなかった。なぜだ…