<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>寺田　佳央 - Yoshio Terada</title>
	<atom:link href="http://yoshio3.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://yoshio3.com</link>
	<description>GlassFish Web Server Java</description>
	<lastBuildDate>Thu, 11 Mar 2010 13:48:40 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='yoshio3.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/759d6ca62cbc626125def86454247b76?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>寺田　佳央 - Yoshio Terada</title>
		<link>http://yoshio3.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://yoshio3.com/osd.xml" title="寺田　佳央 &#8211; Yoshio Terada" />
	<atom:link rel='hub' href='http://yoshio3.com/?pushpress=hub'/>
		<item>
		<title>Servlet 3.0 File Upload 機能</title>
		<link>http://yoshio3.com/2010/03/11/servlet-3-0-file-upload-%e6%a9%9f%e8%83%bd/</link>
		<comments>http://yoshio3.com/2010/03/11/servlet-3-0-file-upload-%e6%a9%9f%e8%83%bd/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:33:43 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=735</guid>
		<description><![CDATA[Servlet&#160;3.0&#160;ではマルチパートデータを扱う事ができるようになったため、とても簡単にファイルアップロード機能を実現できます。
(表示用 HTML)
&#60;html&#62;
&#160;&#160;&#160;&#160;&#60;head&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;meta&#160;http-equiv=&#8221;Content-Type&#8221;&#160;content=&#8221;text/html;&#160;charset=UTF-8&#8243;&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;title&#62;JSP&#160;Page&#60;/title&#62;
&#160;&#160;&#160;&#160;&#60;/head&#62;
&#160;&#160;&#160;&#160;&#60;body&#62;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;FORM&#160;action=&#8221;/FileUpload/MyFileUpload&#8221;&#160;enctype=&#8221;multipart/form-data&#8221;&#160;method=&#8221;POST&#8221;&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;アップロードするファイル名:&#160;&#60;INPUT&#160;type=&#8221;file&#8221;&#160;name=&#8221;content&#8221;&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;INPUT&#160;type=&#8221;submit&#8221;&#160;value=&#8221;Submit&#8221;&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/FORM&#62;
&#160;&#160;&#160;&#160;&#60;/body&#62;
&#60;/html&#62;
アップロードしたファイル名を取得するためには、getFilename()&#160;メソッドで実装しているように、ヘッダ：Content-Disposition&#160;の内容を取得しファイル名を抽出します。Content-Disposition&#160;ヘッダは下記のような値を含みますので、filename&#160;の部分を取得します。
Content-Disposition: form-data;&#160;name=&#8221;content&#8221;;&#160;filename=&#8221;FILE_NAME&#8221;

また、@MultipartConfig&#160;のアノテーションを使用して、アップロードするファイルの上限や、配置場所等を設定します。
import&#160;java.io.IOException;
import&#160;java.io.PrintWriter;
import&#160;javax.servlet.ServletException;
import&#160;javax.servlet.annotation.MultipartConfig;
import&#160;javax.servlet.annotation.WebServlet;
import&#160;javax.servlet.http.HttpServlet;
import&#160;javax.servlet.http.HttpServletRequest;
import&#160;javax.servlet.http.HttpServletResponse;
import&#160;javax.servlet.http.Part;
@WebServlet(name=&#8221;MyFileUpload&#8221;,&#160;urlPatterns={&#8220;/MyFileUpload&#8221;})
@MultipartConfig(fileSizeThreshold=5000000,maxFileSize=10000000,location=&#8221;/tmp&#8221;)
public&#160;class&#160;MyFileUpload&#160;extends&#160;HttpServlet&#160;{
&#160;&#160;&#160;
&#160;&#160;&#160;&#160;protected&#160;void&#160;processRequest(HttpServletRequest&#160;request,&#160;HttpServletResponse&#160;response)
&#160;&#160;&#160;&#160;throws&#160;ServletException,&#160;IOException&#160;{

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;&#60;INPUT&#160;type=&#8221;file&#8221;&#160;name=&#8221;content&#8221;&#62;&#160;で指定した名前より取得
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Part&#160;part&#160;=&#160;request.getPart(&#8220;content&#8221;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ファイル名の取得
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;String&#160;name&#160;=&#160;getFilename(part);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ファイルの保存&#160;@MultipartConfig(location=&#8221;/tmp&#8221;)&#160;で設定した
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;ディレクトリ配下に保存される。
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;part.write(name);

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;PrintWriter&#160;out&#160;=&#160;response.getWriter();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.println(&#8220;&#60;HTML&#62;&#60;BODY&#62;&#8221;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.println(&#8220;File&#160;:&#160;&#8221;&#160;+&#160;name&#160;+&#160;&#8221;&#160;is&#160;update&#160;successful&#8221;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.println(&#8220;&#60;/BODY&#62;&#60;/HTML&#62;&#8221;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.flush();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.close();
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;@Override
&#160;&#160;&#160;&#160;public&#160;void&#160;doPost(HttpServletRequest&#160;request,&#160;HttpServletResponse&#160;response)
&#160;&#160;&#160;&#160;throws&#160;IOException,&#160;ServletException{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;processRequest(request,response);
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;private&#160;String&#160;getFilename(Part&#160;part)&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for&#160;(String&#160;cd&#160;:&#160;part.getHeader(&#8220;Content-Disposition&#8221;).split(&#8220;;&#8221;))&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(cd.trim().startsWith(&#8220;filename&#8221;))&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;cd.substring(cd.indexOf(&#8216;=&#8217;)&#160;+&#160;1).trim().replace(&#8220;\&#8221;",&#160;&#8221;");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;null;
&#160;&#160;&#160;&#160;}
}
簡単なメモ書き程度ですが、簡単にファイルアップロード機能を実装できる事が
お分かり頂けるかと思います。
本当は、Async&#160;Servlet&#160;を使って時間のかかるアップロード処理を非同期で
実現するコードも紹介したいのですが、一部動作がおかしく調査中ですので、
後日うまくいけば、ここに追記します。
カテゴリー:未分類       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=735&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Servlet&nbsp;3.0&nbsp;ではマルチパートデータを扱う事ができるようになったため、とても簡単にファイルアップロード機能を実現できます。</p>
<p>(表示用 HTML)<br />
<TABLE BORDER="1" WIDTH="512"><TR><TD>&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;http-equiv=&#8221;Content-Type&#8221;&nbsp;content=&#8221;text/html;&nbsp;charset=UTF-8&#8243;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;JSP&nbsp;Page&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />
<B><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;FORM&nbsp;action=&#8221;/FileUpload/MyFileUpload&#8221;&nbsp;enctype=&#8221;multipart/form-data&#8221;&nbsp;method=&#8221;POST&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;アップロードするファイル名:&nbsp;&lt;INPUT&nbsp;type=&#8221;file&#8221;&nbsp;name=&#8221;content&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;INPUT&nbsp;type=&#8221;submit&#8221;&nbsp;value=&#8221;Submit&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/FORM&gt;</B><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</TD></TR></TABLE></p>
<p>アップロードしたファイル名を取得するためには、getFilename()&nbsp;メソッドで実装しているように、ヘッダ：Content-Disposition&nbsp;の内容を取得しファイル名を抽出します。Content-Disposition&nbsp;ヘッダは下記のような値を含みますので、filename&nbsp;の部分を取得します。</p>
<p><TABLE BORDER="1" WIDTH="512"><TR><TD>Content-Disposition: form-data;&nbsp;name=&#8221;content&#8221;;&nbsp;<B>filename=&#8221;FILE_NAME&#8221;</B><br />
</TD></TR></TABLE></p>
<p>また、@MultipartConfig&nbsp;のアノテーションを使用して、アップロードするファイルの上限や、配置場所等を設定します。</p>
<p><TABLE BORDER="1" WIDTH="512"><TR><TD>import&nbsp;java.io.IOException;<br />
import&nbsp;java.io.PrintWriter;<br />
import&nbsp;javax.servlet.ServletException;<br />
import&nbsp;javax.servlet.annotation.MultipartConfig;<br />
import&nbsp;javax.servlet.annotation.WebServlet;<br />
import&nbsp;javax.servlet.http.HttpServlet;<br />
import&nbsp;javax.servlet.http.HttpServletRequest;<br />
import&nbsp;javax.servlet.http.HttpServletResponse;<br />
import&nbsp;javax.servlet.http.Part;</p>
<p>@WebServlet(name=&#8221;MyFileUpload&#8221;,&nbsp;urlPatterns={&#8220;/MyFileUpload&#8221;})<br />
<B>@MultipartConfig(fileSizeThreshold=5000000,maxFileSize=10000000,location=&#8221;/tmp&#8221;)</B><br />
public&nbsp;class&nbsp;MyFileUpload&nbsp;extends&nbsp;HttpServlet&nbsp;{<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;processRequest(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
<B><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&lt;INPUT&nbsp;type=&#8221;file&#8221;&nbsp;name=&#8221;content&#8221;&gt;&nbsp;で指定した名前より取得<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Part&nbsp;part&nbsp;=&nbsp;request.getPart(&#8220;content&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ファイル名の取得<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;getFilename(part);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ファイルの保存&nbsp;@MultipartConfig(location=&#8221;/tmp&#8221;)&nbsp;で設定した<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ディレクトリ配下に保存される。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part.write(name);<br />
</B><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(&#8220;&lt;HTML&gt;&lt;BODY&gt;&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(&#8220;File&nbsp;:&nbsp;&#8221;&nbsp;+&nbsp;name&nbsp;+&nbsp;&#8221;&nbsp;is&nbsp;update&nbsp;successful&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(&#8220;&lt;/BODY&gt;&lt;/HTML&gt;&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;IOException,&nbsp;ServletException{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processRequest(request,response);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;getFilename(Part&nbsp;part)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;cd&nbsp;:&nbsp;part.getHeader(&#8220;Content-Disposition&#8221;).split(&#8220;;&#8221;))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cd.trim().startsWith(&#8220;filename&#8221;))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;cd.substring(cd.indexOf(&#8216;=&#8217;)&nbsp;+&nbsp;1).trim().replace(&#8220;\&#8221;",&nbsp;&#8221;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</TD></TR></TABLE></p>
<p>簡単なメモ書き程度ですが、簡単にファイルアップロード機能を実装できる事が<br />
お分かり頂けるかと思います。</p>
<p>本当は、Async&nbsp;Servlet&nbsp;を使って時間のかかるアップロード処理を非同期で<br />
実現するコードも紹介したいのですが、一部動作がおかしく調査中ですので、<br />
後日うまくいけば、ここに追記します。</p>
<br />カテゴリー:<a href='http://yoshio3.com/category/%e6%9c%aa%e5%88%86%e9%a1%9e/'>未分類</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/735/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/735/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/735/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/735/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/735/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/735/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/735/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/735/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/735/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/735/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=735&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/03/11/servlet-3-0-file-upload-%e6%a9%9f%e8%83%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>
	</item>
		<item>
		<title>ここから始める Java EE 6</title>
		<link>http://yoshio3.com/2010/02/26/%e3%81%93%e3%81%93%e3%81%8b%e3%82%89%e5%a7%8b%e3%82%81%e3%82%8b-java-ee-6-2/</link>
		<comments>http://yoshio3.com/2010/02/26/%e3%81%93%e3%81%93%e3%81%8b%e3%82%89%e5%a7%8b%e3%82%81%e3%82%8b-java-ee-6-2/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 06:33:12 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[Application Server/GlassFish]]></category>
		<category><![CDATA[GlassFish]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=713</guid>
		<description><![CDATA[2009年12月に Java EE 6 がリリースされて、約３ヶ月経ちました。Java EE 6 にはかなり多くの改善がみられますが、どこから始めればいいのかわからない方に、JSF2,JPA2,EJB 3.1を使ったかんたんな Java EE 6 アプリケーションの書き方を紹介します。
Java EE 6 には非常にたくさんの技術が含まれているので一度に全てを理解することは大変だと思いますが、まずはこのサンプルを通じて、JSF,JPA,EJB にどのような変更が加わったのか、またどのような点が楽になったのか等を理解して頂ければと思います。



開発／実行環境：
開発環境：NetBeans 6.8
実行環境：Oracle GlassFish Server v3



（上記は別途インストールしておいてください。）
サンプルアプリケーションの概要：
コードを書く前にこれから作成するサンプルアプリケーションの概要について説明します。このアプリケーションはとても簡単なアプリケーションでユーザ（データ）を登録して参照するだけという、いたってかんたんなアプリケーションです。また処理フローもとてもシンプルです。

アプリケーションの完成予想イメージは下記です。ユーザ登録画面で「作成」ボタンを押下しデータを登録した後、一覧表示画面が表示されます。また一覧表示画面中の「新規作成」のリンクを押下すると登録画面に遷移します。

１．新規プロジェクトの作成
それでは早速プロジェクトを作成していきます。今回作成するアプリケーションは、EJBを含んでいますが新規プロジェクトの作成時「Web アプリケーション」を選択して作成することにします。



補足：
Java EE 6 におけるパッケージ構成の変更点を紹介します。過去の Java EE のバージョンでは下記のように EJB を ear にまとめたり、JSF/Servlet 等を war にまとめたりといったようにパッケージ構成が面倒でした。Java EE 6 からはこのようなパッケージ化の必要はなくなり、EJB も war に含めてデプロイできるようになりました。






それでは、メニューから「ファイル」→「新規プロジェクト(W)…」→「Java Web」→「Web アプリケーション」を選択し、「次へ＞」ボタンを押下してください。

プロジェクト名に「PersonManagement」を入力し「次へ＞」ボタンを押下します。

次に、「サーバと設定」で配備するアプリケーションサーバとJava EE のバージョンを選択します。ここでは、「GlassFish v3 ドメイン」と「Java EE 6 Web」を選択し「次へ＞」ボタンを押下します。

次に、使用するフレームワークを選択します。今回は、「JavaServer Fcaces」を使用しますのでこれにチェックを付け「完了(F)」ボタンを押下します。

プロジェクトを作成すると下記のような画面が表示されます。

２． JPA 2.0：Entity Bean の作成
新規プロジェクトを作成後、Entity [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=713&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>2009年12月に Java EE 6 がリリースされて、約３ヶ月経ちました。Java EE 6 にはかなり多くの改善がみられますが、どこから始めればいいのかわからない方に、JSF2,JPA2,EJB 3.1を使ったかんたんな Java EE 6 アプリケーションの書き方を紹介します。</p>
<p>Java EE 6 には非常にたくさんの技術が含まれているので一度に全てを理解することは大変だと思いますが、まずはこのサンプルを通じて、JSF,JPA,EJB にどのような変更が加わったのか、またどのような点が楽になったのか等を理解して頂ければと思います。</p>
<table border="1">
<tbody>
<tr>
<td>開発／実行環境：<br />
開発環境：NetBeans 6.8<br />
実行環境：Oracle GlassFish Server v3</td>
</tr>
</tbody>
</table>
<p>（上記は別途インストールしておいてください。）</p>
<h2>サンプルアプリケーションの概要：</h2>
<p>コードを書く前にこれから作成するサンプルアプリケーションの概要について説明します。このアプリケーションはとても簡単なアプリケーションでユーザ（データ）を登録して参照するだけという、いたってかんたんなアプリケーションです。また処理フローもとてもシンプルです。</p>
<p><a href="http://farm3.static.flickr.com/2716/4387372234_59d91e8709_o.png"><img title="サンプルアプリケーションの処理フロー" src="http://farm3.static.flickr.com/2716/4387372234_99c6ec3a79.jpg" alt="サンプルアプリケーションの処理フロー" width="375" height="196" /></a></p>
<p>アプリケーションの完成予想イメージは下記です。ユーザ登録画面で「作成」ボタンを押下しデータを登録した後、一覧表示画面が表示されます。また一覧表示画面中の「新規作成」のリンクを押下すると登録画面に遷移します。</p>
<p><img title="サンプルアプリケーションの完成イメージ" src="http://farm5.static.flickr.com/4043/4386609853_50e184f4bb_o.png" alt="サンプルアプリケーションの完成イメージ" width="436" height="208" /></p>
<h2>１．新規プロジェクトの作成</h2>
<p>それでは早速プロジェクトを作成していきます。今回作成するアプリケーションは、EJBを含んでいますが新規プロジェクトの作成時「Web アプリケーション」を選択して作成することにします。</p>
<table border="1" bgcolor="GRAY">
<tbody>
<tr>
<td><span style="color:white;">補足：<br />
Java EE 6 におけるパッケージ構成の変更点を紹介します。過去の Java EE のバージョンでは下記のように EJB を ear にまとめたり、JSF/Servlet 等を war にまとめたりといったようにパッケージ構成が面倒でした。Java EE 6 からはこのようなパッケージ化の必要はなくなり、EJB も war に含めてデプロイできるようになりました。</p>
<p><a href="http://farm5.static.flickr.com/4055/4386609663_1b3c881cd6_o.png"><img title="パッケージの簡略化" src="http://farm5.static.flickr.com/4055/4386609663_8de10a5c23.jpg" alt="パッケージの簡略化" width="375" height="280" /></a><br />
</span></td>
</tr>
</tbody>
</table>
<p><span></span><br />
それでは、メニューから「ファイル」→「新規プロジェクト(W)…」→「Java Web」→「Web アプリケーション」を選択し、「次へ＞」ボタンを押下してください。</p>
<p><a href="http://farm5.static.flickr.com/4061/4387371496_8635dda665_o.png"><img title="新規プロジェクトの作成" src="http://farm5.static.flickr.com/4061/4387371496_939e506cef.jpg" alt="新規プロジェクトの作成" width="500" height="345" /></a></p>
<p>プロジェクト名に「PersonManagement」を入力し「次へ＞」ボタンを押下します。</p>
<p><a href="http://farm5.static.flickr.com/4018/4386609217_280471ee85_o.png"><img title="新規プロジェクト作成" src="http://farm5.static.flickr.com/4018/4386609217_d95e3abdbd.jpg" alt="新規プロジェクト作成" width="500" height="280" /></a></p>
<p>次に、「サーバと設定」で配備するアプリケーションサーバとJava EE のバージョンを選択します。ここでは、「GlassFish v3 ドメイン」と「Java EE 6 Web」を選択し「次へ＞」ボタンを押下します。</p>
<p><a href="http://farm3.static.flickr.com/2801/4387371578_d881500f9e_o.png"><img title="稼働サーバとフレームワークの選択" src="http://farm3.static.flickr.com/2801/4387371578_fa4474d953.jpg" alt="稼働サーバとフレームワークの選択" width="500" height="280" /></a></p>
<p>次に、使用するフレームワークを選択します。今回は、「JavaServer Fcaces」を使用しますのでこれにチェックを付け「完了(F)」ボタンを押下します。</p>
<p><a href="http://farm3.static.flickr.com/2792/4386609291_6cf11359ca_o.png"><img title="フレームワークの選択" src="http://farm3.static.flickr.com/2792/4386609291_cca7d30341.jpg" alt="フレームワークの選択" width="500" height="280" /></a></p>
<p>プロジェクトを作成すると下記のような画面が表示されます。</p>
<p><a href="http://farm5.static.flickr.com/4033/4387371682_2b76c4570a_o.png"><img title="プロジェクト作成完了" src="http://farm5.static.flickr.com/4033/4387371682_243467ab86.jpg" alt="プロジェクト作成完了" width="500" height="332" /></a></p>
<h2>２． JPA 2.0：Entity Bean の作成</h2>
<p>新規プロジェクトを作成後、Entity Bean を作成します。Java EE 5 から Entity CMP 2.x に代わり JPA 1.0 が登場し、DBに対する持続性のコード記述がかなり楽になりました。JPA 2.0 ではさらに扱いやすくなり、機能面でも改善が施されています。（JPA 2.0 の新機能の詳細は別途記載する予定です。また今回はとても簡単なサンプルのためJAP 2.0の新機能はあまり使用していません。JPA 1.0と同等レベルの記述内容）</p>
<p>それでは、実際に Entity Bean を作成してみましょう。メニューから「ファイル」→「新規ファイル(N)…」→「持続性」を選択してください。</p>
<p>NetBeans を利用すると既存のデータベースのテーブルから Entity クラスを自動的に生成する事ができます。既に DB テーブルを作成している場合は「データベースからのエンティティークラス」を選択して作成してください。NetBeans を使う上で、この機能は大変便利です。私も普段は先に DB のテーブルを作成して、Entity クラスは NetBeans で自動生成しますので一から Entity クラスを作成する事はあまりしません。是非お試しください。</p>
<p>今回、私は DB のテーブルが作成されていない状態で新規にエンティティークラスを生成しますので「エンティティークラス」を選択し「次へ＞」ボタンを押下します。この方法では、エンティティークラスを先に作成した後、エンティティクラスに該当するテーブルを DB 上に後から構築します（Entity クラスを元にテーブルを自動生成することもできます）。</p>
<p><a href="http://farm5.static.flickr.com/4051/4387371716_03dab5379c_o.png"><img title="エンティティークラスの作成" src="http://farm5.static.flickr.com/4051/4387371716_070ef86ef8.jpg" alt="エンティティークラスの作成" width="500" height="345" /></a></p>
<p>ここで新しいエンティティークラス名「Person」、パッケージ名「ent」を入力します。「主キー型」はこのテーブルの主キーの型を選択します。Person を ID で管理しますので、そのまま、「Long」型を設定します。</p>
<p><a href="http://farm5.static.flickr.com/4042/4386609403_ebb3d06991_o.png"><img title="エンティティクラスの作成" src="http://farm5.static.flickr.com/4042/4386609403_f35a2c9768.jpg" alt="エンティティクラスの作成" width="500" height="345" /></a></p>
<p>「完了(F)」ボタンを押下する前に１点注意してください。ワーニングで「プロジェクトに持続性ユニットがありません。エンティティークラスを持続さ…」というメッセージが表示されています。これはこのエンティティクラスに対する持続性ユニットが存在していない事を意味しています。そこで「持続性ユニットを作成…」ボタンを押下し、このエンティティクラスに紐づく持続性ユニットを作成します。ボタンを押下すると下記の画面が表示されます。</p>
<p><a href="http://farm5.static.flickr.com/4034/4386609437_dca07c0f69_o.png"><img title="持続性ユニットの作成" src="http://farm5.static.flickr.com/4034/4386609437_3ca1fc865b.jpg" alt="持続性ユニットの作成" width="500" height="317" /></a></p>
<p>持続性プロバイダとして JPA 2.0 の参照実装である「EclipseLink(JPA 2.0)(デフォルト)」と、データソースを選択します。また表生成の方針ですが、「作成」を選択すると自動的に DB にテーブルを作成します。全ての入力が完了した後、最後に「作成」ボタンを押下します。<br />
この時、後のプログラミング時に使用しますので、入力した持続性ユニット名（PersonManagementPU）を覚えておいてください。</p>
<p>「作成」ボタンを押下すると、「新規エンティティ作成画面」に戻ってきますが、持続性ユニットに関するワーニングが消えたことを確認した後、最後に「完了(F)」ボタンを押下してください。ボタンを押下すると入力された情報を元に ID のみを持つ Person エンティティのひな形が自動生成されます。また同時に、構成ファイル配下に、持続性ユニットの設定ファイル persistence.xmlが自動生成されます。</p>
<p>作成された Entity クラス(Person)のひな形を編集していきます。</p>
<p>ソースコードを確認すると @Entity のアノテーションが自動的に付加されている事に気づきます。このアノテーションを付加することによりコンパイラや、EJB コンテナが本クラスをエンティティクラスと解釈してくれるようになります。</p>
<p>名前、住所、電話番号、年齢をあつかえるようにフィールドを追加し、それぞれに対するセッタ、ゲッタメソッドを記載してください。また、@NamedQuery で JPQL を記載し、DBに登録されている全ての Person を取得できるようにします。</p>
<table border="1">
<tbody>
<tr>
<td>package&nbsp;ent;<br />
import&nbsp;java.io.Serializable;<br />
import&nbsp;javax.persistence.Column;<br />
import&nbsp;javax.persistence.Entity;<br />
import&nbsp;javax.persistence.GeneratedValue;<br />
import&nbsp;javax.persistence.GenerationType;<br />
import&nbsp;javax.persistence.Id;<br />
import&nbsp;javax.persistence.NamedQuery;</p>
<p>@Entity<br />
@NamedQuery(name=&#8221;findAllPerson&#8221;,&nbsp;query=&#8221;SELECT&nbsp;p&nbsp;FROM&nbsp;Person&nbsp;p&#8221;)<br />
public&nbsp;class&nbsp;Person&nbsp;implements&nbsp;Serializable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;long&nbsp;serialVersionUID&nbsp;=&nbsp;1L;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;=&nbsp;GenerationType.AUTO)<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Long&nbsp;id;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Column(nullable=false,length=256)<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;name;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Column(nullable=false,length=256)<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;address1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Column(nullable=false,length=12)<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;telephone;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Column(nullable=false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Long&nbsp;age;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Long&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setId(Long&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;hashCode()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;hash&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash&nbsp;+=&nbsp;(id&nbsp;!=&nbsp;null&nbsp;?&nbsp;id.hashCode()&nbsp;:&nbsp;0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hash;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;equals(Object&nbsp;object)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!(object&nbsp;instanceof&nbsp;Person))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;other&nbsp;=&nbsp;(Person)&nbsp;object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((this.id&nbsp;==&nbsp;null&nbsp;&amp;&amp;&nbsp;other.id&nbsp;!=&nbsp;null)&nbsp;||&nbsp;(this.id&nbsp;!=&nbsp;null&nbsp;&amp;&amp;&nbsp;!this.id.equals(other.id)))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;toString()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#8221;entity.Person[id="&nbsp;+&nbsp;id&nbsp;+&nbsp;"]&#8220;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getAddress1()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;address1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAddress1(String&nbsp;address1)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.address1&nbsp;=&nbsp;address1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getTelephone()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;telephone;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setTelephone(String&nbsp;telephone)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.telephone&nbsp;=&nbsp;telephone;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Long&nbsp;getAge()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAge(Long&nbsp;age)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>以上で、このサンプルアプリケーションに必要なエンティティクラスはできました。</p>
<h2>３．EJB 3.1：ステートレスセッション Bean の作成</h2>
<p>エンティティクラスを生成したので、次に EJB (ステートレス・セッション Bean) を作成します。「ファイル」→「新規ファイル(N)…」→「Java EE」→「セッション Bean」を選択し、「次へ＞」ボタンを押下してください。</p>
<p><a href="http://farm5.static.flickr.com/4014/4386609481_fdee49cab3_o.png"><img title="EJB セッション Bean の作成" src="http://farm5.static.flickr.com/4014/4386609481_d265ee31c9.jpg" alt="EJB セッション Bean の作成" width="500" height="345" /></a></p>
<p>ボタンを押下すると下記の画面が表示されます。ここで「EJB 名(N)」、「パッケージ(K)」を入力し「完了(F)」ボタンを押下します。</p>
<p><a href="http://farm5.static.flickr.com/4015/4386609511_72bed28a52_o.png"><img title="ステートレスセッション Bean の作成" src="http://farm5.static.flickr.com/4015/4386609511_c83e412d8e.jpg" alt="ステートレスセッション Bean の作成" width="500" height="345" /></a></p>
<table border="1" bgcolor="GRAY">
<tbody>
<tr>
<td><span style="color:white;">補足：<br />
上記画面を確認するとローカルインタフェース、リモートインタフェースが選択できるようになっています。<br />
EJB 3.1 からローカルインタフェースがオプション化されインタフェースを作成する必要がなくなりました。EJB 3.0 では下記の例のようにインタフェースを定義し、それを実装しなければなりませんでしたが、EJB 3.1 からはアノテーションを付加するだけでコンテナが理解してくれるようになります。</p>
<p>EJB 3.0 でのローカルインタフェースの実装例</p>
<p><img title="EJB 3.0" src="http://farm5.static.flickr.com/4069/4387372066_d7bb3f0d1b.jpg" alt="EJB 3.0" width="375" height="280" /></p>
<p>実際にコードで書くと下記のようになります。</p>
<table border="1" bgcolor="GRAY">
<tbody>
<tr>
<td><span style="color:white;">1:  public interface Hello {<br />
2:  　　public String sayHello();<br />
3:  }<br />
4:<br />
5:  @Stateless<br />
6:  public class HelloBean implements Hello {<br />
7:  　　public String sayHello() { return &#8220;hello&#8221;; }<br />
8:  }</p>
<p>EJB の利用時<br />
1:  @EJB Hello helloRef;<br />
2:  &#8230;<br />
3:  helloRef.sayHello();</span></td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>これが、EJB 3.1 では下記のようにインタフェースを定義する必要はなくなります。</p>
<p style="text-align:center;">
<p><img title="EJB 3.1" src="http://farm5.static.flickr.com/4003/4387372112_465d84a623.jpg" alt="EJB 3.1" width="375" height="280" /></p>
<p>EJB 3.1 を利用する時のコードは下記となります。</p>
<p><img title="EJB 3.1" src="http://farm5.static.flickr.com/4018/4387372136_dafbfa7429.jpg" alt="EJB 3.1" width="375" height="280" /><br />
</span>
</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>それではコードを編集していきましょう。今回は、データの検索と追加を行いますので、それぞれの処理を行う２つのメソッドを実装しています。まず、@PersistenceContextのアノテーションで、（JPA Entity クラスを作成した時に作成した持続性ユニット名。persistence.xml に記載されている。）持続性ユニット名(&#8220;PersonManagementPU&#8221;)を記載します。これにより持続機能を持った EntityManager のオブジェクト(em)がセットされます。</p>
<table border="1">
<tbody>
<tr>
<td>package&nbsp;pejb;</p>
<p>import&nbsp;ent.Person;<br />
import&nbsp;java.util.List;<br />
import&nbsp;javax.ejb.Stateless;<br />
import&nbsp;javax.persistence.EntityManager;<br />
import&nbsp;javax.persistence.PersistenceContext;<br />
import&nbsp;javax.persistence.Query;</p>
<p>@Stateless<br />
public&nbsp;class&nbsp;PersonEJB&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@PersistenceContext(unitName=&#8221;PersonManagementPU&#8221;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;EntityManager&nbsp;em;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;Person&gt;&nbsp;findAllPersons(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Entity(Person)クラスの&nbsp;@NamedQuery&nbsp;の記載に基づき検索<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;=&nbsp;em.createNamedQuery(&#8220;findAllPerson&#8221;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(List&lt;Person&gt;)&nbsp;query.getResultList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Person&nbsp;createPerson(Person&nbsp;person){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;em.persist(person);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}
</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h2>４．JSF：Managed Bean の作成</h2>
<p>EJBと、Entity を作成したので、JSF から利用する Managed Bean を作成しましょう。「ファイル」→「新規ファイル(N)…」→「JavaServer Faces」→「JSF 管理対象 Bean」を選択し「次へ＞」ボタンを押下してください。</p>
<p><a href="http://farm5.static.flickr.com/4024/4389244246_afaffca9c6_o.png"><img class="aligncenter" title="Managed Bean の作成" src="http://farm5.static.flickr.com/4024/4389244246_68eac73ca5.jpg" alt="" width="500" height="424" /></a></p>
<p>「クラス名(N)」、「パッケージ(K)」を入力し「完了(F)」ボタンを押下します。</p>
<table border="1" bgcolor="GRAY">
<tbody>
<tr>
<td><span style="color:white;">補足：<br />
JSF 2.0 からは下記のような faces-config.xml の設定ファイルがオプション化されました。そこで Managed Bean の設定や画面遷移を XML ファイルに記載する必要はなく、アノテーションを利用しプログラム上で実現することができるようになりました。</p>
<p>JSF1.2 までの faces-confg.xml の設定例：</p>
<table border="1">
<tbody>
<tr>
<td><span style="color:white;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;managed-bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;managed-bean-name&gt;PersonController&lt;/managed-bean-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;managed-bean-class&gt;PersonController&lt;/managed-bean-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/managed-bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;navigation-rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;from-view-id&gt;/foo.jsp&lt;/from-view-id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;navigation-case&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;from-outcome&gt;ok&lt;/from-outcome&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;to-view-id&gt;/bar.jsp&lt;/to-view-id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/navigation-case&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/navigation-rule&gt;</span></td>
</tr>
</tbody>
</table>
<p></span></td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>コードを編集していきましょう。作成するクラスが Managed Bean であることをコンテナに理解させるため、@ManagedBean のアノテーションを利用します。アノテーションを指定する際、&#8221;name&#8221; 属性は必須で Managed Bean を識別する名前を入力します。</p>
<table border="1">
<tbody>
<tr>
<td>package&nbsp;mbean;</p>
<p>import&nbsp;ent.Person;<br />
import&nbsp;pejb.PersonEJB;<br />
import&nbsp;java.util.ArrayList;<br />
import&nbsp;java.util.List;<br />
import&nbsp;javax.faces.bean.ManagedBean;<br />
import&nbsp;javax.faces.bean.RequestScoped;<br />
import&nbsp;javax.ejb.EJB;</p>
<p>@ManagedBean(name=&#8221;PersonController&#8221;)<br />
@RequestScoped<br />
public&nbsp;class&nbsp;PersonController&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;PersonController()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;@EJB<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;PersonEJB&nbsp;personEJB;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Person&nbsp;person&nbsp;=&nbsp;new&nbsp;Person();<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;List&lt;Person&gt;&nbsp;personList&nbsp;=&nbsp;new&nbsp;ArrayList&lt;Person&gt;();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;//Facelets&nbsp;の&nbsp;action=&#8221;#{PersonController.doNew}&nbsp;により画面遷移<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;doNew(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#8221;createPerson.xhtml&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;//Facelets&nbsp;の&nbsp;action=&#8221;#{PersonController.doCreatePerson}&nbsp;により画面遷移<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;doCreatePerson(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//画面から入力された&nbsp;Person&nbsp;を&nbsp;DB&nbsp;に登録<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setPerson(personEJB.createPerson(getPerson()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DB&nbsp;に登録されている全&nbsp;Person&nbsp;を&nbsp;personList&nbsp;に設定<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setPersonList(personEJB.findAllPersons());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#8221;listPersons.xhtml&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Person&nbsp;getPerson()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setPerson(Person&nbsp;person)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.person&nbsp;=&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;Person&gt;&nbsp;getPersonList()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;personList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setPersonList(List&lt;Person&gt;&nbsp;personList)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.personList&nbsp;=&nbsp;personList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h2>５．JSF 2.0: ベージの作成</h2>
<p>最後に、表示画面を作成します。JSF 2.0 から facelet を xhtml で記載できるようになりました。</p>
<p>「ファイル」→「新規ファイル(N)…」→「JavaServer Faces」を選択し「次へ＞」ボタンを<br />
押下してください。</p>
<p><a href="http://farm5.static.flickr.com/4059/4386609553_06f663cb7f_o.png"><img title="JSF 表示画面の作成" src="http://farm5.static.flickr.com/4059/4386609553_bd22b79bcc.jpg" alt="JSF 表示画面の作成" width="500" height="345" /></a></p>
<p>ファイル名 (createPerson.xhtml) を入力すると自動的に .xhtml の拡張子が付加されます、最後に「完了(F)」ボタンを押下します。</p>
<p><a href="http://farm5.static.flickr.com/4028/4387371960_aea70110bb_o.png"><img title="JSF 表示画面の作成" src="http://farm5.static.flickr.com/4028/4387371960_5e6b798339.jpg" alt="JSF 表示画面の作成" width="500" height="297" /></a></p>
<p>自動生成されたひな形を編集して下記のコードを記載してください。Facelets で扱えるタグ等は別途紹介する予定ですが、みていただければわかるとおり、HTML も記載する事ができますし、スタイルシート等を記載することも可能です。また、JSF 2.0 から Ajax をサポートしていますので、Ajax のコードを利用してサーバと通信する事もできるようになります。</p>
<table border="1">
<tbody>
<tr>
<td>&lt;?xml&nbsp;version=&#8217;1.0&#8242;&nbsp;encoding=&#8217;UTF-8&#8242;&nbsp;?&gt;<br />
&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&#8221;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&#8221;&nbsp;&#8221;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;<br />
&lt;html&nbsp;xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:h=&#8221;http://java.sun.com/jsf/html&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Facelet&nbsp;Title&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputLabel&nbsp;value=&#8221;名前：&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText&nbsp;value=&#8221;#{PersonController.person.name}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputLabel&nbsp;value=&#8221;住所&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText&nbsp;value=&#8221;#{PersonController.person.address1}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputLabel&nbsp;value=&#8221;電話番号&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText&nbsp;value=&#8221;#{PersonController.person.telephone}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputLabel&nbsp;value=&#8221;年齢&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText&nbsp;value=&#8221;#{PersonController.person.age}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:commandButton&nbsp;value=&#8221;作成&#8221;&nbsp;action=&#8221;#{PersonController.doCreatePerson}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:body&gt;<br />
&lt;/html&gt;
</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>最後に、登録された一覧を表示する画面を作成します。<br />
「ファイル」→「新規ファイル(N)…」→「JavaServer Faces」を選択し「次へ＞」ボタンを<br />
押下してください。</p>
<p><a href="http://farm5.static.flickr.com/4059/4386609553_06f663cb7f_o.png"><img title="JSF 表示画面の作成" src="http://farm5.static.flickr.com/4059/4386609553_bd22b79bcc.jpg" alt="JSF 表示画面の作成" width="500" height="345" /></a></p>
<p>ファイル名(listPersons)を入力し「完了(F)」ボタンを押下します。</p>
<table border="1">
<tbody>
<tr>
<td>&lt;?xml&nbsp;version=&#8217;1.0&#8242;&nbsp;encoding=&#8217;UTF-8&#8242;&nbsp;?&gt;<br />
&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&#8221;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&#8221;&nbsp;&#8221;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;<br />
&lt;html&nbsp;xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:h=&#8221;http://java.sun.com/jsf/html&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:f=&#8221;http://java.sun.com/jsf/core&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Facelet&nbsp;Title&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:dataTable&nbsp;value=&#8221;#{PersonController.personList}&#8221;&nbsp;var=&#8221;psn&#8221;&nbsp;border=&#8221;1&#8243;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:facet&nbsp;name=&#8221;header&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;名前&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/f:facet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;#{psn.name}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:facet&nbsp;name=&#8221;header&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;住所&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/f:facet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;#{psn.address1}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:facet&nbsp;name=&#8221;header&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;電話番号&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/f:facet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;#{psn.telephone}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:column&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:facet&nbsp;name=&#8221;header&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;年齢&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/f:facet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:outputText&nbsp;value=&#8221;#{psn.age}&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:dataTable&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:commandLink&nbsp;action=&#8221;#{PersonController.doNew}&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新規作成&lt;/h:commandLink&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:body&gt;<br />
&lt;/html&gt;
</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>以上で、このアプリケーションの実装は完了です。</p>
<p>NetBeans のメニューより「実行(R)」→「主プロジェクトを実行(R)」を選択してください。実行すると自動的にブラウザがオープンしアプリケーションのデフォルトのコンテンツが表示されます。</p>
<p><a href="http://farm5.static.flickr.com/4070/4389319682_013e0fd31a_o.png"><img class="aligncenter" title="デフォルトページ" src="http://farm5.static.flickr.com/4070/4389319682_c7d13bfbac.jpg" alt="" width="500" height="488" /></a></p>
<p>コンテキストルートでアクセスされた時のデフォルトページを変更したい場合は、web.xml ファイルを編集する必要があります。下記のように welcome-file-list を編集してください。</p>
<p><span style="text-decoration:underline;">web.xml の編集</span></p>
<table border="1">
<tbody>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;faces/createPerson.xhtml&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/welcome-file-list&gt;
</td>
</tr>
</tbody>
</table>
<p><span></span><br />
設定を変更した後、もう一度プロジェクトを実行してください。すると下記のように自動的に登録画面が表示されるようになります。</p>
<p><a href="http://farm5.static.flickr.com/4052/4389309630_f8b14d0cf0_o.png"><img class="aligncenter" title="登録画面" src="http://farm5.static.flickr.com/4052/4389309630_1074f55616.jpg" alt="" width="500" height="488" /></a></p>
<p>データを入力して「作成」ボタンを押下してみましょう。下記のように一覧表示画面が表示されれば問題はありません。</p>
<p><a href="http://farm3.static.flickr.com/2743/4388541601_90f8db122b_o.png"><img class="aligncenter" title="一覧表示画面" src="http://farm3.static.flickr.com/2743/4388541601_c5712bdabe.jpg" alt="" width="500" height="488" /></a></p>
<p>最後に、エラーハンドリングについて紹介します。例外が発生した際に特定のエラーページにリダイレクトさせるようにweb.xml の&lt;error-page&gt; タグを記載する必要があります。&lt;exception-type&gt;で、ハンドリングした例外毎にエラーページを表示させる事が可能です。本番環境においては、少なくとも JSF で発生する例外の親である javax.servlet.ServletException を記載してください。</p>
<p><span style="text-decoration:underline;">web.xml の編集</span></p>
<table border="1">
<tbody>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&lt;error-page&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exception-type&gt;javax.servlet.ServletException&lt;/exception-type&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;location&gt;/error.xhtml&lt;/location&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/error-page&gt;
</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>以上で、今回の Java EE 6 のアプリケーション作成は終了です。NetBeans を利用するとウィザードを使って、コードのひな形を作成してくれたり、また設定も極力 XML ファイルを手動で編集しなくても済むようになります。是非お試しください。今回紹介したサンプルは Java EE 6 を利用する上で最も基本的な構成と思います、上記の例を元に色々と修正を加え、DI/CDI や Bean Validation 等を加えて Java EE 6 の機能を是非色々と試してみてください。</p>
<p>最後に、私の環境で作成したNetBeans 6.8 のプロジェクトを下記から入手できるようにしました。<br />
(※ Sun の mediacast.sun.com サイトにファイルをアップロードしていますので、<br />
　仮にこのサイトが閉鎖してしまった場合は申し訳ありませんがご了承ください。)</p>
<p>●　<A HREF="http://mediacast.sun.com/users/yosshi/media/PersonManageNBProject.jar">NetBeans 6.8 のプロジェクト(ソース、設定ファイル等を含む)</A><br />
●　<A HREF="http://mediacast.sun.com/users/yosshi/media/PersonManagement.war">GlassFish v3 配備用 WARファイル</A></p>
<br />カテゴリー:<a href='http://yoshio3.com/category/application-serverglassfish/'>Application Server/GlassFish</a>, <a href='http://yoshio3.com/category/glassfish/'>GlassFish</a>, <a href='http://yoshio3.com/category/java/'>Java</a> Tagged: <a href='http://yoshio3.com/tag/glassfish/'>GlassFish</a>, <a href='http://yoshio3.com/tag/java-ee/'>Java EE</a>, <a href='http://yoshio3.com/tag/netbeans/'>NetBeans</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/713/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=713&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/26/%e3%81%93%e3%81%93%e3%81%8b%e3%82%89%e5%a7%8b%e3%82%81%e3%82%8b-java-ee-6-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2716/4387372234_99c6ec3a79.jpg" medium="image">
			<media:title type="html">サンプルアプリケーションの処理フロー</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4043/4386609853_50e184f4bb_o.png" medium="image">
			<media:title type="html">サンプルアプリケーションの完成イメージ</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4055/4386609663_8de10a5c23.jpg" medium="image">
			<media:title type="html">パッケージの簡略化</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4061/4387371496_939e506cef.jpg" medium="image">
			<media:title type="html">新規プロジェクトの作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4018/4386609217_d95e3abdbd.jpg" medium="image">
			<media:title type="html">新規プロジェクト作成</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2801/4387371578_fa4474d953.jpg" medium="image">
			<media:title type="html">稼働サーバとフレームワークの選択</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2792/4386609291_cca7d30341.jpg" medium="image">
			<media:title type="html">フレームワークの選択</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4033/4387371682_243467ab86.jpg" medium="image">
			<media:title type="html">プロジェクト作成完了</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4051/4387371716_070ef86ef8.jpg" medium="image">
			<media:title type="html">エンティティークラスの作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4042/4386609403_f35a2c9768.jpg" medium="image">
			<media:title type="html">エンティティクラスの作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4034/4386609437_3ca1fc865b.jpg" medium="image">
			<media:title type="html">持続性ユニットの作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4014/4386609481_d265ee31c9.jpg" medium="image">
			<media:title type="html">EJB セッション Bean の作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4015/4386609511_c83e412d8e.jpg" medium="image">
			<media:title type="html">ステートレスセッション Bean の作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4069/4387372066_d7bb3f0d1b.jpg" medium="image">
			<media:title type="html">EJB 3.0</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4003/4387372112_465d84a623.jpg" medium="image">
			<media:title type="html">EJB 3.1</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4018/4387372136_dafbfa7429.jpg" medium="image">
			<media:title type="html">EJB 3.1</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4024/4389244246_68eac73ca5.jpg" medium="image">
			<media:title type="html">Managed Bean の作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4059/4386609553_bd22b79bcc.jpg" medium="image">
			<media:title type="html">JSF 表示画面の作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4028/4387371960_5e6b798339.jpg" medium="image">
			<media:title type="html">JSF 表示画面の作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4059/4386609553_bd22b79bcc.jpg" medium="image">
			<media:title type="html">JSF 表示画面の作成</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4070/4389319682_c7d13bfbac.jpg" medium="image">
			<media:title type="html">デフォルトページ</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4052/4389309630_1074f55616.jpg" medium="image">
			<media:title type="html">登録画面</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2743/4388541601_c5712bdabe.jpg" medium="image">
			<media:title type="html">一覧表示画面</media:title>
		</media:content>
	</item>
		<item>
		<title>デブサミ2010の写真</title>
		<link>http://yoshio3.com/2010/02/19/%e3%83%87%e3%83%96%e3%82%b5%e3%83%9f2010%e3%81%ae%e5%86%99%e7%9c%9f/</link>
		<comments>http://yoshio3.com/2010/02/19/%e3%83%87%e3%83%96%e3%82%b5%e3%83%9f2010%e3%81%ae%e5%86%99%e7%9c%9f/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 15:52:22 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=686</guid>
		<description><![CDATA[今日は午後からデブサミに参加してきました。
午後からの参加という事もあり撮った写真は少ないですがどうぞご覧ください。































カテゴリー:未分類       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=686&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>今日は午後からデブサミに参加してきました。<br />
午後からの参加という事もあり撮った写真は少ないですがどうぞご覧ください。</p>
<p><A HREF="http://farm5.static.flickr.com/4013/4367342349_37a55ac752_b.jpg"><img src="http://farm5.static.flickr.com/4013/4367342349_37a55ac752_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4010/4367342101_cb161141c1_b.jpg"><img src="http://farm5.static.flickr.com/4010/4367342101_cb161141c1_m.jpg"></a><br />
<A HREF="http://farm3.static.flickr.com/2767/4367341811_45659eb743_b.jpg"><img src="http://farm3.static.flickr.com/2767/4367341811_45659eb743_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4051/4367341599_763930ef1d_b.jpg"><img src="http://farm5.static.flickr.com/4051/4367341599_763930ef1d_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4047/4368087694_c14bfb25e9_b.jpg"><img src="http://farm5.static.flickr.com/4047/4368087694_c14bfb25e9_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4066/4367341071_8a1cd06ea4_b.jpg"><img src="http://farm5.static.flickr.com/4066/4367341071_8a1cd06ea4_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2703/4367340673_71d90a76c5_b.jpg"><img src="http://farm3.static.flickr.com/2703/4367340673_71d90a76c5_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4045/4367340345_35e5345036_b.jpg"><img src="http://farm5.static.flickr.com/4045/4367340345_35e5345036_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2725/4368086514_21f5433483_b.jpg"><img src="http://farm3.static.flickr.com/2725/4368086514_21f5433483_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4025/4367339729_6d7b6f52cb_b.jpg"><img src="http://farm5.static.flickr.com/4025/4367339729_6d7b6f52cb_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2744/4367339337_f636fdf841_b.jpg"><img src="http://farm3.static.flickr.com/2744/4367339337_f636fdf841_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4020/4368085504_6185681d92_b.jpg"><img src="http://farm5.static.flickr.com/4020/4368085504_6185681d92_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4041/4367338707_e72171106c_b.jpg"><img src="http://farm5.static.flickr.com/4041/4367338707_e72171106c_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2765/4367338445_c70590ce17_b.jpg"><br />
<img src="http://farm3.static.flickr.com/2765/4367338445_c70590ce17_m.jpg"><br />
</A><br />
<A HREF="http://farm5.static.flickr.com/4002/4368084636_e6666c6a87_b.jpg"><img src="http://farm5.static.flickr.com/4002/4368084636_e6666c6a87_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4053/4368084348_3cb30e77f8_b.jpg"><img src="http://farm5.static.flickr.com/4053/4368084348_3cb30e77f8_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4055/4367337643_08e6976553_b.jpg"><img src="http://farm5.static.flickr.com/4055/4367337643_08e6976553_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4013/4367337243_215a79e445_b.jpg"><img src="http://farm5.static.flickr.com/4013/4367337243_215a79e445_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2728/4367336931_d57d90da5b_b.jpg"><img src="http://farm3.static.flickr.com/2728/4367336931_d57d90da5b_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2788/4367336631_ff8b53ba4b_b.jpg"><img src="http://farm3.static.flickr.com/2788/4367336631_ff8b53ba4b_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4041/4368082748_c107ea4cd7_b.jpg"><img src="http://farm5.static.flickr.com/4041/4368082748_c107ea4cd7_m.jpg"><br />
<A HREF="http://farm5.static.flickr.com/4041/4367336055_46686ccb3f_m.jpg"><img src="http://farm5.static.flickr.com/4041/4367336055_46686ccb3f_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2445/4368082196_8caf0c9cfc_b.jpg"><img src="http://farm3.static.flickr.com/2445/4368082196_8caf0c9cfc_m.jpg"></A><br />
<A HREF="http://farm3.static.flickr.com/2767/4367335471_49a3a7c685_m.jpg"><img src="http://farm3.static.flickr.com/2767/4367335471_49a3a7c685_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4052/4368081578_6e7016a0c2_b.jpg"><br />
<img src="http://farm5.static.flickr.com/4052/4368081578_6e7016a0c2_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4023/4367334837_0eee12a1fb_b.jpg"><img></A><br />
<A HREF="http://farm5.static.flickr.com/4063/4368081088_09dd493252_b.jpg"><img src="http://farm5.static.flickr.com/4063/4368081088_09dd493252_m.jpg"></A><br />
<A HREF="http://farm5.static.flickr.com/4010/4368080860_017ca788ae_b.jpg"><img src="http://farm5.static.flickr.com/4010/4368080860_017ca788ae_m.jpg"></A></p>
<br />カテゴリー:<a href='http://yoshio3.com/category/%e6%9c%aa%e5%88%86%e9%a1%9e/'>未分類</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/686/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=686&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/19/%e3%83%87%e3%83%96%e3%82%b5%e3%83%9f2010%e3%81%ae%e5%86%99%e7%9c%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4013/4367342349_37a55ac752_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4010/4367342101_cb161141c1_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2767/4367341811_45659eb743_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4051/4367341599_763930ef1d_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4047/4368087694_c14bfb25e9_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4066/4367341071_8a1cd06ea4_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2703/4367340673_71d90a76c5_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4045/4367340345_35e5345036_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2725/4368086514_21f5433483_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4025/4367339729_6d7b6f52cb_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2744/4367339337_f636fdf841_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4020/4368085504_6185681d92_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4041/4367338707_e72171106c_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2765/4367338445_c70590ce17_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4002/4368084636_e6666c6a87_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4053/4368084348_3cb30e77f8_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4055/4367337643_08e6976553_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4013/4367337243_215a79e445_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2728/4367336931_d57d90da5b_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2788/4367336631_ff8b53ba4b_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4041/4368082748_c107ea4cd7_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4041/4367336055_46686ccb3f_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2445/4368082196_8caf0c9cfc_m.jpg" medium="image" />

		<media:content url="http://farm3.static.flickr.com/2767/4367335471_49a3a7c685_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4052/4368081578_6e7016a0c2_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4063/4368081088_09dd493252_m.jpg" medium="image" />

		<media:content url="http://farm5.static.flickr.com/4010/4368080860_017ca788ae_m.jpg" medium="image" />
	</item>
		<item>
		<title>今日も関東地方は雪</title>
		<link>http://yoshio3.com/2010/02/18/%e4%bb%8a%e6%97%a5%e3%82%82%e9%96%a2%e6%9d%b1%e5%9c%b0%e6%96%b9%e3%81%af%e9%9b%aa/</link>
		<comments>http://yoshio3.com/2010/02/18/%e4%bb%8a%e6%97%a5%e3%82%82%e9%96%a2%e6%9d%b1%e5%9c%b0%e6%96%b9%e3%81%af%e9%9b%aa/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 22:42:08 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=683</guid>
		<description><![CDATA[関東地方は朝から雪が降っていますね。
今日からDevelopers Summit 2010が開催されるので、参加者に影響がなければいいですね。
私も登録してあるので、仕事で時間ができれば伺いたいと思っています。
発表者の方々是非頑張ってください。

カテゴリー:未分類       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=683&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>関東地方は朝から雪が降っていますね。<br />
今日から<A HREF="http://codezine.jp/devsumi/2010/">Developers Summit 2010</A>が開催されるので、参加者に影響がなければいいですね。<br />
私も登録してあるので、仕事で時間ができれば伺いたいと思っています。<br />
発表者の方々是非頑張ってください。</p>
<p><img class="aligncenter" title="雪" src="http://farm3.static.flickr.com/2802/4366494386_4b2b1c3ebf.jpg" alt="雪" width="500" height="375" /></p>
<br />カテゴリー:<a href='http://yoshio3.com/category/%e6%9c%aa%e5%88%86%e9%a1%9e/'>未分類</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/683/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=683&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/18/%e4%bb%8a%e6%97%a5%e3%82%82%e9%96%a2%e6%9d%b1%e5%9c%b0%e6%96%b9%e3%81%af%e9%9b%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2802/4366494386_4b2b1c3ebf.jpg" medium="image">
			<media:title type="html">雪</media:title>
		</media:content>
	</item>
		<item>
		<title>河津桜まつり</title>
		<link>http://yoshio3.com/2010/02/15/%e6%b2%b3%e6%b4%a5%e6%a1%9c%e3%81%be%e3%81%a4%e3%82%8a/</link>
		<comments>http://yoshio3.com/2010/02/15/%e6%b2%b3%e6%b4%a5%e6%a1%9c%e3%81%be%e3%81%a4%e3%82%8a/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 06:13:29 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=680</guid>
		<description><![CDATA[昨日、日曜日に河津桜まつりに日帰りで行ってきました。
河津は一昨年に続き２回目となるのですが、昨日の時点では全体的に、まだツボミも多く、５分〜７分咲きといった所ではなかったでしょうか。次の土・日曜日辺りが満開になるのではないかと思いますのでご興味のある方は行ってみてください。いくつか写真を撮ってきました。


河津桜まつり


行きは沼津経由で行き、帰りは箱根経由で戻って来たのですが、いずれも山には結構雪が積もっていました（運転手だったので雪を写真におさめれなかったのですが）。特に箱根の頂上辺りは極寒で、車の温度計が−２℃（夕方５時頃）を指していました、山の上はまだまだ真冬なのに、同じ日に春の象徴の桜もみれて、ギャップを楽しむことができた一日でした。
昨日は妻の実家で飼っているバンビも連れていったのですが、、今回はなかなか良い顔をしてくれませんでした。ちなみにこれ獲物（お菓子）を狙う目です。下はごちそうさまの顔。
カテゴリー:未分類       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=680&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>昨日、日曜日に河津桜まつりに日帰りで行ってきました。</p>
<p>河津は一昨年に続き２回目となるのですが、昨日の時点では全体的に、まだツボミも多く、５分〜７分咲きといった所ではなかったでしょうか。次の土・日曜日辺りが満開になるのではないかと思いますのでご興味のある方は行ってみてください。いくつか写真を撮ってきました。</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="河津桜まつり" src="http://farm5.static.flickr.com/4051/4357154189_e952197c17.jpg" alt="河津桜まつり" width="500" height="375" /><p class="wp-caption-text">河津桜まつり</p></div>
<div class="wp-caption aligncenter" style="width: 510px"><img title="河津桜まつり" src="http://farm5.static.flickr.com/4026/4357890754_1f0296d5f6.jpg" alt="河津桜まつり" width="500" height="375" /><p class="wp-caption-text">河津桜まつり</p></div>
<div class="wp-caption aligncenter" style="width: 510px"></p>
<div class="mceTemp mceIEcenter">
<dl class="wp-caption aligncenter">
<dt class="wp-caption-dt"><img title="河津桜まつり" src="http://farm5.static.flickr.com/4025/4357888906_147f1b8b11.jpg" alt="河津桜まつり" width="500" height="375" /><p class="wp-caption-text">河津桜まつり</p></div>
<p><img title="河津桜まつり" src="http://farm3.static.flickr.com/2771/4357888240_64f320333e.jpg" alt="河津桜まつり" width="500" height="375" /></p>
</dt>
<dd class="wp-caption-dd">河津桜まつり</dd>
</dl>
</div>
<p>行きは沼津経由で行き、帰りは箱根経由で戻って来たのですが、いずれも山には結構雪が積もっていました（運転手だったので雪を写真におさめれなかったのですが）。特に箱根の頂上辺りは極寒で、車の温度計が−２℃（夕方５時頃）を指していました、山の上はまだまだ真冬なのに、同じ日に春の象徴の桜もみれて、ギャップを楽しむことができた一日でした。</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="バンビ" src="http://farm5.static.flickr.com/4003/4357152515_896f2ccc5f.jpg" alt="バンビ" width="500" height="375" /><p class="wp-caption-text">バンビ</p></div>
<p>昨日は妻の実家で飼っているバンビも連れていったのですが、、今回はなかなか良い顔をしてくれませんでした。ちなみにこれ獲物（お菓子）を狙う目です。下はごちそうさまの顔。</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="バンビ" src="http://farm3.static.flickr.com/2779/4357898912_00336d0041.jpg" alt="バンビ" width="500" height="375" /><p class="wp-caption-text">バンビ</p></div>
<br />カテゴリー:<a href='http://yoshio3.com/category/%e6%9c%aa%e5%88%86%e9%a1%9e/'>未分類</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/680/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/680/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/680/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/680/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/680/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/680/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/680/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/680/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/680/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/680/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=680&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/15/%e6%b2%b3%e6%b4%a5%e6%a1%9c%e3%81%be%e3%81%a4%e3%82%8a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4051/4357154189_e952197c17.jpg" medium="image">
			<media:title type="html">河津桜まつり</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4026/4357890754_1f0296d5f6.jpg" medium="image">
			<media:title type="html">河津桜まつり</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4025/4357888906_147f1b8b11.jpg" medium="image">
			<media:title type="html">河津桜まつり</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2771/4357888240_64f320333e.jpg" medium="image">
			<media:title type="html">河津桜まつり</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4003/4357152515_896f2ccc5f.jpg" medium="image">
			<media:title type="html">バンビ</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2779/4357898912_00336d0041.jpg" medium="image">
			<media:title type="html">バンビ</media:title>
		</media:content>
	</item>
		<item>
		<title>Oracle + Sun Welcome イベントが東京、大阪で開催</title>
		<link>http://yoshio3.com/2010/02/11/oracle-sun-welcome-%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%81%8c%e6%9d%b1%e4%ba%ac%e3%80%81%e5%a4%a7%e9%98%aa%e3%81%a7%e9%96%8b%e5%82%ac/</link>
		<comments>http://yoshio3.com/2010/02/11/oracle-sun-welcome-%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%81%8c%e6%9d%b1%e4%ba%ac%e3%80%81%e5%a4%a7%e9%98%aa%e3%81%a7%e9%96%8b%e5%82%ac/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:35:03 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=675</guid>
		<description><![CDATA[Oracle + Sun Welcome Event が世界各国で開催されることが決まったようです。
各国の開催予定日はここに記載されています。
ちなみに、日本では東京と大阪で、それぞれ 4月21日、4月22日 に開催されるようです。
どうぞお楽しみに。
カテゴリー:General Tagged: Oracle, Sun      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=675&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 593px"><a href="http://www.oracle.com/events/welcomesun/index.html#asia"><img title="Oracle Sun Welcome Event" src="http://farm5.static.flickr.com/4070/4346775594_54fdb2bea0_o.png" alt="Oracle Sun Welcome Event" width="583" height="240" /></a><p class="wp-caption-text">Oracle Sun Welcome Event</p></div>
<p>Oracle + Sun Welcome Event が世界各国で開催されることが決まったようです。<br />
各国の開催予定日は<A HREF="http://www.oracle.com/events/welcomesun/index.html">ここ</A>に記載されています。<br />
ちなみに、日本では東京と大阪で、それぞれ 4月21日、4月22日 に開催されるようです。</p>
<p>どうぞお楽しみに。</p>
<br />カテゴリー:<a href='http://yoshio3.com/category/general/'>General</a> Tagged: <a href='http://yoshio3.com/tag/oracle/'>Oracle</a>, <a href='http://yoshio3.com/tag/sun/'>Sun</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/675/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=675&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/11/oracle-sun-welcome-%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%81%8c%e6%9d%b1%e4%ba%ac%e3%80%81%e5%a4%a7%e9%98%aa%e3%81%a7%e9%96%8b%e5%82%ac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4070/4346775594_54fdb2bea0_o.png" medium="image">
			<media:title type="html">Oracle Sun Welcome Event</media:title>
		</media:content>
	</item>
		<item>
		<title>プレゼンスタイルについて</title>
		<link>http://yoshio3.com/2010/02/10/%e3%83%97%e3%83%ac%e3%82%bc%e3%83%b3%e3%82%b9%e3%82%bf%e3%82%a4%e3%83%ab%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/</link>
		<comments>http://yoshio3.com/2010/02/10/%e3%83%97%e3%83%ac%e3%82%bc%e3%83%b3%e3%82%b9%e3%82%bf%e3%82%a4%e3%83%ab%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 22:50:04 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=670</guid>
		<description><![CDATA[私は仕事がら社内外でプレゼンをする機会が多いのですが、プレゼンを行った後、ご来場頂いた皆様に書いて頂いたアンケートを必ず見るようにしています。というのも頂いたアンケート結果を元に次回のプレゼンに何とか生かせないかと考えているためです。
そんな、アンケートの内容を確認するとたまにプレゼンの仕方について
記載して頂くことがあります。
（同僚からは寺田のプレゼンは「熱い！！」と言われています。）
そこで、今日は私のプレゼンに対する取り組みと注意しているポイントについてまとめてみたいと思います。
さて、

プレゼンを行う際に皆様どのような事に気をつけていますか？
もしくはどのようにプレゼンしたいと思いますか？

私がプレゼンで一番重要にしているポイントは「情熱」です。
自分が紹介する情報に対して如何に情熱を持って話ができるか、それが何よりも重要だと思っています。だから熱いと言われるのも仕方がないのですが。しかし 自分が良いと思ってもない事、自分自身が信じていない事に対していくら良いですよ、聞いてくださいねと話をしても聞き手には全く伝わりません。
ですので伝えたい内容に関して、この自分が信じて止まない情報を是非聞いていただきたい、もっと広めたいと思って説明をするようにしています。
これを実現するためには、必ず自分のプレゼン資料は自分で作るようにしています。それは当然では？と思われる方も多いかと思うのですが、企業に勤めて製品 説明等を行う際、別の誰かが作成したプレゼン資料を使い回して説明しなければならない事もあります。実際過去に世界各国で共通のプレゼンを使用して、それ ぞれ別の人が発表するといった事があったわけですが、そのような場合も必ず自分で手を加えるようにしました。
なぜなら、そのプレゼン資料を作成した人と私の重要ポイントは違うためです。仮に発表用の原稿が用意されていて、強調ポイントまでが指し示されているので あれば、同じ資料を使用して同じプレゼンをする事もできるかもしれませんが、それでは自分がプレゼンをする意味がありません。
私が聞いて欲しいと思うポイントを強調したり、新たに原稿を追加する等して
カスタマイズする事によって自分のプレゼンに仕上がります。
実際に、プレゼン資料を作成する際に注意する点は下記です。
全体構成に関する注意点

概要説明から詳細説明へ
かんたんな内容から難しい内容へ
ページ間にストーリを作成

ページ作成時の注意点

文字を多用しない
伝えたいポイントのみ記載する
自分の口頭の説明に対する補助を記載する
説明する内容の概要のみ把握（詳細は必要なし）

上記で、”説明する内容の概要のみ把握”と記載していますが、これは、私が重視するポイントの一つです。最初は各ページで説明する内容をまとめた発表用原稿を用意していましたが今は原稿を作成することはまずありません。
各ページの作成時に覚えておくべき事は、このページでは何を説明すべきか、という事だけです。仮に忘れそうであればプレゼン資料内に補助で説明文言を含めれば忘れることもなくなるので、基本的には発表内容を一言一句全て覚えるということはしません。
発表内容を完全に覚えた場合のワーストケースとして下記のような事が発生する可能性があります

発表時間が突然変わることがある。
緊張して上がった場合に頭が真っ白になる。

説明する内容の概要さえ覚えておけば上記を防ぐことができます。例えば、発表時間に応じて内容を柔軟に修正できるため時計をみながら発表内容を短縮もしくは拡張することができるようになります。
また仮に緊張して上がっても発表する内容の概要だけが頭に残っていれば、（仮に残っていなくてもページの文章を読めば）最悪な停止状態はさけられ、そこを乗り越えれば時間を経過するにつれて落ち着いてくるので普段とおりの発表ができるようになります。
一言一句覚えてしまうと柔軟な対応ができなくなってしまいます。
また、発表時に気をつけるポイントとしては下記があります。

声は大きくはっきりと
ポイントを指す時以外はできる限りプレゼン資料は見ない
常に聞き手に対して正面を向くようにする
相づちを打ってくださる数名のお客様を見つけその方達に語りかけるように説明する
テーブル等がある場合は、テーブルに隠れないようにし体全体が見えるようにする
お客様のリストの事前確認、もしくは発表中のお客様の反応を見て、興味のありそうなポイントを通常より詳しく説明する。
デモンストレーションを行う場合は事前にデモ内容を録画した動画ファイルを準備しておく

以上、私がプレゼンで注意しているポイントです。プレゼンスタイルは人それぞれだと思いますし手法も色々あるのですが少しでも参考になれば幸いです。
最後に余談ですが、こうやって改めて自分のプレゼンについて考えてみて自分のプレゼンスタイルのルーツを思い出すことができました。学生時代にあ る国際学会で出会った外人さんなのですが、彼のプレゼンがとてもすばらしく最初は彼の真似をしたのではないかと思います。もちろん、その後社会人になって 色々な方にプレゼンのアドバイスを頂いたり書籍などからも学んだのですが、ルーツはそこなんだなと思いだしました。
皆さんも記憶に残るプレゼンってありますか？
カテゴリー:General       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=670&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>私は仕事がら社内外でプレゼンをする機会が多いのですが、プレゼンを行った後、ご来場頂いた皆様に書いて頂いたアンケートを必ず見るようにしています。というのも頂いたアンケート結果を元に次回のプレゼンに何とか生かせないかと考えているためです。<br />
そんな、アンケートの内容を確認するとたまにプレゼンの仕方について<br />
記載して頂くことがあります。<br />
（同僚からは寺田のプレゼンは「熱い！！」と言われています。）<br />
そこで、今日は私のプレゼンに対する取り組みと注意しているポイントについてまとめてみたいと思います。</p>
<p>さて、</p>
<ul>
<li>プレゼンを行う際に皆様どのような事に気をつけていますか？</li>
<li>もしくはどのようにプレゼンしたいと思いますか？</li>
</ul>
<h3><strong>私がプレゼンで一番重要にしているポイントは「情熱」です。</strong></h3>
<p>自分が紹介する情報に対して如何に情熱を持って話ができるか、それが何よりも重要だと思っています。だから熱いと言われるのも仕方がないのですが。しかし 自分が良いと思ってもない事、自分自身が信じていない事に対していくら良いですよ、聞いてくださいねと話をしても聞き手には全く伝わりません。<br />
ですので伝えたい内容に関して、この自分が信じて止まない情報を是非聞いていただきたい、もっと広めたいと思って説明をするようにしています。</p>
<p>これを実現するためには、必ず自分のプレゼン資料は自分で作るようにしています。それは当然では？と思われる方も多いかと思うのですが、企業に勤めて製品 説明等を行う際、別の誰かが作成したプレゼン資料を使い回して説明しなければならない事もあります。実際過去に世界各国で共通のプレゼンを使用して、それ ぞれ別の人が発表するといった事があったわけですが、そのような場合も必ず自分で手を加えるようにしました。<br />
なぜなら、そのプレゼン資料を作成した人と私の重要ポイントは違うためです。仮に発表用の原稿が用意されていて、強調ポイントまでが指し示されているので あれば、同じ資料を使用して同じプレゼンをする事もできるかもしれませんが、それでは自分がプレゼンをする意味がありません。<br />
私が聞いて欲しいと思うポイントを強調したり、新たに原稿を追加する等して<br />
カスタマイズする事によって自分のプレゼンに仕上がります。</p>
<p>実際に、プレゼン資料を作成する際に注意する点は下記です。</p>
<p>全体構成に関する注意点</p>
<ul>
<li>概要説明から詳細説明へ</li>
<li>かんたんな内容から難しい内容へ</li>
<li>ページ間にストーリを作成</li>
</ul>
<p>ページ作成時の注意点</p>
<ul>
<li>文字を多用しない</li>
<li>伝えたいポイントのみ記載する</li>
<li>自分の口頭の説明に対する補助を記載する</li>
<li>説明する内容の概要のみ把握（詳細は必要なし）</li>
</ul>
<p>上記で、”説明する内容の概要のみ把握”と記載していますが、これは、私が重視するポイントの一つです。最初は各ページで説明する内容をまとめた発表用原稿を用意していましたが今は原稿を作成することはまずありません。<br />
各ページの作成時に覚えておくべき事は、このページでは何を説明すべきか、という事だけです。仮に忘れそうであればプレゼン資料内に補助で説明文言を含めれば忘れることもなくなるので、基本的には発表内容を一言一句全て覚えるということはしません。</p>
<p>発表内容を完全に覚えた場合のワーストケースとして下記のような事が発生する可能性があります</p>
<ol>
<li>発表時間が突然変わることがある。</li>
<li>緊張して上がった場合に頭が真っ白になる。</li>
</ol>
<p>説明する内容の概要さえ覚えておけば上記を防ぐことができます。例えば、発表時間に応じて内容を柔軟に修正できるため時計をみながら発表内容を短縮もしくは拡張することができるようになります。<br />
また仮に緊張して上がっても発表する内容の概要だけが頭に残っていれば、（仮に残っていなくてもページの文章を読めば）最悪な停止状態はさけられ、そこを乗り越えれば時間を経過するにつれて落ち着いてくるので普段とおりの発表ができるようになります。<br />
一言一句覚えてしまうと柔軟な対応ができなくなってしまいます。</p>
<p>また、発表時に気をつけるポイントとしては下記があります。</p>
<ul>
<li>声は大きくはっきりと</li>
<li>ポイントを指す時以外はできる限りプレゼン資料は見ない</li>
<li>常に聞き手に対して正面を向くようにする</li>
<li>相づちを打ってくださる数名のお客様を見つけその方達に語りかけるように説明する</li>
<li>テーブル等がある場合は、テーブルに隠れないようにし体全体が見えるようにする</li>
<li>お客様のリストの事前確認、もしくは発表中のお客様の反応を見て、興味のありそうなポイントを通常より詳しく説明する。</li>
<li>デモンストレーションを行う場合は事前にデモ内容を録画した動画ファイルを準備しておく</li>
</ul>
<p>以上、私がプレゼンで注意しているポイントです。プレゼンスタイルは人それぞれだと思いますし手法も色々あるのですが少しでも参考になれば幸いです。</p>
<p>最後に余談ですが、こうやって改めて自分のプレゼンについて考えてみて自分のプレゼンスタイルのルーツを思い出すことができました。学生時代にあ る国際学会で出会った外人さんなのですが、彼のプレゼンがとてもすばらしく最初は彼の真似をしたのではないかと思います。もちろん、その後社会人になって 色々な方にプレゼンのアドバイスを頂いたり書籍などからも学んだのですが、ルーツはそこなんだなと思いだしました。</p>
<p>皆さんも記憶に残るプレゼンってありますか？</p>
<br />カテゴリー:<a href='http://yoshio3.com/category/general/'>General</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/670/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=670&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/10/%e3%83%97%e3%83%ac%e3%82%bc%e3%83%b3%e3%82%b9%e3%82%bf%e3%82%a4%e3%83%ab%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>
	</item>
		<item>
		<title>GlassFish データベースの設定</title>
		<link>http://yoshio3.com/2010/02/08/glassfish-%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e8%a8%ad%e5%ae%9a/</link>
		<comments>http://yoshio3.com/2010/02/08/glassfish-%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e8%a8%ad%e5%ae%9a/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 03:21:29 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[Application Server/GlassFish]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[GlassFish]]></category>
		<category><![CDATA[JDBC]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=647</guid>
		<description><![CDATA[GlassFishはデータベースとの接続にデータベースベンダーが提供するJDBCドライバを使用します．
GlassFishにはインストール時デフォルトで Java DBが付属しており，あらかじめJava DBに対するJDBCリソースと接続プールの設定がされています．そして GlassFish の監視系の機能の一つである，「呼び出しフロー」のデータ保存先として使用されています．
ここでは，新たにMySQL 5.1との接続設定方法について紹介します．MySQLと接続するためには，MySQLのJDBCドライバを事前に入手しておいてください．
また以降の手順ではMySQLが既にインストールされていることを前提に説明します．
JDBCドライバに対するクラスパスを設定




dashost &#62; asadmin get &#8220;cluster1-config.java-config.server-classpath&#8221;
cluster1-config.java-config.server-classpath = 
dashost &#62; asadmin set &#8220;cluster1-config.java-config.server-classpath=/sun/glassfish-v2.1.1/lib/mysql-connector-java-5.1.5-bin.jar&#8221;
cluster1-config.java-config.server-classpath = /sun/glassfish-v2.1.1/lib/mysql-connector-java-5.1.5-bin.jar




クラスパスの設定は，管理コンソールから左ペインの「設定」→「対象のコンフィグ(cluster1-config)」→「JVM 設定」を選択し右ペインの「サーバクラスパス」内に記載し設定できます．



次に JDBC の接続プールを作成します．





dashost &#62;  asadmin create-jdbc-connection-pool &#8211;datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlDataSource &#8211;restype=javax.sql.DataSource &#8211;property user=root:password=password:DatabaseName=MySQL:ServerName=localhost:port=3306:URL=&#8221;jdbc\:mysql\://localhost\:3306/test&#8221; MySQL-Pool
コマンド create-jdbc-connection-pool は正常に実行されました。




分散トランザクションが必要な場合，リソースタイプ，データソースにそれぞれ下記を使用してください．
javax.sql.XADataSource
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
管理コンソールからは下記の手順に従い設定してください．
まず、左ペインの「リソース」→「JDBC」→ 「接続プール」を選択し右ペインの「新規 &#8230;」ボタンを押下します．


次に，「接続プール名」，「リソースタイプ」，「データベースベンダー」を選択し「次へ」ボタンを押下します．


最後に，JDBC の各種詳細な設定項目を選択/入力し「完了」ボタンを押下します．







JDBCドライバ等の設定項目一覧が数多くリストされますが，ここでは最低限下記の項目のみ編集して設定を完了します．



名前
値


user
root


password
password


DatabaseName
MySQL


ServerName
localhost


port
3306


URL
jdbc:mysql://localhost:3306/test




「完了」ボタンを押下すると下記の画面が表示されます．


ここで、作成した JDBC 接続プールが有効か否か疎通確認を行います．
成功時：




dashost &#62; asadmin ping-connection-pool MySQL-Pool
コマンド ping-connection-pool は正常に実行されました。




失敗時：





dashost &#62; asadmin ping-connection-pool MySQL-Pool
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
CLI137 コマンド ping-connection-pool は失敗しました。





また，管理コンソールから左ペインの「リソース」→「 JDBC」→「 接続プール」より対象の接続プールを選択し「Ping」ボタンを押下し確認できます．
成功時：


失敗時：


次に、作成した JDBC [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=647&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>GlassFishはデータベースとの接続にデータベースベンダーが提供するJDBCドライバを使用します．</p>
<p>GlassFishにはインストール時デフォルトで Java DBが付属しており，あらかじめJava DBに対するJDBCリソースと接続プールの設定がされています．そして GlassFish の監視系の機能の一つである，「呼び出しフロー」のデータ保存先として使用されています．<br />
ここでは，新たにMySQL 5.1との接続設定方法について紹介します．MySQLと接続するためには，<a href="http://dev.mysql.com/downloads/connector/j/5.1.html">MySQLのJDBCドライバを事前に入手</a>しておいてください．<br />
また以降の手順ではMySQLが既にインストールされていることを前提に説明します．</p>
<p>JDBCドライバに対するクラスパスを設定</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin get &#8220;cluster1-config.java-config.server-classpath&#8221;<br />
cluster1-config.java-config.server-classpath = </strong><br />
dashost &gt; <strong>asadmin set &#8220;cluster1-config.java-config.server-classpath=/sun/glassfish-v2.1.1/lib/mysql-connector-java-5.1.5-bin.jar&#8221;</strong><br />
cluster1-config.java-config.server-classpath = /sun/glassfish-v2.1.1/lib/mysql-connector-java-5.1.5-bin.jar</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<p>クラスパスの設定は，管理コンソールから左ペインの「設定」→「対象のコンフィグ(cluster1-config)」→「JVM 設定」を選択し右ペインの「サーバクラスパス」内に記載し設定できます．<br />
<span></span><br />
<IMG SRC="http://farm3.static.flickr.com/2795/4343300590_0f2a81e581.jpg"><br />
<span></span></p>
<p>次に JDBC の接続プールを作成します．<br />
<span></span></p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt;  <strong>asadmin create-jdbc-connection-pool &#8211;datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlDataSource &#8211;restype=javax.sql.DataSource &#8211;property user=root:password=password:DatabaseName=MySQL:ServerName=localhost:port=3306:URL=&#8221;jdbc\:mysql\://localhost\:3306/test&#8221; MySQL-Pool</strong><br />
コマンド create-jdbc-connection-pool は正常に実行されました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
分散トランザクションが必要な場合，リソースタイプ，データソースにそれぞれ下記を使用してください．<br />
javax.sql.XADataSource<br />
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</p>
<p>管理コンソールからは下記の手順に従い設定してください．<br />
まず、左ペインの「リソース」→「JDBC」→ 「接続プール」を選択し右ペインの「新規 &#8230;」ボタンを押下します．<br />
<span></span><br />
<IMG SRC="http://farm3.static.flickr.com/2680/4343300778_3fbcbd80cd.jpg"></p>
<p>次に，「接続プール名」，「リソースタイプ」，「データベースベンダー」を選択し「次へ」ボタンを押下します．<br />
<span></span><br />
<IMG SRC="http://farm3.static.flickr.com/2728/4342564361_e34ef905fe.jpg"></p>
<p>最後に，JDBC の各種詳細な設定項目を選択/入力し「完了」ボタンを押下します．<br />
<span></span><br />
<IMG SRC="http://farm5.static.flickr.com/4035/4342564457_654d8e6c55.jpg"><br />
<span></span><br />
<IMG SRC="http://farm5.static.flickr.com/4039/4343301012_8a99cda63f.jpg"><br />
<span></span><br />
<IMG SRC="http://farm5.static.flickr.com/4072/4342564615_e916b90a75.jpg"><br />
<span></span></p>
<p>JDBCドライバ等の設定項目一覧が数多くリストされますが，ここでは最低限下記の項目のみ編集して設定を完了します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="256">
<tbody>
<tr>
<td bgcolor="#a3b8cb">名前</td>
<td bgcolor="#a3b8cb">値</td>
</tr>
<tr>
<td>user</td>
<td>root</td>
</tr>
<tr>
<td>password</td>
<td>password</td>
</tr>
<tr>
<td>DatabaseName</td>
<td>MySQL</td>
</tr>
<tr>
<td>ServerName</td>
<td>localhost</td>
</tr>
<tr>
<td>port</td>
<td>3306</td>
</tr>
<tr>
<td>URL</td>
<td>jdbc:mysql://localhost:3306/test</td>
</tr>
</tbody>
</table>
<p><span></span><br />
「完了」ボタンを押下すると下記の画面が表示されます．<br />
<span></span><br />
<IMG SRC="http://farm5.static.flickr.com/4017/4343301882_e53051df8a.jpg"></p>
<p>ここで、作成した JDBC 接続プールが有効か否か疎通確認を行います．</p>
<p><u>成功時：</u></p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin ping-connection-pool MySQL-Pool</strong><br />
コマンド ping-connection-pool は正常に実行されました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
<u>失敗時：</u></p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">
dashost &gt; <strong>asadmin ping-connection-pool MySQL-Pool</strong><br />
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException<br />
CLI137 コマンド ping-connection-pool は失敗しました。
</td>
</tr>
</tbody>
</table>
<p><span></span><br />
また，管理コンソールから左ペインの「リソース」→「 JDBC」→「 接続プール」より対象の接続プールを選択し「Ping」ボタンを押下し確認できます．<br />
<u>成功時：</u><br />
<span></span><br />
<IMG SRC="http://farm5.static.flickr.com/4021/4342565523_03bd9378b3.jpg"></p>
<p><u>失敗時：</u><br />
<span></span><br />
<IMG SRC="http://farm3.static.flickr.com/2701/4342565615_6d4b846a60.jpg"></p>
<p>次に、作成した JDBC 接続プールに対して，リソース設定を行います．<br />
アプリケーションはここで設定する JNDI 名を利用して DB にアクセスできるようになります．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt;  <strong>asadmin create-jdbc-resource &#8211;connectionpoolid MySQL-Pool jdbc/mysql</strong><br />
コマンド create-jdbc-resource は正常に実行されました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
管理コンソールからは下記の手順に従い設定してください．<br />
まず、左ペインの「リソース」→「JDBC」→ 「 JDBCリソース」を選択し右ペインより「新規 &#8230;」ボタンを押下します．<br />
<span></span><br />
<IMG SRC="http://farm5.static.flickr.com/4010/4343347654_005f15a119.jpg"><br />
続いて，「JNDI 名」，「プール名」，有効状態のチェックをつけ「利用可能なターゲット」に対象のクラスタ(cluster1)を追加して「了解」ボタンを押下します．<br />
<span></span><br />
<IMG SRC="http://farm3.static.flickr.com/2793/4342611361_72e770d018.jpg"><br />
「了解」ボタンを押下すると下記の画面が表示され JDBC リソースの設定は完了します．以降アプリケーションはここで設定した &#8220;jdbc/mysql&#8221; を利用して DB<br />
に対して接続ができるようになります．<br />
<IMG SRC="http://farm3.static.flickr.com/2702/4343347742_801a183d39.jpg"></p>
<p>DBの設定情報の取得<br />
ここで，DB の設定可能な項目の一覧をリストしてみます．asadmin の get コマンドを実行して確認ができます．各設定項目は asadmin set コマンドで設定変更を更新できますので必要に応じて設定変更を行ってください．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin get &#8220;domain.resources.jdbc-connection-pool.MySQL-Pool.*&#8221;</strong><br />
domain.resources.jdbc-connection-pool.MySQL-Pool.allow-non-component-callers = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.associate-with-thread = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.connection-creation-retry-attempts = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.connection-creation-retry-interval-in-seconds = 10<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.connection-leak-reclaim = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.connection-leak-timeout-in-seconds = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.connection-validation-method = auto-commit<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.datasource-classname = com.mysql.jdbc.jdbc2.optional.MysqlDataSource<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.description =<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.fail-all-connections = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.idle-timeout-in-seconds = 300<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.is-connection-validation-required = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.is-isolation-level-guaranteed = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.lazy-connection-association = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.lazy-connection-enlistment = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.match-connections = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.max-connection-usage-count = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.max-pool-size = 32<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.max-wait-time-in-millis = 60000<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.name = MySQL-Pool<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.non-transactional-connections = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.pool-resize-quantity = 2<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowLoadLocalInfile = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowMultiQueries = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowNanAndInf = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AllowUrlInLocalInfile = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AlwaysSendSetIsolation = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoClosePStmtStreams = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoDeserialize = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoGenerateTestcaseScript = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoReconnectForPools = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.AutoSlowLog = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.BlobSendChunkSize = 1048576<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.BlobsAreStrings = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheCallableStatements = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheCallableStmts = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CachePrepStmts = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CachePreparedStatements = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheResultSetMetadata = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CacheServerConfiguration = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CallableStatementCacheSize = 100<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CallableStmtCacheSize = 100<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CapitalizeTypeNames = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ClientInfoProvider = com.mysql.jdbc.JDBC4CommentClientInfoProvider<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ClobberStreamingResults = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ConnectTimeout = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ContinueBatchOnError = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.CreateDatabaseIfNotExist = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.DatabaseName = MySQL<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.DefaultFetchSize = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.DontTrackOpenResources = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.DumpMetadataOnColumnNotFound = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.DumpQueriesOnException = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.DynamicCalendars = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ElideSetAutoCommits = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.EmptyStringsConvertToZero = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.EmulateLocators = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.EmulateUnsupportedPstmts = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.EnablePacketDebug = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.EnableQueryTimeouts = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ExplainSlowQueries = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.FailOverReadOnly = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.FunctionsNeverReturnBlobs = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.GatherPerfMetrics = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.GatherPerformanceMetrics = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.GenerateSimpleParameterMetadata = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.HoldResultsOpenOverStatementClose = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.IgnoreNonTxTables = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.IncludeInnodbStatusInDeadlockExceptions = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.InitialTimeout = 2<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.InteractiveClient = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.IsInteractiveClient = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.JdbcCompliantTruncation = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.JdbcCompliantTruncationForReads = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.LoadBalanceStrategy = random<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.LocatorFetchBufferSize = 1048576<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.LogSlowQueries = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.LogXaCommands = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.Logger = com.mysql.jdbc.log.StandardLogger<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.LoggerClassName = com.mysql.jdbc.log.StandardLogger<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.LoginTimeout = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaintainTimeStats = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaxQuerySizeToLog = 2048<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaxReconnects = 3<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.MaxRows = -1<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.MetadataCacheSize = 50<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.NetTimeoutForStreamingResults = 600<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.NoAccessToProcedureBodies = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.NoDatetimeStringSync = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.NoTimezoneConversionForTimeType = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.NullCatalogMeansCurrent = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.NullNamePatternMatchesAll = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.OverrideSupportsIntegrityEnhancementFacility = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PacketDebugBufferSize = 20<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PadCharsWithSpace = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.Paranoid = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.Password = password<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.Pedantic = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PinGlobalTxToPhysicalConnection = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PopulateInsertRowWithDefaultValues = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.Port = 3306<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PortNumber = 3306<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PrepStmtCacheSize = 25<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PrepStmtCacheSqlLimit = 256<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PreparedStatementCacheSize = 25<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.PreparedStatementCacheSqlLimit = 256<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ProcessEscapeCodesForPrepStmts = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ProfileSQL = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ProfileSql = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.QueriesBeforeRetryMaster = 50<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ReconnectAtTxEnd = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.RelaxAutoCommit = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ReportMetricsIntervalMillis = 30000<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.RequireSSL = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ResultSetSizeThreshold = 100<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.RewriteBatchedStatements = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.RollbackOnPooledClose = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.RoundRobinLoadBalance = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.RunningCTS13 = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.SecondsBeforeRetryMaster = 30<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ServerName = localhost<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.SlowQueryThresholdMillis = 2000<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.SlowQueryThresholdNanos = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.SocketFactory = com.mysql.jdbc.StandardSocketFactory<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.SocketFactoryClassName = com.mysql.jdbc.StandardSocketFactory<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.SocketTimeout = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.StrictFloatingPoint = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.StrictUpdates = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpKeepAlive = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpNoDelay = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpRcvBuf = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpSndBuf = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TcpTrafficClass = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TinyInt1isBit = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TraceProtocol = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TransformedBitIsBoolean = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.TreatUtilDateAsTimestamp = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.URL = jdbc:mysql://:3306/<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UltraDevHack = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.Url = jdbc:mysql://localhost:3306/test<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseBlobToStoreUTF8OutsideBMP = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseCompression = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseCursorFetch = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseDirectRowUnpack = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseDynamicCharsetInfo = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseFastDateParsing = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseFastIntParsing = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseGmtMillisForDatetimes = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseHostsInPrivileges = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseInformationSchema = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseJDBCCompliantTimezoneShift = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseJvmCharsetConverters = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseLocalSessionState = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseNanosForElapsedTime = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseOldAliasMetadataBehavior = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseOldUTF8Behavior = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseOnlyServerErrorMessages = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseReadAheadInput = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseSSL = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseSSPSCompatibleTimezoneShift = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseServerPrepStmts = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseServerPreparedStmts = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseSqlStateCodes = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseStreamLengthsInPrepStmts = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseTimezone = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUltraDevWorkAround = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUnbufferedInput = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUnicode = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.UseUsageAdvisor = false<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.User = root<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.YearIsDateType = true<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.property.ZeroDateTimeBehavior = exception<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.res-type = javax.sql.DataSource<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.statement-timeout-in-seconds = -1<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.steady-pool-size = 8<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.transaction-isolation-level =<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.validate-atmost-once-period-in-seconds = 0<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.validation-table-name =<br />
domain.resources.jdbc-connection-pool.MySQL-Pool.wrap-jdbc-objects = false
</td>
</tr>
</tbody>
</table>
<p><span></span><br />
コネックションプールのモニタリング<br />
最後に、JDBC の接続プールに対してモニタリングの設定を行う方法を紹介します．モニタリングを有効にするために下記の手順に従い設定を行い，確認してください．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin list &#8220;*monitor*&#8221;</strong><br />
server.monitoring-service<br />
server.monitoring-service.module-monitoring-levels<br />
dashost &gt; <strong>asadmin set &#8220;server.monitoring-service.module-monitoring-levels.jdbc-connection-pool=HIGH&#8221;</strong><br />
server.monitoring-service.module-monitoring-levels.jdbc-connection-pool = HIGH<br />
dashost &gt; <strong>asadmin get &#8220;server.monitoring-service.module-monitoring-levels.*&#8221;</strong><br />
server.monitoring-service.module-monitoring-levels.connector-connection-pool = OFF<br />
server.monitoring-service.module-monitoring-levels.connector-service = OFF<br />
server.monitoring-service.module-monitoring-levels.ejb-container = OFF<br />
server.monitoring-service.module-monitoring-levels.http-service = OFF<br />
server.monitoring-service.module-monitoring-levels.jdbc-connection-pool = HIGH<br />
server.monitoring-service.module-monitoring-levels.jms-service = OFF<br />
server.monitoring-service.module-monitoring-levels.jvm = OFF<br />
server.monitoring-service.module-monitoring-levels.orb = OFF<br />
server.monitoring-service.module-monitoring-levels.thread-pool = OFF<br />
server.monitoring-service.module-monitoring-levels.transaction-service = OFF<br />
server.monitoring-service.module-monitoring-levels.web-container = OFF<br />
dashost &gt; <strong>asadmin list &#8211;monitor=true &#8220;*MySQL*&#8221;</strong><br />
server.resources.MySQL-Pool<br />
dashost &gt; <strong>asadmin get &#8211;monitor=true &#8220;server.resources.MySQL-Pool.*&#8221;</strong></td>
</tr>
</tbody>
</table>
<p><span></span></p>
<br />カテゴリー:<a href='http://yoshio3.com/category/application-serverglassfish/'>Application Server/GlassFish</a> Tagged: <a href='http://yoshio3.com/tag/administration/'>Administration</a>, <a href='http://yoshio3.com/tag/%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9/'>データベース</a>, <a href='http://yoshio3.com/tag/glassfish/'>GlassFish</a>, <a href='http://yoshio3.com/tag/jdbc/'>JDBC</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/647/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=647&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/08/glassfish-%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e8%a8%ad%e5%ae%9a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>
	</item>
		<item>
		<title>GlassFish SSLの設定(クライアント認証)</title>
		<link>http://yoshio3.com/2010/02/08/glassfish-ssl%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%aa%8d%e8%a8%bc/</link>
		<comments>http://yoshio3.com/2010/02/08/glassfish-ssl%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%aa%8d%e8%a8%bc/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 02:44:38 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[Application Server/GlassFish]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[クライアント認証]]></category>
		<category><![CDATA[GlassFish]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=643</guid>
		<description><![CDATA[GlassFish のドメイン管理サーバ上でHTTP リスナーの設定をクライアント認証対応に変更




dashost &#62; asadmin set “cluster1-config.http-service.http-listener.http-listener-2.ssl.client-auth-enabled = true”




クライアント証明書の秘密鍵を作成





ca-admin &#62; openssl genrsa -des3 -out /tmp/client-private-key 2048
Generating RSA private key, 2048 bit long modulus
&#8230;&#8230;&#8230;.+++
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.+++
e is 65537 (0&#215;10001)
Enter pass phrase for /tmp/client-private-key:
Verifying &#8211; Enter pass phrase for /tmp/client-private-key:




クライアント証明書用のCSRを作成
下記の例では便宜上，認証局(CA)上で CSR を生成していますが，CSRの生成はどの環境で構築しても問題ありません．




ca-admin &#62; openssl req -new -days 365 -key /tmp/client-private-key -out /tmp/clientcsr.pem
Enter pass phrase for /tmp/client-private-key:
You are about to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=643&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>GlassFish のドメイン管理サーバ上でHTTP リスナーの設定をクライアント認証対応に変更</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin set “cluster1-config.http-service.http-listener.http-listener-2.ssl.client-auth-enabled = true”</strong><br />
</tr>
</tbody>
</table>
<p><span></span></p>
<p>クライアント証明書の秘密鍵を作成</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">
ca-admin &gt; <strong>openssl genrsa -des3 -out /tmp/client-private-key 2048</strong><br />
Generating RSA private key, 2048 bit long modulus<br />
&#8230;&#8230;&#8230;.+++<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.+++<br />
e is 65537 (0&#215;10001)<br />
Enter pass phrase for /tmp/client-private-key:<br />
Verifying &#8211; Enter pass phrase for /tmp/client-private-key:</td>
</tr>
</tbody>
</table>
<p><span></span><br />
クライアント証明書用のCSRを作成</p>
<p>下記の例では便宜上，認証局(CA)上で CSR を生成していますが，CSRの生成はどの環境で構築しても問題ありません．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">ca-admin &gt; <strong>openssl req -new -days 365 -key /tmp/client-private-key -out /tmp/clientcsr.pem</strong><br />
Enter pass phrase for /tmp/client-private-key:<br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter &#8216;.&#8217;, the field will be left blank.<br />
&#8212;&#8211;<br />
Country Name (2 letter code) [AU]:<strong>JP</strong><br />
State or Province Name (full name) [Some-State]:<strong>Tokyo</strong><br />
Locality Name (eg, city) []:<strong>Setagaya</strong><br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<strong>Sun Microsystems</strong><br />
Organizational Unit Name (eg, section) []:<strong>Software Practice</strong><br />
Common Name (eg, YOUR name) []:<strong>Tarou Yamada</strong><br />
Email Address []:<strong>Tarou.Yamada@Sun.COM</strong></p>
<p>Please enter the following &#8216;extra&#8217; attributes<br />
to be sent with your certificate request<br />
A challenge password []:<br />
An optional company name []:</td>
</tr>
</tbody>
</table>
<p><span></span><br />
認証局(CA)でクライアント証明書を署名</p>
<p>クライアント証明書のCSRを認証局(CA)で署名します。</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">ca-admin &gt; <strong>openssl ca -config ./openssl-client.cnf -in /tmp/clientcsr.pem -out /tmp/signed-clientcert.pem</strong><br />
Using configuration from ./openssl-client.cnf<br />
Enter pass phrase for ./demoCA/private/cakey.pem:<br />
Check that the request matches the signatureSignature ok<br />
Certificate Details:<br />
Serial Number:<br />
cd:ea:db:f4:c8:e3:93:92<br />
Validity<br />
Not Before: Dec  4 08:27:14 2009 GMT<br />
Not After : Dec  4 08:27:14 2010 GMT<br />
(省略)</td>
</tr>
</tbody>
</table>
<p><span></span><br />
署名されたクライアント証明書をGlassFishのキーストアにインポートするため，X.509形式に変更</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">ca-admin &gt; <strong>openssl x509 -in /tmp/signed-clientcert.pem -out /tmp/signed-clientcert.x509</strong></td>
</tr>
</tbody>
</table>
<p><span></span><br />
GlassFishのキーストアに対してクライアント証明書をインポート</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -import -alias yamada -file /tmp/signed-clientcert.x509</strong><br />
キーストアのパスワードを入力してください:[<strong>changeit</strong>]<br />
新規パスワードを再入力してください:[<strong>changeit</strong>]<br />
所有者: EMAILADDRESS=Tarou.Yamada@Sun.COM, CN=Tarou Yamada, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP<br />
発行者: EMAILADDRESS=caadmin@Sun.COM, CN=ca-server.sun.com, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP<br />
シリアル番号: cdeadbf4c8e39392<br />
有効期間の開始日: Fri Dec 04 17:27:14 JST 2009 終了日: Sat Dec 04 17:27:14 JST 2010<br />
証明書のフィンガープリント:<br />
MD5:  59:06:3C:95:79:5D:31:D7:A3:92:0E:AA:A2:23:73:6D<br />
SHA1: 26:00:30:F1:15:DB:20:D4:8E:AF:99:AB:96:13:CB:17:DA:E5:71:15<br />
署名アルゴリズム名: SHA1withRSA<br />
バージョン: 3<br />
(省略)<br />
この証明書を信頼しますか? [no]:  <strong>yes</strong><br />
証明書がキーストアに追加されました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
クライアント証明書をブラウザにインポートするためPKCS12形式に変換</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">ca-admin &gt; <strong>openssl pkcs12 -export -in /tmp/signed-clientcert.pem -inkey /tmp/client-private-key -certfile ./demoCA/cacert.pem -out /tmp/clientcert.p12</strong><br />
Enter pass phrase for /tmp/client-private-key:<br />
Enter Export Password:<br />
Verifying &#8211; Enter Export Password:<br />
ca-admin &gt; <strong>ls -l /tmp/clientcert.p12</strong><br />
-rw-r&#8211;r&#8211;   1 root     root        3525 12月  4日  17:29 /tmp/clientcert.p12</td>
</tr>
</tbody>
</table>
<p><span></span><br />
最後にブラウザにPKCS12形式のクライアント証明書をインポートします．</p>
<p>上記で設定は完了です，ブラウザからアクセスしてみてください．</p>
<br />カテゴリー:<a href='http://yoshio3.com/category/application-serverglassfish/'>Application Server/GlassFish</a> Tagged: <a href='http://yoshio3.com/tag/administration/'>Administration</a>, <a href='http://yoshio3.com/tag/%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%aa%8d%e8%a8%bc/'>クライアント認証</a>, <a href='http://yoshio3.com/tag/glassfish/'>GlassFish</a>, <a href='http://yoshio3.com/tag/ssl/'>SSL</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/643/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=643&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/08/glassfish-ssl%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%aa%8d%e8%a8%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>
	</item>
		<item>
		<title>GlassFish SSLの設定　(サーバ証明書の設定)</title>
		<link>http://yoshio3.com/2010/02/05/glassfish-ssl%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%80%80%e3%82%b5%e3%83%bc%e3%83%90%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e8%a8%ad%e5%ae%9a/</link>
		<comments>http://yoshio3.com/2010/02/05/glassfish-ssl%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%80%80%e3%82%b5%e3%83%bc%e3%83%90%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e8%a8%ad%e5%ae%9a/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 09:29:01 +0000</pubDate>
		<dc:creator>Yoshio Terada</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yoshio3.com/?p=640</guid>
		<description><![CDATA[※ GlassFish で証明書の管理や鍵の管理を行う場合、
管理コンソールからは行えません．コマンドを使用してください．
SSLの設定(サーバ認証の設定)
クライアントのWebブラウザからサーバに対してSSL通信を行う場合，通常アプリケーションサーバの前段に配置するロードバランサもしくはリバースプロキシなどのシステムでSSL設定を行い，前段のシステムとアプリケーションサーバ間はSSLによる通信を行わない場合が多いです．しかしミッションクリティカルな環境では，前段のシステムとアプリケーションサーバ間もセキュアな通信路を確保する必要があリます．そのような場合，アプリケーションサーバ上でもSSLのサーバ証明書を設定する必要があります．ここでは前段のシステムからSSLで負荷分散されることを想定しクラスタ環境に対してSSLの設定を行う方法について紹介します．単一サーバインスタンスに対する設定を行う場合も基本的には同様の手続きで可能ですので参考にしてください．
今回紹介するクラスタ環境におけるSSL証明書管理の利点は，クラスタ構成に対して一度だけ設定を行えばクラスタに所属する全てのインスタンスに対して共通のSSL設定が有効になりますので，管理するマシンの台数が多い場合非常に便利です。
GlassFishのSSL設定はサーバ証明書のニックネームを変更する以外の殆どの設定操作をコマンドを使用して行います．そこで以下の説明では全ての操作をコマンドを使用して管理する方法を紹介します．
また，下記の手順は開発者プロファイル，クラスタプロファイル(Sun GlassFish Enterprise Server/OSS版GlassFish)を使用した場合の方法を紹介します．開発者プロファイル，クラスタプロファイルを使用する場合，証明書の管理にJava SEに付属するkeytoolを使用して管理します．エンタープライズプロファイル(Sun GlassFish Enterprise Server with HADB)を使用する場合は，NSS (Network Security Service)のcertutilコマンドやライブラリを使用します．certutilコマンドを使用した証明書管理方法は別途「GlassFish Enteprise Server管理ガイド」をご参照ください．
既存の自己署名証明書の確認
keytoolの-listコマンドを使用してGlassFishのインストール時に，デフォルトでインストールされている証明書を確認できます．証明書のキーストアはドメインのconfigディレクトリ中に存在しています．keystore.jksにはサーバ証明書などを格納します．またcacerts.jksには認証局(CA)の証明書などを格納します．




dashost &#62; cd /export/home/appserv/domains/clusterDomain/config/
dashost &#62; ls keystore.jks cacerts.jks 
cacerts.jks   keystore.jks
dashost &#62; keytool -list -keystore ./keystore.jks -alias s1as -storepass changeit
s1as, 2009/12/03, PrivateKeyEntry,
証明書のフィンガープリント (MD5): E7:3A:3C:2A:F1:AE:7D:E8:72:0D:E5:A7:AE:87:97:DA
dashost &#62; keytool -list -keystore cacerts.jks  -alias s1as -storepass changeit
s1as, 2009/12/03, trustedCertEntry,
証明書のフィンガープリント (MD5): E7:3A:3C:2A:F1:AE:7D:E8:72:0D:E5:A7:AE:87:97:DA




鍵のペア(公開鍵および関連する非公開鍵)の生成
keytoolの-genkeypairコマンドを使用して鍵のペアを生成します．クラスタ環境では実際の接続先はクラスタに所属するノードエージェントのホスト名になるため，CNにワイルドカードでホスト名を指定(*.japan.sun.com)することをおすすめします．ワイルドカードを使用すると，実際の接続先がnodeagent1.japan.sun.comやnodeagent2.japan.sun.comであった場合も正当なサーバ証明書として利用できます．単一のサーバインスタンスに対するサーバ証明書を作成する際は，CNに対してサーバ名をFQDN(www.japan.sun.com)で指定してください．




dashost [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=640&subd=yoshioterada&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><strong>※ GlassFish で証明書の管理や鍵の管理を行う場合、<br />
管理コンソールからは行えません．コマンドを使用してください．</strong></p>
<h3>SSLの設定(サーバ認証の設定)</h3>
<p>クライアントのWebブラウザからサーバに対してSSL通信を行う場合，通常アプリケーションサーバの前段に配置するロードバランサもしくはリバースプロキシなどのシステムでSSL設定を行い，前段のシステムとアプリケーションサーバ間はSSLによる通信を行わない場合が多いです．しかしミッションクリティカルな環境では，前段のシステムとアプリケーションサーバ間もセキュアな通信路を確保する必要があリます．そのような場合，アプリケーションサーバ上でもSSLのサーバ証明書を設定する必要があります．ここでは前段のシステムからSSLで負荷分散されることを想定しクラスタ環境に対してSSLの設定を行う方法について紹介します．単一サーバインスタンスに対する設定を行う場合も基本的には同様の手続きで可能ですので参考にしてください．</p>
<p>今回紹介するクラスタ環境におけるSSL証明書管理の利点は，クラスタ構成に対して一度だけ設定を行えばクラスタに所属する全てのインスタンスに対して共通のSSL設定が有効になりますので，管理するマシンの台数が多い場合非常に便利です。<br />
GlassFishのSSL設定はサーバ証明書のニックネームを変更する以外の殆どの設定操作をコマンドを使用して行います．そこで以下の説明では全ての操作をコマンドを使用して管理する方法を紹介します．</p>
<p>また，下記の手順は開発者プロファイル，クラスタプロファイル(Sun GlassFish Enterprise Server/OSS版GlassFish)を使用した場合の方法を紹介します．開発者プロファイル，クラスタプロファイルを使用する場合，証明書の管理にJava SEに付属するkeytoolを使用して管理します．エンタープライズプロファイル(Sun GlassFish Enterprise Server with HADB)を使用する場合は，NSS (Network Security Service)のcertutilコマンドやライブラリを使用します．certutilコマンドを使用した証明書管理方法は別途「GlassFish Enteprise Server管理ガイド」をご参照ください．</p>
<h3>既存の自己署名証明書の確認</h3>
<p>keytoolの-listコマンドを使用してGlassFishのインストール時に，デフォルトでインストールされている証明書を確認できます．証明書のキーストアはドメインのconfigディレクトリ中に存在しています．keystore.jksにはサーバ証明書などを格納します．またcacerts.jksには認証局(CA)の証明書などを格納します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>cd /export/home/appserv/domains/clusterDomain/config/</strong><br />
dashost &gt; <strong>ls keystore.jks cacerts.jks </strong><br />
cacerts.jks   keystore.jks<br />
dashost &gt; <strong>keytool -list -keystore ./keystore.jks -alias s1as -storepass changeit</strong><br />
s1as, 2009/12/03, PrivateKeyEntry,<br />
証明書のフィンガープリント (MD5): E7:3A:3C:2A:F1:AE:7D:E8:72:0D:E5:A7:AE:87:97:DA<br />
dashost &gt; <strong>keytool -list -keystore cacerts.jks  -alias s1as -storepass changeit</strong><br />
s1as, 2009/12/03, trustedCertEntry,<br />
証明書のフィンガープリント (MD5): E7:3A:3C:2A:F1:AE:7D:E8:72:0D:E5:A7:AE:87:97:DA</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>鍵のペア(公開鍵および関連する非公開鍵)の生成</h3>
<p>keytoolの-genkeypairコマンドを使用して鍵のペアを生成します．クラスタ環境では実際の接続先はクラスタに所属するノードエージェントのホスト名になるため，CNにワイルドカードでホスト名を指定(*.japan.sun.com)することをおすすめします．ワイルドカードを使用すると，実際の接続先がnodeagent1.japan.sun.comやnodeagent2.japan.sun.comであった場合も正当なサーバ証明書として利用できます．単一のサーバインスタンスに対するサーバ証明書を作成する際は，CNに対してサーバ名をFQDN(www.japan.sun.com)で指定してください．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -genkeypair -alias cluster -keystore keystore.jks -keyalg RSA -keysize 2048 -validity 365 -dname &#8220;CN=*.japan.sun.com, OU=Software Practice, O=Sun Microsystems, L=Setagaya, ST=Tokyo, C=JP&#8221; -storepass changeit -keypass changeit</strong></td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>証明書署名要求(CSR)の生成</h3>
<p>keytool の-certreqコマンドを使用して証明書署名要求(CSR)を作成します．クラスタ環境における実際の接続先はクラスタに所属するノードエージェント上のインスタンスになるため，ワイルドカードでホスト名を指定することをおすすめします．ワイルドカードを使用すると，実際の接続先がnodeagent1.japan.sun.comやnodeagent2.japan.sun.comであった場合も正当なサーバ証明書として利用できます．(単一のサーバインスタンスに対してサーバ証明書を作成する際は，*(アスタリスク)の代わりにサーバ名をFQDNで指定してください．)</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -certreq -alias cluster -keystore ./keystore.jks -file cluster.japan.sun.com.csr -storepass changeit</strong></td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>署名前のサーバ証明書の確認</h3>
<p>下記のコマンドを実行しkeytoolで作成したCSRの内容を確認します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>openssl req -text -in ./cluster.japan.sun.com.csr </strong><br />
Certificate Request:<br />
Data:<br />
Version: 0 (0&#215;0)<br />
Subject: C=JP, ST=Tokyo, L=Setagaya, O=Sun Microsystems, OU=Software Practice, CN=*.japan.sun.com<br />
Subject Public Key Info:<br />
Public Key Algorithm: rsaEncryption<br />
RSA Public Key: (2048 bit)<br />
(省略)</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>認証局(CA)でサーバ証明書を署名</h3>
<p>GlassFish 上で生成した CSR を元に認証局で署名を行います．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">ca-server &gt; <strong>openssl ca -in cluster.japan.sun.com.csr -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out /tmp/signed-cluster.japan.sun.com.cert</strong><br />
Using configuration from /usr/local/ssl/openssl.cnf<br />
Enter pass phrase for ./demoCA/private/cakey.pem:<br />
Check that the request matches the signature<br />
Signature ok<br />
Certificate Details:<br />
Serial Number:<br />
cd:ea:db:f4:c8:e3:93:8f<br />
(省略)<br />
Certificate is to be certified until Dec  3 11:23:45 2010 GMT (365 days)<br />
Sign the certificate? [y/n]: <strong>y</strong><br />
1 out of 1 certificate requests certified, commit? [y/n] <strong>y</strong><br />
Write out database with 1 new entries<br />
Data Base Updated</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>認証局(CA)でサーバ証明書をバイナリ(DER)形式に変換</h3>
<p>keytool で証明書(鍵)データベースに保存するため，署名された証明書(signed-cluster.japan.sun.com.cert)をバイナリ(DER)形式(signed-cluster.japan.sun.com.der)に変換します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">ca-server &gt; <strong>openssl x509 -in /tmp/signed-cluster.japan.sun.com.cert -outform DER -out /tmp/signed-cluster.japan.sun.com.der</strong></td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>認証局(CA)の証明書(cecert.pem)からX.509形式の証明書を準備</h3>
<p>自己認証局によって署名されたサーバ証明書をGlassFishにインポートする前に，認証機関の証明書をGlassFishの証明書(鍵)データベースにインポートする必要があります．下記のように認証局のX.509形式のフォーマットを別ファイルにコピー＆ペーストして保存してください．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>vi cacert.x509</strong><br />
&#8220;cacert.x509&#8243; [新規ファイル]<br />
&#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211;<br />
MIIDmTCCAwKgAwIBAgIJAM3q2/TI45OEMA0GCSqGSIb3DQEBBQUAMIGQMQswCQYD<br />
VQQGEwJKUDEOMAwGA1UECBMFVG9reW8xGTAXBgNVBAoTEFN1biBNaWNyb3N5c3Rl<br />
bXMxGjAYBgNVBAsTEVNvZnR3YXJlIFByYWN0aWNlMRowGAYDVQQDExFjYS1zZXJ2<br />
ZXIuc3VuLmNvbTEeMBwGCSqGSIb3DQEJARYPY2FhZG1pbkBTdW4uQ09NMB4XDTA5<br />
MTEwOTA0NDAwOVoXDTEyMTEwODA0NDAwOVowgZAxCzAJBgNVBAYTAkpQMQ4wDAYD<br />
VQQIEwVUb2t5bzEZMBcGA1UEChMQU3VuIE1pY3Jvc3lzdGVtczEaMBgGA1UECxMR<br />
U29mdHdhcmUgUHJhY3RpY2UxGjAYBgNVBAMTEWNhLXNlcnZlci5zdW4uY29tMR4w<br />
HAYJKoZIhvcNAQkBFg9jYWFkbWluQFN1bi5DT00wgZ8wDQYJKoZIhvcNAQEBBQAD<br />
gY0AMIGJAoGBALbumBZl+9qUSGdxADtmgW8JRlriRmwOgOoYyrifayZz7to2SB09<br />
+gk7alqzEFz1vFA2jUZu4X8veWMP/PLFvmjwPVXtSbk3HeRWosinb0ge49sX1/Nl<br />
GOe90wGQzxci30O6V8FlHo1bWt9p/SSXZzLAtSn9Y5Au1GlpGHO4gL4hAgMBAAGj<br />
gfgwgfUwHQYDVR0OBBYEFB24TDDMoTWycjWgisz6+RecxNJKMIHFBgNVHSMEgb0w<br />
gbqAFB24TDDMoTWycjWgisz6+RecxNJKoYGWpIGTMIGQMQswCQYDVQQGEwJKUDEO<br />
MAwGA1UECBMFVG9reW8xGTAXBgNVBAoTEFN1biBNaWNyb3N5c3RlbXMxGjAYBgNV<br />
BAsTEVNvZnR3YXJlIFByYWN0aWNlMRowGAYDVQQDExFjYS1zZXJ2ZXIuc3VuLmNv<br />
bTEeMBwGCSqGSIb3DQEJARYPY2FhZG1pbkBTdW4uQ09NggkAzerb9Mjjk4QwDAYD<br />
VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAyiypjUnJBMMyy615ZYM3oOUYZ<br />
3UgwLOnos/rGGCov9CIcxiLH8PcXc3IXRYgRFDqINRhSqfDrjt4YP9cz4QmEbNqy<br />
9wPxrje4HPYZU+AKErN7Wt058dKFSeA+Wp2JsDiwdoARy4Ow/j/tkhVoOm07E3fM<br />
TbEdS42dtkHlBgdSrw==<br />
&#8212;&#8211;END CERTIFICATE&#8212;&#8211;</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>GlassFish 上で認証局の証明書をインポート</h3>
<p>認証期間の署名書(cacert.x509)を，GlassFishが稼働するマシン上にコピーしそれぞれ証明書データベース，鍵データベースにインポートしてください．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -import -file /tmp/cacert.x509 -trustcacerts -alias private-ca -keystore keystore.jks -storepass changeit</strong><br />
所有者: EMAILADDRESS=caadmin@Sun.COM, CN=ca-server.sun.com, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP<br />
発行者: EMAILADDRESS=caadmin@Sun.COM, CN=ca-server.sun.com, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP<br />
シリアル番号: cdeadbf4c8e39384<br />
有効期間の開始日: Mon Nov 09 13:40:09 JST 2009 終了日: Thu Nov 08 13:40:09 JST 2012<br />
証明書のフィンガープリント:<br />
MD5:  7C:21:2B:4A:DF:A4:5D:BF:78:1D:56:22:54:3F:4E:48<br />
SHA1: 00:3C:55:1E:34:60:FC:77:24:38:7E:64:39:C4:38:48:79:92:2F:31<br />
署名アルゴリズム名: SHA1withRSA<br />
バージョン: 3<br />
(省略)<br />
この証明書を信頼しますか? [no]:  <strong>yes</strong><br />
証明書がキーストアに追加されました。</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -import -file /tmp/cacert.x509 -trustcacerts -alias private-ca -keystore cacerts.jks  -storepass changeit</strong><br />
所有者: EMAILADDRESS=caadmin@Sun.COM, CN=ca-server.sun.com, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP<br />
発行者: EMAILADDRESS=caadmin@Sun.COM, CN=ca-server.sun.com, OU=Software Practice, O=Sun Microsystems, ST=Tokyo, C=JP<br />
シリアル番号: cdeadbf4c8e39384<br />
有効期間の開始日: Mon Nov 09 13:40:09 JST 2009 終了日: Thu Nov 08 13:40:09 JST 2012<br />
証明書のフィンガープリント:<br />
MD5:  7C:21:2B:4A:DF:A4:5D:BF:78:1D:56:22:54:3F:4E:48<br />
SHA1: 00:3C:55:1E:34:60:FC:77:24:38:7E:64:39:C4:38:48:79:92:2F:31<br />
署名アルゴリズム名: SHA1withRSA<br />
バージョン: 3<br />
(省略)<br />
この証明書を信頼しますか? [no]:  <strong>yes</strong><br />
証明書がキーストアに追加されました。</td>
</tr>
</tbody>
</table>
<p><span></span></p>
<h3>GlassFish上で認証局(CA)で署名されたサーバ証明書をインポート</h3>
<p>認証局の証明書をインポートした後に，認証局で署名されたバイナリ(DER)形式のサーバ証明書を鍵データベースにインポートします。この時このサーバ証明書を識別するためのエイリアスとして cluster という名前を設定して実行します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -import -alias cluster -file /tmp/signed-cluster.japan.sun.com.der -keystore keystore.jks -storepass changeit</strong><br />
証明書応答がキーストアにインストールされました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
署名済みサーバ証明書をインポートした後，鍵データベースの内容を確認してみましょう．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>keytool -list -keystore keystore.jks -storepass changeit</strong><br />
キーストアのタイプ: JKS<br />
キーストアのプロバイダ: SUN<br />
キーストアには 3 エントリが含まれます。<br />
cluster, 2009/12/03, PrivateKeyEntry,<br />
証明書のフィンガープリント (MD5): 2A:50:2A:50:1E:B9:3F:42:DB:4C:AF:8D:48:38:AB:05<br />
private-ca, 2009/12/03, trustedCertEntry,<br />
証明書のフィンガープリント (MD5): 7C:21:2B:4A:DF:A4:5D:BF:78:1D:56:22:54:3F:4E:48<br />
s1as, 2009/12/03, PrivateKeyEntry,<br />
証明書のフィンガープリント (MD5): B0:69:F8:C5:C0:09:44:D7:0C:9A:06:4B:33:53:E0:05</td>
</tr>
</tbody>
</table>
<p><span></span><br />
次に，インポートしたサーバ証明書をクラスタ環境で利用できるように，クラスタで使用するSSLのサーバ証明書ニックネームを全てs1asからcluster変更します．クラスタ設定で s1as を参照するSSLの設定一覧を表示し確認します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin get &#8220;*&#8221; | grep cluster1 | grep s1as </strong><br />
cluster1-config.admin-service.jmx-connector.system.ssl.cert-nickname = s1as<br />
cluster1-config.http-service.http-listener.http-listener-2.ssl.cert-nickname = s1as<br />
cluster1-config.iiop-service.iiop-listener.SSL.ssl.cert-nickname = s1as<br />
cluster1-config.iiop-service.iiop-listener.SSL_MUTUALAUTH.ssl.cert-nickname = s1as<br />
cluster1.admin-service.jmx-connector.system.ssl.cert-nickname = s1as<br />
cluster1.http-service.http-listener.http-listener-2.ssl.cert-nickname = s1as<br />
cluster1.iiop-service.iiop-listener.SSL.ssl.cert-nickname = s1as<br />
cluster1.iiop-service.iiop-listener.SSL_MUTUALAUTH.ssl.cert-nickname = s1as</td>
</tr>
</tbody>
</table>
<p><span></span><br />
s1as の証明書ニックネームを参照している全ての設定をasadmin setコマンドを使用してclusterに変更します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin set cluster1-config.admin-service.jmx-connector.system.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1-config.http-service.http-listener.http-listener-2.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1-config.iiop-service.iiop-listener.SSL.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1-config.iiop-service.iiop-listener.SSL_MUTUALAUTH.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1.admin-service.jmx-connector.system.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1.http-service.http-listener.http-listener-2.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1.iiop-service.iiop-listener.SSL.ssl.cert-nickname=cluster</strong><br />
dashost &gt; <strong>asadmin set cluster1.iiop-service.iiop-listener.SSL_MUTUALAUTH.ssl.cert-nickname=cluster</strong></td>
</tr>
</tbody>
</table>
<p><span></span><br />
上記で，GlassFish のサーバ証明書の設定はすべて完了です．設定内容を反映させるため，最後にクラスタを再起動します．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin stop-cluster cluster1</strong><br />
クラスタ化されたインスタンス instance1 の停止に成功しました。<br />
クラスタ化されたインスタンス instance2 の停止に成功しました。<br />
コマンド stop-cluster は正常に実行されました。<br />
dashost &gt; <strong>asadmin start-cluster cluster1</strong><br />
クラスタ化されたインスタンス instance1 の起動に成功しました。<br />
クラスタ化されたインスタンス instance2 の起動に成功しました。<br />
コマンド start-cluster は正常に実行されました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
ブラウザからアクセスして証明書の内容を表示すると，<br />
ca-server.sun.comによって署名されたサーバ証明書を確認できます．</p>
<div class="wp-caption aligncenter" style="width: 487px"><img title="ブラウザでサーバ証明書の内容を確認" src="http://farm5.static.flickr.com/4041/4331548211_1e0664d33a.jpg" alt="ブラウザでサーバ証明書の内容を確認" width="477" height="500" /><p class="wp-caption-text">ブラウザでサーバ証明書の内容を確認</p></div>
<h3>SSL 設定に関するデバッグ方法</h3>
<p>最後に、SSLの設定に関するデバッグ方法を紹介します．SSLの設定で何らかの問題が発生した場合は，下記コマンドを実行して各インスタンスのログを確認してください．</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="256*"></col>
<tbody>
<tr>
<td width="100%" valign="TOP">dashost &gt; <strong>asadmin create-jvm-options &#8211;target cluster1 &#8220;-Djavax.net.debug=ssl&#8221;</strong><br />
コマンド create-jvm-options は正常に実行されました。<br />
dashost &gt; <strong>asadmin stop-cluster cluster1</strong><br />
クラスタ化されたインスタンス instance1 の停止に成功しました。<br />
クラスタ化されたインスタンス instance2 の停止に成功しました。<br />
コマンド stop-cluster は正常に実行されました。<br />
dashost &gt; <strong>asadmin start-cluster cluster1</strong><br />
クラスタ化されたインスタンス instance1 の起動に成功しました。<br />
クラスタ化されたインスタンス instance2 の起動に成功しました。<br />
コマンド start-cluster は正常に実行されました。</td>
</tr>
</tbody>
</table>
<p><span></span><br />
証明書失効リスト(CRL)のチェック方法については下記のブログを参照してください．</p>
<p>http://weblogs.java.net/blog/kumarjayanti/archive/2007/11/ssl_and_crl_che.html</p>
<br />カテゴリー:<a href='http://yoshio3.com/category/%e6%9c%aa%e5%88%86%e9%a1%9e/'>未分類</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoshioterada.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoshioterada.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoshioterada.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoshioterada.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoshioterada.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoshioterada.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoshioterada.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoshioterada.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoshioterada.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoshioterada.wordpress.com/640/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoshio3.com&blog=11776107&post=640&subd=yoshioterada&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://yoshio3.com/2010/02/05/glassfish-ssl%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%80%80%e3%82%b5%e3%83%bc%e3%83%90%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e8%a8%ad%e5%ae%9a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5b5cf8e8e2343a2915d94e1ca6f26e2?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">yosshi</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4041/4331548211_1e0664d33a.jpg" medium="image">
			<media:title type="html">ブラウザでサーバ証明書の内容を確認</media:title>
		</media:content>
	</item>
	</channel>
</rss>