Archive for 2012年10月20日
GlassFIsh v3.1.2.2でJSF 2.2を試す方法
現在、GlassFish の最新バージョンは Java EE 6 に準拠した GlassFish v3.1.2.2 です (2012 年 10 月 20 日時点)。
来年の春頃に Java EE 7 が正式にリリースされますが、Java EE 7 に含まれる JSF 2.2 の新機能をいち早く試したい方は GlassFish v3.1.2.2 の環境に対して、下記の手順に従っていただく事で環境を構築する事ができます。
※ ただし、ここでご紹介する内容はあくまでも Java EE 7 の正式リリース前に、事前検証を目的としてのみご使用ください。本番環境への適用は決してなさらないでください。
1. まず始めに、下記のサイトにアクセスしてください。
https://maven.java.net/
2. サイトにアクセスすると下記の画面が表示されます。
検索フィールドに下記の文字列を入力して検索を実行してください。
org.glassfish:javax.faces:2.2.0-SNAPSHOT

3. 検索を実行すると下記の結果が得られます。
ここで、javax.faces-2.2.0-SNAPSHOT.jarを選択し、下右画面のタブよりArtifact Information を選択します。

4. タブを選択すると下記の画面が表示されます。
ここで、Download ボタンを押下してください。

5. ボタンを押下すると JSF 2.2 の SNAPSHOT が入手できます。
ダウンロードファイル:javax.faces-2.2.0-20121018.092111-181.jar
6. ダウンロードが完了すると、GlassFish v3.1.2.2 に含まれる JSF 2.1 を JSF 2.2 に置き換えます。
| # pwd (GlassFish のモジュールの配置場所) $GF_INSTALL/glassfish-3.1.2.2/glassfish/modules ($GF_INSTALL はインストールした場所) # mv javax.faces.jar .. (JSF 2.1 のバックアップ) # mv ~/Downloads/javax.faces-2.2.0-20121018.092111-181.jar ./javax.faces.jar (JSF 2.2 に置き換え) |
7. GlassFish を再起動してください。
起動時の server.log ログを確認すると正しく更新されている場合、下記のようにMojarra 2.2.0 (-SNAPSHOT 20121018-0139)という文字列が表示されているかと思います。
| 情報: Grizzly Framework 1.9.50 started in: 1ms – bound to [0.0.0.0:8181] 情報: Initiating Jersey application, version ‘Jersey: 1.11.1 03/31/2012 06:49 PM’ 情報: REST00001: Listening to REST requests at context: /management/domain 情報: The Admin Console is already installed, but not yet loaded. 情報: The Admin Console is starting. Please wait. 情報: JMX005: JMXStartupService had Started JMXConnector on JMXService URL service:jmx:rmi://192.168.11.5:8686/jndi/rmi://192.168.11.5:8686/jmxrmi 情報: ?????? ” ? Mojarra 2.2.0 (-SNAPSHOT 20121018-0139) ??????? |
8. 実際に JSF 2.2 のコードが動くか確認してみましょう。
Maven プロジェクトの場合、pom.xml に下記の2項目を追加してください。
<repositories>
<repository>
<id>jvnet-nexus-snapshots</id>
<name>jvnet-nexus-snapshots</name>
<url>https://maven.java.net/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
............
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
9. CDI を利用する場合、WEB-INF 配下に bean.xml ファイルを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_0.xsd">
</beans>
10. JSF 2.2 対応のページを作成 (ファイルアップロード用のタグ:<h:inputFile>)
<?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:form prependId="false" enctype="multipart/form-data">
<h:inputFile id="fileUpload" value="#{test.upfile}"/>
<h:commandButton value="upload" action="#{test.doUpload}"/>
</h:form>
</h:body>
</html>
11. CDI のバッキング Bean の作成
import java.io.IOException;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.servlet.http.Part;
@Named(value = "test")
@RequestScoped
public class TestManagedBean {
private Part upfile;
public Part getUpfile() {
return upfile;
}
public void setUpfile(Part upfile) {
this.upfile = upfile;
}
public TestManagedBean() {
}
public String doUpload() {
try {
String fileName = getFilename(upfile);
upfile.write(fileName);
} catch (IOException ex) {
ex.printStackTrace();
}
return "";
}
private String getFilename(Part part) {
for (String cd : part.getHeader("Content-Disposition").split(";")) {
if (cd.trim().startsWith("filename")) {
return cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
}
}
アプリケーションを実行すると、指定したファイルがサーバ側で保存されている事を確認できます。
これで、JSF 2.2 の検証環境ができましたので、JSF 2.2 の新機能を試したい方は上記の方法に従って検証してみてください。まだ開発が進行中の物ですので、機能不足や信頼性に掛けますが、実際にコードを書きながら試す事ができるようになるため有用かと思います。
