Posts filed under ‘Application Server/GlassFish’
JSF 2.0 で Facelets タグをコメントする方法
今日は、JSF 2.0 の Facelets でコンポーネントタグをコメントする方法をご紹介します。テスト用のコードを記載する際、デバッグ用のコード、もしくはダミーのコードを埋め込んだりする事があるかと思いますが、本番環境での表示には必要ないコンポーネントをコメントする方法を下記に紹介します。
まず、始めに、下記のようなサンプルページを作成してください。
<?xml version='1.0' encoding='UTF-8' ?> <!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:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:commandButton action="#{user.login_dummy}" value="Submit-Dummy"/><br/> <h:commandButton action="#{user.login}" value="Submit"/> </h:body> </html>
CDI の UserBean.java
package jp.co.oracle.cdi; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.ValidatorException; import javax.inject.Named; @Named("user") @SessionScoped public class UserBean implements Serializable{ public void login(){ ; } public void login_dummy(){ ; } }
今回は上記コード中の「Submit-Dummy」ボタンをコメントします。何も考えず、通常通り HTML/XML のコメント(<!– –>)を使って下記のようにコメントをして実行してください。
<?xml version='1.0' encoding='UTF-8' ?> <!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:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <!-- <h:commandButton action="#{user.login_dummy}" value="Submit-Dummy"/><br/> --> <h:commandButton action="#{user.login}" value="Submit"/> </h:body> </html>
すると、下記のようなエラーが表示されます。
致命的: Error Rendering View[/comentSample.xhtml]
javax.el.PropertyNotFoundException: The class ‘jp.co.oracle.cdi.org$jboss$weld$bean-$Users$yt133043$NetBeansProjects$JSFSampleApplication$build$web$-ManagedBean-class_jp$co$oracle$cdi$UserBean_$$_WeldClientProxy’ does not have the property ‘login_dummy’.
警告: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
これは、通常の XML/HTML のコメントのように、<!– –> でコメントしても JSF 2.0 の実行環境では完全にコメントできていない事を表しています。内部的には、 #{user.login_dummy}の EL式が評価・処理されています。
そこで、JSF のコンポーネントタグをコメントする方法(EL式も含め)を2通り紹介します。
1. <ui:remove> </ui:remove> タグを使用する方法
2. facelets.SKIP_COMMENTS を web.xml に記載する方法
まず、始めの方法は
<ui:remove> タグを使用する方法です。下記の 10 行目〜12 行目のように、コメントしたいコンポーネントを <ui:remove> </ui:remove> でくくってください。
<?xml version='1.0' encoding='UTF-8' ?> <!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:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <ui:remove> <h:commandButton action="#{user.login_dummy}" value="Submit-Dummy"/><br/> </ui:remove> <h:commandButton action="#{user.login}" value="Submit"/> </h:body> </html>
コメントした後、画面を再描画すると「Submit-Dummy」のコマンドが非表示になっている事を確認できます。
この時の描画されたページの HTML ソースコードは下記のようになります。
<?xml version='1.0' encoding='UTF-8' ?> <!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"> <head> <link rel="stylesheet" type="text/css" href="/JSFSampleApplication/primefaces_resource/2.1/skins/sam/skin.css" /> <title>Facelet Title</title> </head> <body> <input type="submit" name="j_idt7" value="Submit" /> </body> </html>
次にもう一つの方法は、
web.xml 設定ファイルに facelets.SKIP_COMMENTS を記述する方法です。下記の7 行目〜10 行目のように web.xml に facelets.SKIP_COMMENTS を追加してください。すると<!– –> でくくられた箇所が EL 式も評価されずコメントされる事が確認できます。
web.xml 設定ファイルの編集:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Production</param-value> </context-param> <context-param> <param-name>facelets.SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> ...
この時の HTML の出力結果は下記のようになります。
<?xml version='1.0' encoding='UTF-8' ?> <!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"> <head> <link rel="stylesheet" type="text/css" href="/JSFSampleApplication/primefaces_resource/2.1/skins/sam/skin.css" /> <title>Facelet Title</title> </head> <body> <input type="submit" name="j_idt7" value="Submit" /> </body> </html>
どちらの方法を使用してもコメントができるようになりますので、開発者の皆様の使い勝手の良い方法を選択してください。
JSF 2.0 の新機能概要とFacelets テンプレートのご紹介
JavaServer Faces 2.0(JSF) は Java EE 6 含まれる標準 Web ユーザインタフェース技術です。これから数回に渡り、JSF 2.0 の新機能を紹介して行きたいと思います。
JSF 2.0 の新機能
- Facelets/VDL による実装
- Ajax 対応
- カスタム複合コンポーネント
- Behavior
- Partial State
- ページナビゲーションの改良
- Resource Loading
- ブックマーク可能なページ
- New Event API
- 例外ハンドリング
- JSR-303 Bean Validation のサポート
- faces-config.xml のオプション化
JSF 2.0 では JSF 1.2 に比べ上記のような新機能が含まれますが、今日は JSF 2.0 から標準仕様に含まれた Facelets について紹介します。
Facelets は JSF 1.2 まで View を記載する方法として使用されていた JavaServer Pages(JSP) で の代替え方法として開発されました。JSF 1.2 の頃は Facelets は標準仕様内に組み込まれていなかったため、別途利用するための設定等が必要でしたが、JSF 2.0 からは JSF の標準仕様内に組み込まれたため、今後は JSP の変わりに Facelets(XHTML) を記載して開発するようになります。
また、JSF 1.2 は Servlet 2.5 と組み合わせて動作させる必要がありましたが、JSF 2.0 では Servlet 3.0 との組み合わせは必須ではなく、Servlet 2.5 との組み合わせでも動作させる事ができるようになっています。つまり JSF 2.0 の実行環境(参照実装は Mojjara(モハラ)) は Java EE 6 の環境下だけでなく Java EE 5 の環境でも動作させる事ができるようになっています。WebLogic 10.3.3 等 Java EE 5 のアプリケーションサーバ上でも JSF 2.0 を動作させる事ができるようになっています。
● Facelets による開発の利点
JSF 1.2 までは JSP で JSF を開発していました。しかし JSP で開発する際には、コンパイル時にオーバヘッドが掛かっていました。例えば、JSP のコードを編集したり、保存、ページの再読み込みのような処理を行うたびに、JSP コンパイラは Java の Servlet コードを生成し、コンパイルをを行っていました。これは JSP の Translation プロセスと呼ばれ、約1~2秒程のオーバヘッドが掛かっていました(サーバの処理能力に依存)。
一方、JSP と異なり、Facelets ページは Servlet にコンパイルされず、XML として処理を行います。そして Facelets は表示を行うために高速な SAX ベースのコンパイラを使用しています。また Facelets はページの変更等を即座に検知する事ができるため、JSF における開発効率が向上します。
■テンプレート機能
多くの Web サイトではページ間のデザインを統一するため、共通の表示部分を持たせる事が多いかと思います
例えば、共通のヘッダやフッダ、サイドバー等はページ間で統一したいかと思います。上記の Web ページでは下記のように共通部分を5つ(ヘッダ、左ペイン、右ペイン、フッダ、自由記載のコンテンツ領域)に分割する事ができます。
この内、「自由記載のコンテンツ領域」以外は全ページで同一コンテンツを表示したいと考えます。このような場合、作成するページ毎に共通部分(ヘッダ、フッダ等)を記載すると、開発効率やメンテナンス性が非常に悪くなります。このような重複コンテンツを効率よく扱うために、Facelets では「テンプレート機能」を持ち共通部分をテンプレート内に記載し、必要な部分だけを編集する事ができるようになっています。
PrimeFaces について
上記の画面は全て NetBeans 7.0 Beta に含まれる PrimeFaces を使用して作成しています。Oracle のホームページの画面に似せて作成してみましたが、PrimeFaces は非常にリッチな JSF のコンポーネントを提供していますので、簡単にこのようなリッチな JSF Web アプリケーションを作成する事ができます。PrimeFaces が提供している各種 JSF コンポーネントの詳細は下記をご参照ください。
ご参考:PrimeFaces ShowCase (提供されるコンポーネント一覧)
NetBeans 7.0 Beta で PrimeFaces を利用するためには、新規プロジェクトを作成する際、フレームワークの選択時に、「JavaServer Faces 」をチェックし「コンポーネント」より「PrimeFaces 2.1」を選択してください。
● プロジェクトの進め方とディレクトリ構成
今回、NetBeans 7.0 のプロジェクトを作成しますが、下記のような手順で画面を作成していきます。
1. ヘッダの作成
2. 左ペインの作成
3. 右ペインの作成
4. フッダの作成
5. テンプレートの作成
6. 各種ページの作成
ちなみに、プロジェクトのディレクトリ構成は下記のように作成しています。
「Web ページ」配下に「templates」ディレクトリを作成し、JSF のテンプレートファイル (1〜5) はすべてこのディレクトリ配下に作成します。
1. ヘッダ部分の作成
まず、ヘッダ部分を作成します。ヘッダ部分は PrimeFaces で提供されている MenuBar を利用します。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:form id="menue"> <h:graphicImage url="/resources/images/Oracle_ja.gif"/> <p:menubar> <p:submenu label="製品"> <p:menuitem value="Oracle DataBase" url="http://www.oracle.com/jp/products/database/index.html"> </p:menuitem> <p:menuitem value="Oracle Fusion Middleware" url="http://www.oracle.com/jp/products/middleware/index.html"> </p:menuitem> </p:submenu> <p:submenu label="ダウンロード"> <p:menuitem value="DataBase"></p:menuitem> <p:menuitem value="DataBase 11g" url="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html"> </p:menuitem> </p:submenu> <p:submenu label="価格/ライセンス"> <p:menuitem value="価格表" url="http://www.oracle.com/jp/corporate/pricing/pricing-pricelists-079522-ja.html"> </p:menuitem> </p:submenu> <p:submenu label="サポート"> <p:menuitem value="価格表" url="http://www.oracle.com/jp/corporate/pricing/pricing-pricelists-079522-ja.html"> </p:menuitem> </p:submenu> <p:submenu label="研修/資格"> <p:menuitem value="価格表" url="http://www.oracle.com/jp/corporate/pricing/pricing-pricelists-079522-ja.html"> </p:menuitem> </p:submenu> <p:submenu label="パートナー"> <p:menuitem value="価格表" url="http://www.oracle.com/jp/corporate/pricing/pricing-pricelists-079522-ja.html"> </p:menuitem> </p:submenu> <p:submenu label="日本オラクルについて"> <p:menuitem value="価格表" url="http://www.oracle.com/jp/corporate/pricing/pricing-pricelists-079522-ja.html"> </p:menuitem> </p:submenu> </p:menubar> </h:form> </h:body> </html>
2. 左ペイン部分の作成
次に左ペインの部分を作成します。
左ペインの部分は PrimeFaces で提供されている Menu を利用します。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:form> <div class="leftString"> <p:menu> <p:submenu label="Oracle Fusion Middleware"> <p:menuitem value="アプリケーション・グリッド"/> <p:menuitem value="アプリケーション統合アーキテクチャ"/> <p:menuitem value="WebLogic Server"/> <p:menuitem value="ビジネス・インテリジェンス"/> <p:menuitem value="ビジネスプロセス管理"/> <p:menuitem value="コラボレーション"/> <p:menuitem value="コンテンツ管理"/> <p:menuitem value="データ統合"/> <p:menuitem value="開発ツール"/> <p:menuitem value="イベント駆動アーキテクチャ"/> <p:menuitem value="Exalogic"/> <p:menuitem value="ID管理"/> <p:menuitem value="インメモリ・データグリッド"/> </p:submenu> </p:menu> </div> </h:form> </h:body> </html>
3. 右ペイン部分の作成
次に右ペインの部分を作成します。
右ペインの部分は PrimeFaces で提供されている Accordion Panel を利用します。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:form> <div class="leftString"> <p:accordionPanel autoHeight="false"> <p:tab title="ダウンロード"> <h:panelGrid columns="2" cellpadding="10"> <h:outputText value="Oracle Universal Content Management"/> </h:panelGrid> </p:tab> <p:tab title="サポート"> <h:panelGrid columns="2" cellpadding="10"> <h:outputText value="Oracle Support"/> <h:outputText value="Advanced Customer Services"/> </h:panelGrid> </p:tab> <p:tab title="技術情報"> <h:panelGrid columns="2" cellpadding="10"> <h:outputText value="Oracle Content Management"/> </h:panelGrid> </p:tab> <p:tab title="パートナー"> <h:panelGrid columns="2" cellpadding="10"> <h:outputText value="Find Specialized partner"/> </h:panelGrid> </p:tab> <p:tab title="カタログ/データシート"> <h:panelGrid columns="2" cellpadding="10"> <h:outputText value="Brochure: Oracle Content Management (PDF)"/> <h:outputText value="Data Sheet: Unversal Content Management (PDF)"/> </h:panelGrid> </p:tab> <p:tab title="ホワイトペーパー"> <h:panelGrid columns="2" cellpadding="10"> <h:outputText value="Information Workplace Platform: Oracle vs Microsoft(PDF)"/> <h:outputText value="Get More from Microsoft SharePoint with Oracle Fusion Middleware (PDF)"/> </h:panelGrid> </p:tab> </p:accordionPanel> </div> </h:form> </h:body> </html>
4.フッダ部分の作成
次にフッダ部を作成します。
フッダ部分はちょっと手抜きですが、下記のように記述します。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <div class="greyBarBottom"><!--footer--></div> <h:graphicImage url="/resources/images/oracle-footer-tagline.gif"/> <div class="footerString"> 会社情報 | オラクルとサン | Oracle RSS Feeds | Subscribe | 採用情報 | お問い合わせ | サイトマップ | ウェブサイトのご使用条件 | 個人情報保護基本方針 | 情報保護基本方針 </div> </h:body> </html>
5. JSF テンプレートの作成
次に、上記で作成した各共通部分を含むテンプレートを作成します。NetBeans のプロジェクトから「新規」→「その他…」を選択してください。
すると下記の画面が表示されます。ここで「Facelets テンプレート」を選択します。
選択すると下記の画面が表示されますので、レイアウトのスタイルを選択して「完了(F)」ボタンを押下します。
ボタンを押下するとテンプレートの雛形が生成されますので、これを編集して Facelets テンプレートを完成させます。ここでは、 <ui:include src=”./top.xhtml”/>、<ui:include src=”./left.xhtml”/>、<ui:include src=”./right.xhtml”/>、<ui:include src=”./bottom.xhtml”/> のタグを使ってそれぞれをテンプレートの適切な箇所に記載します。
「レイアウトスタイル:」で「表」をチェックした際のテンプレートの記載内容を下記に示します。(画面構成は自由にカスタマイズができます。)
<?xml version='1.0' encoding='UTF-8' ?> <!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"> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href="./../resources/css/default.css" rel="stylesheet" type="text/css" /> <link href="./../resources/css/tableLayout.css" rel="stylesheet" type="text/css" /> <title>Facelets Template</title> </h:head> <h:body> <table cellspacing="10px"> <tr> <td id="top" colspan="3"> <ui:insert name="top"> <ui:include src="./top.xhtml"/> </ui:insert> </td> </tr> <tr> <td id="left"> <ui:insert name="left"> <ui:include src="./left.xhtml"/> </ui:insert> </td> <td id="content"> <ui:insert name="content">Content</ui:insert> </td> <td id="right"> <ui:insert name="right"> <ui:include src="./right.xhtml"/> </ui:insert> </td> </tr> <tr> <td id="bottom" colspan="3"> <ui:insert name="bottom"> <ui:include src="./bottom.xhtml"/> </ui:insert> </td> </tr> </table> </h:body> </html>
6. JSF テンプレートクライアント(表示用のページ)の作成
次に、テンプレートを利用した表示用のページを作成します。NetBeans のプロジェクトから「新規」→「その他…」を選択してください。
すると下記の画面が表示されます。ここで「Facelets テンプレートクライアント」を選択します。
ここで「テンプレート:」の「参照…」ボタンを押下してください。すると下記のように、テンプレートを選択するウィンドウが表示されます。
作成したテンプレート(tableTemplate2.xhtml)を選択し「ファイルを選択」ボタンを押下します。最後に「完了(F)」ボタンを押下します。
すると下記の雛形が自動生成されます。
<?xml version='1.0' encoding='UTF-8' ?> <!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"> <body> <ui:composition template="./templates/tableTemplate2.xhtml"> <ui:define name="top"> top </ui:define> <ui:define name="left"> left </ui:define> <ui:define name="content"> content </ui:define> <ui:define name="right"> right </ui:define> <ui:define name="bottom"> bottom </ui:define> </ui:composition> </body> </html>
ここで「Facelets テンプレート」と「テンプレートクライアント」の関係を説明します。「Facelets テンプレート」の中身を確認すると下記のタグが記載されている事が確認できます。(それぞれ、17行目, 24行目, 29行目, 32行目, 39行目)
<ui:insert name="top"> <ui:insert name="left"> <ui:insert name="right"> <ui:insert name="content">Content</ui:insert> <ui:insert name="bottom">
一方で、「テンプレートクライアント」の中身を確認すると下記のタグが記載されている事が確認できます。(それぞれ10行目, 14行目, 18行目, 22行目, 26行目)
<ui:composition template="./templates/tableTemplate2.xhtml"> <ui:define name="top"> <ui:define name="left"> <ui:define name="content"> <ui:define name="right"> <ui:define name="bottom"> </ui:composition>
Facelets ではテンプレート中に記載されている <ui:insert name=”NAME”> の箇所をテンプレートクライアントの <ui:define name=”NAME”> で更新する事ができます。テンプレートの全てを変更したい場合は全て上書きする事ができますが(NetBeans で自動的に作成される上記の雛形は全てを上書きします)、自由記載のコンテンツ領域だけを編集したい場合は、下記のように必要な部分のみ(<ui:define name=”content”> のタグの部分だけを残してその部分のみ)を編集します。
<?xml version='1.0' encoding='UTF-8' ?> <!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"> <body> <ui:composition template="./templates/tableTemplate2.xhtml"> <ui:define name="content"> ここに「自由記載 コンテンツ領域」の内容を書きます。 </ui:define> </ui:composition> </body> </html>
テンプレートを使用して作成したコンテンツへアクセスすると下記の画面が表示されます。
JSF 2.0 の Facelets のテンプレート機能を効果的に利用すると Web ページの開発が効率化され、本当に必要な部分の開発にのみ集中できるようになります。また、NetBeans 7.0 Beta に含まれる PrimeFaces も非常にリッチな JSF コンポーネントが用意されていますので、見栄えのよい Web ページをかんたんに作成する事ができるようになります。
是非、お試しください。
本ページで使用した NetBeans 7.0 Beta のプロジェクトは下記より入手可能です。JSFSampleApplication.jar (NB7 プロジェクトファイルのアーカイブ)の入手はコチラ
余談:
上記、プロジェクトですが、web.xml の設定を Development にすると画面中に下記のワーニングが表示されます。(すいません、原因がつかめていません。)
The button/link/text component needs to have a Form in its ancestry. Please add <h:form>.
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
下記のように、Production に変更するとワーニングは表示されません。
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
原因がわかったら追記します。
GlassFish v3.1 の新機能概要
先日の JavaFX & GlassFish 合同勉強会で発表した資料とデモを公開します。
また、デモを行った際の手順も下記に記載します。
GlassFish v3.1の入手はコチラから
WebSocket サンプルアプリケーションの入手はコチラから
zip 版 GlassFish をインストールする為、unzip してください。
# unzip latest-web.zip |
次にドメインを起動します。下記のコマンドを実行してください。
# asadmin start-domain |
次にクラスタを作成します。下記のコマンドを実行してください。
# asadmin create-cluster cluster1 |
次に、SSH で操作ができるようログインパスワード(相手ノードのパスワード)
を “AS_ADMIN_SSHPASSWORD”に設定し、setup-ssh サブコマンドを実行してください。
※ setup-ssh サブコマンドは後に出てくるパスワードエイリアスが使用できないため、この時点では相手システムのパスワードを生のテキストファイルに記載し、設定完了後削除してください。
④ ノードへのログインパスワード設定
# echo “AS_ADMIN_SSHPASSWORD=password” > /tmp/password |
⑤ SSH 公開鍵・秘密鍵の作成(ローカル)、authroized_keys の作成(リモート)
下記のコマンドを実行するとホームディレクトリの.sshディレクトリ配下にid_rsa、id_rsa.pubの2ファイルを作成します。また相手システムのホームディレクトリ .sshディレクトリ配下にauthroized_keysを無ければ作成し、公開鍵を追加します。これにより、SSH 経由で処理ができるようになります。
# asadmin –passwordfile=/tmp/password –interactive=false setup-ssh –sshuser root –generatekey=true glassfish-node1 |
下記のコマンドを実行すると、ドメイン管理サーバから相手システムに GlassFish のバイナリをインストールします。
# asadmin install-node –installdir /usr/local/glassfish3 –sshuser root –sshkeyfile ~/.ssh/id_rsa glassfish-node1 |
⑦ パスワード・エイリアスの作成
GlassFish v3.1 からパスワードのエイリアスを使用できるようになりました。管理パスワードの他、DB 設定においても生テキストのパスワードを入力する必要がなくパスワード・エイリアスを使用してセキュアな管理ができるようになります。
# asadmin create-password-alias ssh-password |
⑧ パスワードファイルの作成 (bash の場合)
# echo “AS_ADMIN_SSHPASSWORD=${ALIAS=ssh-password}” > /tmp/p |
パスワードエイリアスを設定後、パスワードエイリアスを指定したパスワードファイルを使用して GlassFish のノードを作成します。
# asadmin –passwordfile /tmp/p create-node-ssh –nodehost glassfish-node1 –sshuser root –sshkeyfile ~/.ssh/id_rsa –installdir /usr/local/glassfish3 node1 |
ノード作成後、クラスタ(cluster1)に含まれるインスタンスを作成します。
# asadmin create-instance –node node1 –cluster cluster1 instance1 |
⑩’ JDK のインストールパスを設定
システムに応じては JDK のインストールパスが異なるため 必要な場合 JDK のインストールパスを設定します。
# asadmin set “configs.config.cluster1-config.java-config.java-home=/usr/jdk/jdk1.6.0_23” |
インスタンスを作成しましたので、インスタンスを起動します。
# asadmin start-instance instance1 |
⑫ GlassFish インスタンスの一覧表示
list-instances サブコマンドでインスタンスの一覧を表示する事ができます。
# asadmin list-instances |
⑬ Cluster に対する WebSocket の有効化
GlassFish v3.1 から WebSocket を利用できるようになりました。GlassFish v3.1 で WebSocket を有効化するためには下記のコマンドを実行してください。
# asadmin set configs.config.cluster1-config.network-config.protocols.protocol.http-listener-1.http.websockets-support-enabled=true |
⑭ WebSocket サンプルアプリケーションの配備
冒頭で示した URL よりサンプルアプリケーションを入手しデプロイしてください。
# asadmin deploy –target cluster1 grizzly-websockets-chat-1.9.26.war |
EJB 3.1 の Singleton はインスタンス単位で有効
皆様、本件につきまして皆様に誤解を与え大変申し訳ございませんでした。
過去、私が Java EE 6 の EJB 3.1 で Singleton クラスについて説明した際、Singleton クラスは異なるJavaVM(クラスタ環境)で1インスタンスを保証すると説明しておりました。このページで説明する資料の P30 など。しかしながら、EJB 3.1 の仕様を改めて確認した所、下記の記載がございました。
JSR 318: Enterprise JavaBeansTM,Version 3.1
4.8 Singleton Session Beans
A Singleton session bean is a session bean component that is instantiated once per application. In cases where the container is distributed over many virtual machines, each application will have one bean instance of the Singleton for each JVM.
当初、GlassFish v3.1 でクラスタを跨ぐ Singleton をサポートする計画で開発が進められていた事を知っていた事もあって上記解釈を間違えてしまいました。
上記の事実は GlassFish v3.1 の EJB の拡張部分について確認していた際、クラスタ環境での Singleton をサポートしないという下記の記載があり気付き、再度上記仕様を確認致しました。
EJB 3.1 Singleton support
No new work is needed to support the EJB 3.1 spec behavior of per-JVM singleton instance creation. We evaluated using the EJB Singleton component as the basis of a new per-cluster Singleton, but the programming model is not a good fit.
GlassFish Issue Tracker
上記 Issue Tracker にも Singleton はクラスタ単位で作成されるのではなくそれぞれのインスタンス(JVM)単位で作成される事が明記されております。
また、この情報は高可用性管理ガイド、アプリケーション開発ガイド、アプリケーション配備ガイドに記載する旨記載されておりました。
本件につきまして私の誤解から間違えた内容を伝えてしまった事を心よりお詫び申し上げます。
旧 Sun 製品の入手先について
旧 Sun のソフトウェア製品の入手についてですが、一部サイトにてリンク切れ等が発生しており、製品を入手できない、もしくはダウンロードサイトまでたどり着けないという方がいらっしゃいます。
例えば、Oracle iPlanet Web Server を入手したい場合、別の製品のダウンロードページへ誘導され入手できないといった事例が発生しています。iPlanet Web Server 等を入手したい方は直接下記のサイトへアクセスして入手してください。下記 URL には旧 Sun 製品への入手先が記載されております。
http://www.oracle.com/technetwork/indexes/downloads/sun-az-index-095901.html
※ 上記 URL もいつ変更されるか分かりませんので、現時点 (2010年10月) でのご対応とご理解ください。
また、このサイトを確認し1点気付いたのですが、旧 Sun のアプリケーションサーバ製品の名前が全て、GlassFish Server に変わっており、バージョン番号の大小と、製品の新しさの目安に不整合が発生しておりました。
具体的には、バージョン番号だけを取り出すと、2.1, 3, 6.5, 7, 8.2, 9.1 と記載されてますが、これらのバージョン番号の大小と、製品の新しさは一致しないのでご注意ください。各製品に対して古いものから順に並び替えすと下記のようになります。
古 | バージョン番号 | 旧製品名 |
↓ | 6.5 | (旧 NetScape Application Server [iPlanet] ) |
↓ | 7.0 | (旧 iPlanet Application Server [Sun One] Java EE 1.3 対応) |
↓ | 8.2 | (旧 Sun One Application Server [Sun Java] Java EE 1.4 対応) |
↓ | 9.1 | (旧 Sun Java System Application Server: Java EE 5 対応) |
↓ | 2.1 | (旧 Sun GlassFish Enterprise Server Java EE 5 対応) |
新 | 3.0 | (旧 Sun GlassFish Enterprise Server Java EE6 対応) |
GlassFish v2.1.1 と GlassFish v3.0.1 の機能比較
GlassFish v2.1とGlassFish v3.0.1の機能比較(英語版)がこちらに記載されていますが、日本語で情報共有したいと思います。
GlassFish v 2.1.1 と v3.0.1 は共に本番環境で今すぐ利用可能なアプリケーションサーバです。またサポートが必要な場合、Oracle から正式サポートを受ける事ができます。
どちらの製品を選択するかは製品が持つ機能/仕様を元に検討して頂きたいのですが、仮に高可用性の機能が必要な場合は、Java EE 5 の仕様に完全準拠した GlassFish v2.1.1を選択してください。また Java EE 6 で開発を行いたい場合、たとえば、Web アプリケーションのかんたん開発(JSF2,Servlet3.0)、EJB 3.1、Webサービス(RESTful/Jersey)、jRuby, Grails, Jython 等のスクリプト言語を使用したい場合は、GlassFish v3.0.1 を選択して頂ければと思います。
また、GlassFish v3.0.1 はパブリッククラウド環境にも今すぐ適用可能で、実際にこれを使用して Amazon EC2 上でサービスを提供開始している企業もあります。下記をご参照ください。
GlassFish v3.0.1 と MySQL を利用し Amazon EC2 上でサービスを提供する事例(海外)
最後に、今年末に提供予定の GlassFish v3.1 では GlassFish v2.1.1 のように高可用性機能も提供される予定ですので、是非楽しみにしていてください。
機能比較 | GlassFish v 2.1.x |
GlassFish v 3.0.x |
リリースされた日程 | v 2.1.1 の リリースは 2009 年 10 月 | v 3.0.1 のリリースは 2010 年 6 月 |
Oracleによる有償サポートの有無 | 有(●) | 有(●) |
マルチプラットフォームのサポート
例:OS JVM : JRockit, HotSpot VM |
v2.1.1で正式サポートされている環境のリストはこちら supported platforms |
v3.0.xで正式サポートされている環境のリストはこちら supported platforms |
サポートするJava EE のバージョン | ||
Java EE 仕様への対応 | Java EE 5 に準拠 | Java EE 6に準拠 (Java EE 5 アプリケーションも動作可能 |
Web Application and Service Technologies | ||
Java Web Technologies |
Servlet 2.5 JSP 2.1, JSF 1.2 |
Servlet 3.0 JSP 2.2, JSF 2.0 |
Metro Web Services Stack |
.NET 3.0 Web サービスとの相互運用 |
.NET 3.5 Web サービスとの相互運用 |
Jersey / JAX-RS (RESTful Web Services) | JAX-RS 1.0 | JAX-RS 1.1 |
管理関連 | ||
GUIの管理コンソールとCLIツールの提供 | 有(●) | 有(●) |
JMXによる管理 | 有(●) | 有(●) |
ノードエージェントとクラスタ管理機能 | 有(●) | 無(X) |
アップグレードツール (更新ツール/updatecenter) |
有 (●) | 有(●) |
RESTful 管理APIの提供 | 無(X) | 有(●) |
Java EE 6 Web Profile 版の提供 | 無(X) | 有(●) |
拡張モニタリング機能 (btrace, dtraceのサポート) |
無(X) | 有(●) |
アプリケーションクライアント | ||
アプリケーションクライアントコンテナの提供 | 有(●) | 有(●) |
Java WebStartのサポート | 有(●) | 有(●) |
Enterprise Application Technologies | ||
Java DB, JDBC Connection Pooling | Java DB 10.4.2.1 | Java DB 10.5.3.0 |
JTA 1.1/JTS 1.0 | 有(●) | 有(●) |
J2EE Connector Architecture | Connectors 1.5 |
Connectors 1.6 |
Enterprise JavaBeans (EJB) | EJB 3.0 |
EJB 3.1 |
JMS 1.1 | 有(●) | 有(●) |
Java Pertistence API (JPA) | JPA 1.0 (TopLink) |
JPA 2.0 (EclipseLink) |
スクリプト言語対応 | ||
jRuby on Rails のWebアーカイブ(.war)の配備が可能 | 有(●) | 有(●) |
ネィティブ jRuby on Rails アプリケーションの配備 (Servlet コンテナ上の動作は不要) |
無(X) | 有(●) |
jRuby のランタイムスレッドプールの動的リサイズ | 無(X) | 有(●) |
Groovy/Grails のサポート | 無(X) | 有(●) [4] |
Jython/Djangoの動作
(現在は v3.01で動作は可能だがOracleによるサポートは未サポート、将来正式サポート予定) |
無(X) | 有(●) [4] |
開発ツール | ||
NetBeans IDE | 有(●)[6] | 有(●)[6] |
Eclipse IDE | 有(●) | 有(●) |
高速再配備−アプリケーション再配備時のセッション情報の保持 | 無(X) | 有(●) |
アップデートセンター(更新ツール) | 有(●) | 有(●) |
アップデートセンターの管理コンソールへの統合 | 無(X) | 有(●) |
Java EEアプリケーションの検証ツール
Appilcation Verification Kit (AVK) |
有(●) | 無(X) |
IPSパッケージツール対応 | 無(X) | 有(●) |
Framework Technologies | ||
Grizzly (Java NIO)の対応バージョン | 1.0.34 | 1.9.18 |
Comet (HTTP Push)のサポート | 有(●) | 有(●) |
CORBAのサポート | 有(●) | 有(●) |
OSGiベースのモジュールアーキテクチャ | 無(X) | 有(●) |
組み込み可能な GlassFish/EJB コンテナのサポート |
無(X) | 有(●) |
管理機能(GUI/CLI)の拡張性 | 無(X) | 有(●) |
システム/パフォーマンス | ||
クラスタリング機能 | 有(●) | 有(●) mod_jk で可能 |
ロードバランサプラグインの提供 | 有(●) | 無(X) |
管理コンソールからのロードバランサプラグイン設定 | 有(●) | 無(X) |
高可用性 | 有(●) | 無(X) |
他技術の統合/連携 | ||
アィデンティティ管理製品、シングルサインオン製品(OpenSSO)、SOA製品(OpenESB)との連携/統合 | 有(●) | 無(X) |
「GlassFish v3 で実感!! エンタープライズ Java の進化」資料公開
Java Hot Topic セミナーのプレゼン資料とデモを公開します。
今回の発表のポイントは、Java EE 6 になり開発が如何に楽になったか、アプリケーションサーバのインストールも起動も如何にかんたんで高速になったのかという点に集中して説明を致しました。原稿は合計 120ページ程ありますが、全てを発表したわけではなく、抜粋して説明しました。特に JPA 2.0 については日本でまだあまり資料がないので参考にして頂けるのではないかと思います。
「GlassFish v3 で実感!! エンタープライズ Java の進化」プレゼン資料 (PDFの入手)
Java Hot Topic セミナー緊急開催決定
今日は Java の勉強会開催に関する緊急告知をいたします。
本セミナーの受付は大変好評につき締め切りました。
ご登録頂いた皆様、誠にありがとうございました。
キャンセル待ちの手順:
件名を「ホットトピックセミナー キャンセル待ち」として本文に 「お名前」「ご所属」をご記入の上、以下までご連絡ください。 Mail: hottopics-seminar-japan@sun.com ※ キャンセル待ちの受付については確認メールはお送りしません。 ※ 空きが出ましたら、個別にメールをお送りします。キャンセル状況 のお問い合わせには対応できませんのでご注意ください。 |
来る 2010 年 5 月 29 日 (今週土曜日) に Java の Hot Topic セミナーを緊急開催する事にしました。今回の Java Hot Topic セミナーはご参加頂いた皆様に、もれなく何らかの Sun ノベルティグッズをプレゼントする予定です。
(例:GlassFish Tシャツ、Java リング、Duke マウス、Sun ノート、Sun 時計等先ほどまで色々と大量に見つけ出してきましたので、かならず何かお渡しできると思います。)
今週末の開催という事で直前のご案内となり誠に申しわけございませんが、どうぞスケジュールをご調整の上ご参加頂ければ幸いです。
発表内容の詳細は後ほど決まり次第ご連絡いたします。
開催概要 | ■ 3時間で学ぶ Java Hot Topic 2010 |
■ 日程 | 2010 年 5 月 29 日 (土) 13:00 開場、13:30 セミナー開始、16:30 頃終了予定 |
発表内容 | 1. クロージャあらため、Project Lambda Java in the Box 主筆 櫻庭 祐一 氏 2.Scala 入門 (仮) 町田 修一 氏 3.GlassFish v3 で実感!!エンタープライズ Java の進化 GlassFish エバンジェリスト 寺田 佳央 4. NetBeans 最新情報 Java エバンジェリスト 片貝 正紀 |
■ 会場 | サン・マイクロシステムズ株式会社 用賀本社27階セミナールーム田園都市線用賀駅改札を出てすぐ右側がSBS ビルの入り口です。ビルと駅は地下でつながっています。エレベーターにて27階まで直接お越しください。 |
■ 費用 | 無料(事前登録制) |
■ 主催 | サン・マイクロシステムズ株式会社 |
■ お申込み | 件名を「ホットトピックセミナー参加」として本文に「お名前」「ご所属」をご記入の上、以下までお申し込み下さい。Mail: hottopics-seminar-japan@sun.com |
今回はできるだけ多くの方に参加していただきたいと考えておりますが、会場規模の都合上、定員になり次第締め切らせていただきます。
一度申し込みをした後仮に、スケジュールの都合上どうしても参加ができなくなった場合、他の方を繰り上げ当選にしたいと考えておりますので、大変恐れ入りますが欠席される際は上記アドレスまで欠席のご連絡を頂けないでしょうか。
最後に余談ではありますが、私にとって「 Sun 」のエンジニアとして最後の発表になるかと思います(会社を辞めるわけではありませんが)。Sun の Java エバンジェリストとして活動して来た数年間を思い出すと色々感慨深いものがありますが、今回は Sun/Java/GlassFish を応援してくださった皆様へ感謝とお礼を込めて開催したいと考えております。
ちなみに、日本では Oracle と正式統合が完了していない為、私の口から今後の Oracle 製品と既存 Sun 製品に関する話題については申し上げる事ができませんので、どうぞご了承ください。
EJB 3.1 の新機能概要
EJB 3.1 の新機能をプレゼン形式でまとめてみました。
かんたんに概要を紹介します。
EJB 3.0 から EJB 3.1 になり、かんたん開発に向けて多くの改善が施されています。まず、パッケージの簡略化が挙げられます。今までアプリケーションの種類に応じて .ear, .war 等のアーカイブにまとめる必要がありましたが、EJB コンポーネントも .war に含めることができるようになったため開発時の手間が大幅に削減されます。また、EJB 3.1 Lite が提供されフル Java EE の機能の一部の機能だけを利用できるようになったため、フル Java EE の機能が必要ないお客様にとっては不要なメモリリソースを消費せずに運用できる等のメリットがあります。
次のポイントはローカルビジネスインタフェースの実装が必要なくなった点です。これは開発者の生産性が向上するだけではなく、修正の手間も大幅に削減してくれます。例えば、過去に実装したクラスにおいて、特定のメソッドに対する引数や返り値の変更が必要になった場合を想定してください。今まではインタフェースのメソッド定義と実装クラスのメソッド定義を両方変更しなければなりませんでしたが、インタフェースの定義が必要がなくなったため、実装クラスのメソッド定義を変更するだけでよくなります。
次に、移植可能な Global JNDI 名では、今までベンダー独自に実装していた Global の JNDI 名が仕様の中で標準化されましたので、今後アプリケーションを他のアプリケーションサーバへ移行したいような場合、Global JNDI 名を変更する必要がなくなり移植性が高まります。
また、Java SE に組み込み可能な EJB コンテナ は開発時におけるテストの手間を大幅に削減してくれるようになります。今までは EJB のアプリケーションをテストする際、アプリケーションサーバにデプロイして Global 経由でアクセスする等の必要がありました。これは別の Java VM のプロセスとして稼働するためデバッグ等も困難でしたが、EJB 3.1 では Java SE のプロセス内に EJB コンテナをロードして実行する事ができるようになるため、同一 Java プロセス内で処理ができる他、EJB の単体テスト等がしやすくなります。
その他の追加機能として、Singleton Session Beans が追加された事が挙げられます。これはアプリケーション間で同一の情報を扱いたい場合に有効です。今までは独自に Singleton のクラスを作成して運用しなければなりませんでしたが、クラスタ環境のように複数台で実現するためには苦労していたかと思います。なぜなら異なる JVM プロセスの間で Sigleton のインスタンスを共有させる事は面倒だったからです。しかしEJB 3.1で提供する Singleton Session Bean はコンテナを跨ぐ環境においても唯一のインスタンスが保障されるため、こういった実装の手間が必要なく、アノテーションの追加だけで利用できるようになります。その他、タイマーサービスや非同期処理もそれぞれアノテーションを利用して簡単に実装できるようになっています。
最後に、
EJB といえば実装が難しい、設定も面倒という時代は今や過去の事で、今では実装がとてもかんたんになっています。また便利な機能をデフォルトで数多く持っている便利なフレームワークですので、今一度EJB を見直し利用をご検討ください。
GlassFish の今後のロードマップ
GlassFish の今後のロードマップが発表されています。発表資料
この資料中では、直近でリリース予定の GlassFish v2.1.1, v3.0.1の他、GlassFish v3.1 、v3.2 、v4 についても触れらてています。
この資料の中で特に興味深いのは、GlassFish v4 という名前が初登場した事で、次期 Java EE である Java EE 7 に対応する製品になるようです。資料中に記載されているスケジュールはあくまでも予定ですので(今までの経験から)今後変更される事が予想できますが、今後も GlassFish が継続してオープンソースのアプリケーションサーバとして提供されていく事をご確認いただけるかと思います。
ぜひ、この資料をご確認ください。