<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>NetBeans</title><link>http://blogs.wankuma.com/kazuki/category/1423.aspx</link><description>NetBeans</description><managingEditor>k.ota.0130あっとgmail.com(かずき)</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>k.ota.0130@gmail.com(かずき)</dc:creator><title>[Java][NetBeans][NetBeans Plugin]Visitorを使わないで選択されたクラスの情報にアクセスする</title><link>http://blogs.wankuma.com/kazuki/archive/2010/03/04/186717.aspx</link><pubDate>Thu, 04 Mar 2010 01:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2010/03/04/186717.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/186717.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2010/03/04/186717.aspx#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/186717.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/186717.aspx</trackback:ping><description>&lt;p&gt;昔書いた記事で、TreePathScannerを使ってVisitorパターンを使ってクラスの情報をとってきてました。 &lt;p&gt;&lt;a href="http://blogs.wankuma.com/kazuki/archive/2007/12/20/113814.aspx"&gt;http://blogs.wankuma.com/kazuki/archive/2007/12/20/113814.aspx&lt;/a&gt; &lt;p&gt;これ以外にも、やり方があることがわかったのでメモしておきます。2年越しの関連記事になります。 &lt;p&gt;&lt;a href="http://d.hatena.ne.jp/okazuki/20100303/1267630951"&gt;続きを読む&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/186717.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans]がっかりなこと</title><link>http://blogs.wankuma.com/kazuki/archive/2009/07/31/179619.aspx</link><pubDate>Fri, 31 Jul 2009 15:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/07/31/179619.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/179619.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/07/31/179619.aspx#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/179619.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/179619.aspx</trackback:ping><description>&lt;p&gt;NetBeans6.7.1が出たりして、前ならウキウキしたけど、今はそんなでもない。&lt;br&gt;何故かというと、Visual Webがだんだんフェードアウトしてるからです。&lt;br&gt;ICEfacesに期待！と思ったけど、RADでぽとぺた開発したければ、NetBeans6.5使えってなってるし、Webの画面をRADで作れるのが１つEclipseと差別化できる点だと思ってただけに残念でならない。&lt;br&gt;（Eclipseにもポトペタ画面開発あるけど超イマイチで使う気にならない）&lt;/p&gt; &lt;p&gt;最近はEclipseを使うことが多くなってきた。&lt;/p&gt; &lt;p&gt;Visual Webがbeta…。alpha…。とダウングレードしていって消えていきそうで怖い。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/179619.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Java]NetBeans6.7登場！</title><link>http://blogs.wankuma.com/kazuki/archive/2009/06/30/176818.aspx</link><pubDate>Tue, 30 Jun 2009 20:34:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/06/30/176818.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/176818.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/06/30/176818.aspx#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/176818.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/176818.aspx</trackback:ping><description>&lt;p&gt;正式版がリリースされました！！！&lt;br&gt;枯れてきたEclipseと違って、毎回大掛かりな新機能とかがあるぶんNetBeansのほうが新バージョンが出るときにわくわくします。&lt;/p&gt; &lt;p&gt;早速DLしてみようかな。&lt;br&gt;&lt;a href="http://ja.netbeans.org"&gt;http://ja.netbeans.org&lt;/a&gt;&lt;/p&gt; &lt;p&gt;リリース情報、インストールガイド、リリースノートは以下にあります。&lt;br&gt;&lt;a href="http://www.netbeans.org/community/releases/67/index_ja.html"&gt;http://www.netbeans.org/community/releases/67/index_ja.html&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.netbeans.org/community/releases/67/install_ja.html"&gt;http://www.netbeans.org/community/releases/67/install_ja.html&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.netbeans.org/community/releases/67/relnotes_ja.html"&gt;http://www.netbeans.org/community/releases/67/relnotes_ja.html&lt;/a&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/176818.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Java]log4jのアプリケーションを停止せずにログレベルやAppenderを動的に変えたい</title><link>http://blogs.wankuma.com/kazuki/archive/2009/06/04/174157.aspx</link><pubDate>Thu, 04 Jun 2009 21:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/06/04/174157.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/174157.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/06/04/174157.aspx#Feedback</comments><slash:comments>293</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/174157.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/174157.aspx</trackback:ping><description>&lt;p&gt;ということを調べました。&lt;br&gt;調べてみるとlog4jには、そういうことをやるMBeanが既にあってそれを登録するだけで出来るということでした。&lt;/p&gt; &lt;p&gt;ということでさっそくやってみました。&lt;/p&gt; &lt;h1&gt;プロジェクト作成/セットアップ&lt;/h1&gt; &lt;p&gt;今回は、NetBeans6.7 RC1で作っていきます。&lt;/p&gt; &lt;p&gt;事前に準備するもの。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;log4j-1.2.15.jar&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;新規作成から、Javaアプリケーションを作成します。名前はDynaLoggingにしました。&lt;br&gt;次に、ライブラリを追加します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb.png" width="244" height="98"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;事前に準備していたlog4jのjarファイルをライブラリとして作成して、プロジェクトに追加します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_3.png" width="244" height="220"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h1&gt;&lt;/h1&gt; &lt;h1&gt;プログラム&lt;/h1&gt; &lt;p&gt;ということで書いていきます。&lt;br&gt;ログを延々と出し続けるだけのプログラムです。&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:51f65c04-c4a1-4d57-9d2a-dac347fd662b" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package dynalogging;

import java.util.Date;
import org.apache.log4j.Logger;

public class Main {
    public static void main(String[] args) throws Exception {
        Logger log = Logger.getLogger(Main.class);
        while (true) {
            log.info("いんふぉ: " + new Date());
            Thread.sleep(1000);
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そして、単純なlog4jの定義ファイルlog4j.xmlをデフォルトパッケージに作成します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3bd5442f-4cb5-4f05-b24a-49539038cb4a" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&amp;gt;
&amp;lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" &amp;gt;
    &amp;lt;appender name="stdout" class="org.apache.log4j.ConsoleAppender"&amp;gt;
        &amp;lt;param name="Target" value="System.out" /&amp;gt;
        &amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt;
            &amp;lt;param name="ConversionPattern" value="%d %5p %c{1} - %m%n" /&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;
    &amp;lt;root&amp;gt;
        &amp;lt;priority value ="debug" /&amp;gt;
        &amp;lt;appender-ref ref="stdout"/&amp;gt;
    &amp;lt;/root&amp;gt;
&amp;lt;/log4j:configuration&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実行して、延々と出力ウィンドウにログが出続けるか確認します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_4.png" width="244" height="85"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;MBeanの登録&lt;/h1&gt;
&lt;p&gt;log4jにはorg.apache.log4j.jmx.HierarchyDynamicMBeanというクラスがあって、こいつがログレベルとかを動的に変えてくれる良い奴なんです。&lt;br&gt;このMBeanをmainの最初でMBeanServerに登録します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f6b913a9-1d87-4349-b7c3-26ac8ddbd7f4" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package dynalogging;

import java.lang.management.ManagementFactory;
import java.util.Date;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.apache.log4j.Logger;
import org.apache.log4j.jmx.HierarchyDynamicMBean;

public class Main {
    public static void main(String[] args) throws Exception {
        // MBeanの登録
        HierarchyDynamicMBean dynamicMBean = new HierarchyDynamicMBean();
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        ObjectName dynamicMBeanName = new ObjectName("log4j:type=HierarchyDynamicMBean");
        server.registerMBean(dynamicMBean, dynamicMBeanName);

        Logger log = Logger.getLogger(Main.class);
        while (true) {
            log.info("いんふぉ: " + new Date());
            Thread.sleep(1000);
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;登録したら、起動時のオプションにMBeanServerが有効になるオプションをつけます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_5.png" width="1004" height="347"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;JDK5を使ってる人&lt;/font&gt;&lt;/strong&gt;は、VMオプションに&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;-Dcom.sun.management.jmxremote.port=9999&lt;br&gt;-Dcom.sun.management.jmxremote.authenticate=false&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;の２つを追加します。&lt;br&gt;この状態で、アプリケーションを起動します。&lt;/p&gt;
&lt;p&gt;さっきmainの最初で登録した、HierarchyDynamicMBeanクラス関係のログが出る以外は、さっきと同じように延々と同じログが流れていきます。&lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;jconsole&lt;/h1&gt;
&lt;p&gt;アプリケーションが起動したらJAVE_HOME\binの下にあるjconsoleを起動します。jconsoleを起動すると新規接続のところに、今NetBeansで起動しているアプリケーションが表示されるはずなので、それを選択して接続ボタンを押します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_6.png" width="244" height="197"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;jconsoleのMBeanタブにさっき登録したクラスがいることを確認します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_7.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_7.png" width="244" height="153"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ここにあるrootというのがlog4jのルートロガーになります。rootの属性を見てみると、priorityがDEBUGになっています。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_8.png" width="244" height="75"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;こいつをWARNに書き換えると…&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_9.png" width="727" height="425"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;WARNにしたとたん、NetBeansのログウィンドウに延々と流れていたログがぴたりと止まります。また、INFOに切り替えると、ログが流れていきます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_10.png" width="820" height="399"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;出力ウィンドウの選択してる箇所を見ると8秒ほどログが止まってたことがわかります。&lt;/p&gt;
&lt;p&gt;ここで気になるのは、ルートロガー以外は、どうなの？という部分ですが、これはHierarchyDynamicMBeanの操作にあるaddLoggerMBeanにロガー名を入れることで表示させることができます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_11.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_11.png" width="590" height="148"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;addLoggerMBeanボタンを押すと、dynalogging.Mainがツリーに追加されて、それの属性を見たりすることが出来ます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_12.png" width="687" height="203"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;こいつのpriorityを編集することで、dynaloggin.Mainロガーだけの設定を切り替えることもできます。&lt;/p&gt;
&lt;h1&gt;おまけ&lt;/h1&gt;
&lt;p&gt;これで色々操作をしていると、Appenderを作成したり色々出来ちゃいます。&lt;br&gt;しかし、色々いじった結果作ったものを消す方法が多分無い…！！&lt;/p&gt;
&lt;p&gt;そんなときのために、こんなMBeanを作って登録しておくと、設定ファイルの状態にリセットすることが出来ます。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:80cb57eb-8821-4f79-babd-99796483cf55" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package dynalogging;

public interface Log4jManagerMBean {
    void reset(String classPath);
}
&lt;/pre&gt;&lt;/div&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e7b0c3d4-3ac7-4f53-87fc-3d7e85b2794f" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package dynalogging;

import org.apache.log4j.LogManager;
import org.apache.log4j.xml.DOMConfigurator;

public class Log4jManager implements Log4jManagerMBean {
    public void reset(String classPath) {
        // 設定をリセットして読み込みなおす
        LogManager.resetConfiguration();
        DOMConfigurator.configure(ClassLoader.getSystemResource(classPath));
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そして、これをMBeanServerに登録します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dc94368d-91d9-4bfe-98dc-3a4e679697eb" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;// リセットしてくれる人も登録
Log4jManager manager = new Log4jManager();
ObjectName managerMBeanName = new ObjectName("log4j:type=Log4jManager");
server.registerMBean(manager, managerMBeanName);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こういうのを用意してると、さくっと設定ファイルの内容に切り替えが出来ます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_13.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/Javalog4jAppender_130EB/image_thumb_13.png" width="244" height="160"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;log4j.xml, log4j-debug.xml, log4j-none.xmlとか何パターンかクラスパスにあらかじめ登録しておけば、さくっと状況に応じて切り替えれるかもしれん。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/174157.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Java][NetBeans]NetBeans 6.7 RC1</title><link>http://blogs.wankuma.com/kazuki/archive/2009/06/02/173985.aspx</link><pubDate>Tue, 02 Jun 2009 07:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/06/02/173985.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/173985.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/06/02/173985.aspx#Feedback</comments><slash:comments>576</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/173985.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/173985.aspx</trackback:ping><description>&lt;p&gt;次期バージョンのNetBeansの6.7 RC1が出ました！！&lt;br&gt;日本語版も同時に出てるので簡単に入れて試すことが出来ます。&lt;/p&gt; &lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7RC1_65A9/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7RC1_65A9/image_thumb.png" width="244" height="157"&gt;&lt;/a&gt; &lt;br&gt;RC1の文字が&lt;/p&gt; &lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7RC1_65A9/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7RC1_65A9/image_thumb_3.png" width="244" height="177"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;まだ入れてみただけで、使ってないけど、後でためそ～。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/173985.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Java][NetBeans]Spring Framework 2.5とJSFの連携</title><link>http://blogs.wankuma.com/kazuki/archive/2009/05/18/173175.aspx</link><pubDate>Mon, 18 May 2009 23:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/05/18/173175.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/173175.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/05/18/173175.aspx#Feedback</comments><slash:comments>52</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/173175.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/173175.aspx</trackback:ping><description>&lt;p&gt;昨日に引き続きSpring Frameworkを触っていきます！&lt;br&gt;今回は、Spring FrameworkとJSFの連携をやってみようと思います。&lt;/p&gt; &lt;p&gt;Spring Frameworkは、2.x系から確かrequestスコープとsessionスコープをサポートしているので、結構お手軽に連携できたりします。&lt;br&gt;とりあえず、やってみませふ。&lt;/p&gt; &lt;h1&gt;早速作り始め&lt;/h1&gt; &lt;p&gt;Webアプリケーションを新規作成します。&lt;br&gt;プロジェクト名はspringjsfにして、フレームワークにJavaServer Facesを選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_thumb.png" width="228" height="125"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;連携のための設定&lt;/h2&gt; &lt;p&gt;新規作成したら、ライブラリにSpring Framework 2.5を追加します。&lt;br&gt;そして、web.xmlに以下の設定を追加します。これでWebアプリケーションでSpringが使えるようになるのに加えてrequestスコープとsessionスコープが使えるようになりまう。&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a0f8a54c-6330-4eec-a2cf-74f4770c2946" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;listener&amp;gt;
    &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;
&amp;lt;/listener&amp;gt;
&amp;lt;filter&amp;gt;
    &amp;lt;filter-name&amp;gt;requestContextFilter&amp;lt;/filter-name&amp;gt;
    &amp;lt;filter-class&amp;gt;org.springframework.web.filter.RequestContextFilter&amp;lt;/filter-class&amp;gt;
&amp;lt;/filter&amp;gt;
&amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;requestContextFilter&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
&amp;lt;/filter-mapping&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;次に、JSFの管理ビーンとしてSpringが管理してるビーンを使えるように設定します。&lt;br&gt;設定方法は、faces-config.xmlに以下の記述を追加します。&lt;/p&gt;
&lt;p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7fbe6b18-2ced-416d-bfe0-1b87652cdbf4" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;

&amp;lt;faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&amp;gt;
    &amp;lt;application&amp;gt;
        &amp;lt;!-- Spring連携用 --&amp;gt;
        &amp;lt;variable-resolver&amp;gt;org.springframework.web.jsf.DelegatingVariableResolver&amp;lt;/variable-resolver&amp;gt;
    &amp;lt;/application&amp;gt;
&amp;lt;/faces-config&amp;gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;そして、WEB-INF/applicationContext.xmlにSpring XML 構成ファイルを作成します。Spring名前空間には、contextを追加しておきます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_thumb_3.png" width="163" height="83"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;applicationContext.xmlを作成したら、以下のように編集して、springjsf以下のアノテーションつきのクラスを自動登録するように構成します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3e1025e4-c04f-4e2c-800f-5cd0db950a1a" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"&amp;gt;
    &amp;lt;context:component-scan base-package="springjsf" /&amp;gt;
&amp;lt;/beans&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Springの管理するビーンの作成&lt;/h2&gt;
&lt;p&gt;下準備が出来たので、プログラミングを行います。&lt;br&gt;まず、welcomeJSF.jspに対応する管理ビーンを作成します。&lt;/p&gt;
&lt;p&gt;普通ならJSFの管理ビーンとして作成するのですが、今回はSpring用のビーンとして作成します。&lt;br&gt;普通のクラスの新規作成で、「springjsf.WelcomeJSFPage」というクラスを作成します。&lt;br&gt;作成したら、さくっと以下のように編集します。&lt;/p&gt;
&lt;p&gt;特に説明のいらないHello worldクラスのプログラムです。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f13f4d7f-aba5-4fd1-b55c-719542517349" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package springjsf;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

// requestスコープでwelcomeJSFという名前でSpringに登録する
@Component("welcomeJSF")
@Scope("request")
public class WelcomeJSFPage {
    // 入力用
    private String inputMessage;

    // 出力用
    private String outputMessage;

    // 入力メッセージから出力メッセージを作成する
    public String createOutputMessage() {
        outputMessage = inputMessage + "と入力しましたね！";
        return null;
    }

    public String getInputMessage() {
        return inputMessage;
    }

    public void setInputMessage(String inputMessage) {
        this.inputMessage = inputMessage;
    }

    public String getOutputMessage() {
        return outputMessage;
    }

    public void setOutputMessage(String outputMessage) {
        this.outputMessage = outputMessage;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;最後に、このSpringに登録されているWelcomeJSFPageクラスを使うようにwelcomeJSF.jspを以下のように編集します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:96218924-40ae-4efa-92fb-243b3c513bb0" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;%@page contentType="text/html" pageEncoding="UTF-8"%&amp;gt;

&amp;lt;%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%&amp;gt;
&amp;lt;%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%&amp;gt;

&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;

&amp;lt;f:view&amp;gt;
    &amp;lt;html&amp;gt;
        &amp;lt;head&amp;gt;
            &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&amp;gt;
            &amp;lt;title&amp;gt;うぇるかむ&amp;lt;/title&amp;gt;
        &amp;lt;/head&amp;gt;
        &amp;lt;body&amp;gt;
            &amp;lt;h:form&amp;gt;
                入力：&amp;lt;h:inputText value="#{welcomeJSF.inputMessage}" /&amp;gt;
                &amp;lt;br /&amp;gt;
                &amp;lt;h:commandButton value="加工" action="#{welcomeJSF.createOutputMessage}" /&amp;gt;
                &amp;lt;br /&amp;gt;
                出力：&amp;lt;h:outputText value="#{welcomeJSF.outputMessage}" /&amp;gt;
            &amp;lt;/h:form&amp;gt;
        &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
&amp;lt;/f:view&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注目は、管理ビーンに登録されていないのにEL式でwelcomeJSFと使ってる点です。&lt;br&gt;これで、Springに登録したwelcomeJSFというビーンが使えます。&lt;/p&gt;
&lt;p&gt;ちょっと悲しいのは、NetBeansの補間機能が働かないといったところでしょうか・・・&lt;/p&gt;
&lt;p&gt;実行すると&lt;/p&gt;
&lt;p&gt;画面が表示され&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_thumb_4.png" width="244" height="126"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;何か入力して加工ボタンを押すと&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansSpringFramework2.5JSF_13F6A/image_thumb_5.png" width="244" height="119"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ちゃんと動いてることが確認できます。&lt;/p&gt;
&lt;p&gt;以上簡単にですが、SpringとJSFの連携についてでした。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/173175.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][Java]Spring Framework 2.5 とJPAの連携</title><link>http://blogs.wankuma.com/kazuki/archive/2009/05/17/173123.aspx</link><pubDate>Sun, 17 May 2009 23:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/05/17/173123.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/173123.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/05/17/173123.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/173123.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/173123.aspx</trackback:ping><description>&lt;p&gt;久しくさぼってたSpring Frameworkですが、NetBeans 6.7 Beta版が出たのでつっついてみたいと思います。&lt;br&gt;今日のお題はSpring Framework + JPAを試してみようと思います。&lt;/p&gt; &lt;h1&gt;データベースの作成&lt;/h1&gt; &lt;p&gt;とりあえず、お試しようのデータベースを作成します。&lt;br&gt;SpringとJPAの連携がメインなので、DBはシンプルに外部キーとかのない１テーブルのみのDBにします。&lt;/p&gt; &lt;p&gt;サーバウィンドウのデータベースの下のJavaDBで右クリックしてデータベースを作成を選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb.png" width="244" height="128"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;DB名、ユーザ名、パスワードすべてjpaeduのデータベースを作成します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_3.png" width="244" height="108"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;DBが作成されると、DBの接続も出来るので右クリックして接続を選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_4.png" width="244" height="76"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;APPの下の表の右クリックメニューからコマンドを実行を選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_5.png" width="244" height="112"&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;以下のSQLを打ち込んで実行してテスト用のテーブルを作成します。&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d71b2c17-d22a-40ba-87c8-157abadc511d" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="sql"&gt;create table Person (
    id int primary key,
    name varchar(255));&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;以上でDBの作成は完了です。&lt;/p&gt;
&lt;h1&gt;プロジェクトの作成&lt;/h1&gt;
&lt;p&gt;DBの準備が終わったので、Javaのプロジェクトを作成していきます。&lt;br&gt;springjpaeduという名前で、Java アプリケーションのプロジェクトを作成します。&lt;/p&gt;
&lt;h2&gt;エンティティクラスの作成&lt;/h2&gt;
&lt;p&gt;プロジェクトを作成したら、springjpaedu.entitiesというパッケージを作成して、そこに新規→データベースからのエンティティクラスを選択してエンティティクラスを作成します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_6.png" width="670" height="187"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;先ほど作ったjpaeduデータベースを選択して、PERSONテーブルを選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_7.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_7.png" width="244" height="87"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;次の画面で、持続性ユニットを作成を選択して持続性ユニットを作成します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_8.png" width="244" height="112"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;持続性ユニットを作成したら、その他の項目はデフォルトのまま作成します。&lt;br&gt;作成が完了すると、springjpaedu.entities.Personクラスが作成されます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_9.png" width="175" height="60"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;作成されたら、ちゃんと動くかの確認も兼ねて、テスト用データ作成プログラムを作ります。&lt;br&gt;JPAを使うこと自体が主題ではないので、プログラムだけのせます。&lt;br&gt;とりあえずDBをクリアして、1000件データを作成しているだけのプログラムです。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:68b20506-ad0d-4193-9a1d-5fe56f9a24a7" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package springjpaedu;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import springjpaedu.entities.Person;

public class Main {

    private static final String PU = "springjpaeduPU";

    public static void main(String[] args) {
        EntityManagerFactory emf = null;
        EntityManager em = null;
        try {
            emf = Persistence.createEntityManagerFactory(PU);
            em = emf.createEntityManager();
            execute(em);
        } finally {
            if (em != null) {
                em.close();
            }
            if (emf != null) {
                emf.close();
            }
        }
    }

    private static void execute(EntityManager em) {
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();
            int deleted = em.createQuery("delete from Person").executeUpdate();
            for (int i = 1; i &amp;lt;= 1000; i++) {
                Person p = new Person();
                p.setId(i);
                p.setName("田中　太郎" + i);
                em.persist(p);
            }
            tx.commit();
            System.out.println(deleted + "件のデータを削除しました");
            System.out.println("1000件のデータを作成しました");
        } catch (RuntimeException e) {
            tx.rollback();
            System.out.println("失敗");
            e.printStackTrace();
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このまま実行すると、恐らくエラーがおきてしまいます。&lt;br&gt;JavaDBのJDBCドライバをライブラリについかしていないのが原因なので、JavaDBのドライバをライブラリに追加します。&lt;/p&gt;
&lt;p&gt;最近のJavaを何も意識せずに入れていると、C:\Program Files\Sun\JavaDB\lib\derbyclient.jarにJavaDBのJDBCドライバがあるので、それをライブラリに追加します。&lt;/p&gt;
&lt;p&gt;実行すると、↓のような文字列が出力ウィンドウに表示されるはずです。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9971dc70-7c96-4833-b4e7-1831a3ccc823" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;run:
[EL Info]: 2009.05.17 18:35:44.959--ServerSession(25197736)--EclipseLink, version: Eclipse Persistence Services - 1.0.1 (Build 20080905)
[EL Info]: 2009.05.17 18:35:45.118--ServerSession(25197736)--file:/C:/Users/Kazuki/Documents/NetBeansProjects/springjpaedu/src/-springjpaeduPU login successful
0件のデータを削除しました
1000件のデータを作成しました
[EL Info]: 2009.05.17 18:35:46.252--ServerSession(25197736)--file:/C:/Users/Kazuki/Documents/NetBeansProjects/springjpaedu/src/-springjpaeduPU logout successful
構築成功 (合計時間: 2 秒)&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Springの設定&lt;/h1&gt;
&lt;p&gt;ついにSpring Frameworkのほうに入ります！&lt;br&gt;まず、ライブラリからSpring Framework 2.5を選択して追加します。これには、以下の３つのjarファイルが含まれています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;spring-2.5.jar&lt;/li&gt;
&lt;li&gt;cglib-2.2.jar&lt;/li&gt;
&lt;li&gt;commons-logging-1.1.jar&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;凝ったことをしないのであればこれでいいのですが、今回はちょっとこれだけだと都合が悪いので、aspectjrt.jarもライブラリに追加します。&lt;br&gt;これは、Spring Frameworkのページから一式入ったものをダウンロードした中に入っているので、それを追加しました。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_10.png" width="321" height="82"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;つぎに、このspringjpaedu.DaoTestMainクラスを作成して、mainメソッドを作っておきます。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6acf97be-1769-4645-80aa-bf4eda33457f" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package springjpaedu;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DaoTestMain {

    public static void main(String[] args) {
        AbstractApplicationContext ctx = null;
        try {
            ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            // TODO : ここに処理を書いていく予定
        } finally {
            ctx.close();
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;次に、デフォルトパッケージにapplicationContext.xmlを作成します。ソースパッケージの右クリックメニューから新規→その他からSpring XML 構成ファイルを選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_11.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_11.png" width="244" height="140"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ファイル名をapplicationContext(xmlはつけない)にして次へ&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_12.png" width="244" height="107"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;名前空間には、contextとtxを選んで完了を押してください。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_13.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/NetBeansJavaSpringFramework2.5JPA_1055F/image_thumb_13.png" width="516" height="233"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;DaoTestMainを実行して、エラーが出ないことを確認すれば下準備完了です。&lt;/p&gt;
&lt;h1&gt;やっとDAO&lt;/h1&gt;
&lt;p&gt;ついにSpringとJPAの連携の機能を作りこんでいきます！長かった…&lt;/p&gt;
&lt;p&gt;Spring FrameworkとJPAの連携は、2通りの方法があります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hibernateとかと同じように***DaoSupportと***Templateクラスを使う方法&lt;/li&gt;
&lt;li&gt;JPAのAPIをそのまま使う方法&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;今回は２番のJPAのAPIをそのまま使う方法をやってみます。&lt;br&gt;何故かというと、１の方法でもあまりうれしさが感じれないからです。Hibernateとかで経験がある人が、自然に使いはじめれるという利点があるくらいなのかな？&lt;/p&gt;
&lt;p&gt;とりあえずDAOを作っていきます！&lt;/p&gt;
&lt;p&gt;springjpaedu.daoパッケージを作成して、そこにPersonDaoインターフェースとPersonDaoImplクラスを作成します。&lt;/p&gt;
&lt;p&gt;PersonDaoに、CRUD用のメソッドを一通り作成します。&lt;/p&gt;
&lt;p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3bf7c52a-4a4b-4667-aa74-fcd73b65d2f3" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package springjpaedu.dao;

import java.util.List;
import springjpaedu.entities.Person;

public interface PersonDao {
    List&amp;lt;Person&amp;gt; findAll();
    Person get(int id);
    void update(Person p);
    void insert(Person p);
    void delete(Person p);
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;PersonDaoImplで、これを実装していきます。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:43bb9bcc-f457-416d-a7fc-9b8c9b773500" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package springjpaedu.dao;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import springjpaedu.entities.Person;

// トランザクションの定義
@Transactional
// Springに自動登録してもらうための印
@Repository("personDao")
public class PersonDaoImpl implements PersonDao {

    // PersistenceContextをつけておくとSpringが適切にインスタンスをセットしてくれる
    @PersistenceContext
    private EntityManager entityManager;

    @Transactional(readOnly=true)
    public List&amp;lt;Person&amp;gt; findAll() {
        return entityManager.
                createQuery("select p from Person p order by p.id").
                getResultList();
    }

    // 以下のメソッドでEntityManagerを使って色々処理を書く
    @Transactional(readOnly=true)
    public Person get(int id) {
        return entityManager.find(Person.class, id);
    }

    public void update(Person p) {
        entityManager.merge(p);
    }

    public void insert(Person p) {
        entityManager.persist(p);
    }

    public void delete(Person p) {
        entityManager.remove(p);
    }

}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;特別なことは別にしてなくて、EJB3のコンテナでもそのまま動きそう。&lt;/p&gt;
&lt;p&gt;これを使うようにSpringの定義ファイルを書いていきます。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:906ccf5c-4b97-4755-ad3c-268f78373408" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&amp;gt;
    &amp;lt;!-- EntityManagerFactoryとTransactionManagerを定義 --&amp;gt;
    &amp;lt;bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"&amp;gt;
        &amp;lt;property name="persistenceUnitName" value="springjpaeduPU" /&amp;gt;
    &amp;lt;/bean&amp;gt;
    &amp;lt;bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&amp;gt;
        &amp;lt;property name="entityManagerFactory" ref="entityManagerFactory" /&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;!-- JPAの例外をSpringの例外に変換してくれる --&amp;gt;
    &amp;lt;bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /&amp;gt;
    &amp;lt;!-- PersistenceContextアノテーションにEntityManagerをインジェクションしてくれる --&amp;gt;
    &amp;lt;bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /&amp;gt;

    &amp;lt;!-- DAOを自動登録（今回の場合１つしかないからあまりありがたみは無いかも --&amp;gt;
    &amp;lt;context:component-scan base-package="springjpaedu.dao" /&amp;gt;

    &amp;lt;!-- アノテーションベースのトランザクション制御 --&amp;gt;
    &amp;lt;tx:annotation-driven /&amp;gt;
&amp;lt;/beans&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こいつが動くかどうか簡単に確認してみようと思います。&lt;br&gt;動作を確認するために、CRUDを一通りするプログラムを作成してみました。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5df9810e-9953-4a91-b4ab-f0e0ade97660" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package springjpaedu;

import java.util.List;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import springjpaedu.dao.PersonDao;
import springjpaedu.entities.Person;

public class DaoTestMain {

    public static void main(String[] args) {
        AbstractApplicationContext ctx = null;
        try {
            ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            PersonDao dao = (PersonDao) ctx.getBean("personDao");
            
            // 全件表示
            List&amp;lt;Person&amp;gt; people = dao.findAll();
            System.out.println("## 全データ出力");
            System.out.println(people);

            // 1件取得して更新
            Person p = dao.get(1);
            p.setName("田中　麻呂");
            dao.update(p);

            // 更新された値を確認
            Person p2 = dao.get(1);
            System.out.println("更新後の名前: " + p2.getName());

            // 新しい人を登録
            Person newPerson = new Person();
            newPerson.setId(1001);
            newPerson.setName("木村　きむきむ");
            dao.insert(newPerson);

            // 新しく登録された人を確認
            Person newPerson2 = dao.get(1001);
            System.out.println("追加した人の名前: " + newPerson2.getName());
        } finally {
            ctx.close();
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実行すると&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:53b01ea7-4d4b-46c3-96f4-00159b57dc55" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;## 全データ出力
[springjpaedu.entities.Person[id=1], springjpaedu.entities.Person[id=2], springjpaedu.entities.Person[id=3], spri...省略]
更新後の名前: 田中　麻呂
追加した人の名前: 木村　きむきむ&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ちゃんと更新とかもされているっぽいです。&lt;br&gt;META-INF/persistence.xmlを以下のようにすると、&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a0db0f54-7149-4103-8c71-22eeeb3f15ce" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&amp;gt;
  &amp;lt;persistence-unit name="springjpaeduPU" transaction-type="RESOURCE_LOCAL"&amp;gt;
    &amp;lt;provider&amp;gt;org.eclipse.persistence.jpa.PersistenceProvider&amp;lt;/provider&amp;gt;
    &amp;lt;class&amp;gt;springjpaedu.entities.Person&amp;lt;/class&amp;gt;
    &amp;lt;properties&amp;gt;
      &amp;lt;property name="eclipselink.jdbc.password" value="jpaedu"/&amp;gt;
      &amp;lt;property name="eclipselink.jdbc.user" value="jpaedu"/&amp;gt;
      &amp;lt;property name="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/&amp;gt;
      &amp;lt;property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/jpaedu"/&amp;gt;
      &amp;lt;!-- SQLのログを出力 --&amp;gt;
      &amp;lt;property name="eclipselink.logging.level" value="FINE" /&amp;gt;
    &amp;lt;/properties&amp;gt;
  &amp;lt;/persistence-unit&amp;gt;
&amp;lt;/persistence&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実際に発行されているSQL文も表示されていい感じになりそうです。&lt;br&gt;データ作成用のMainを起動してDBを初期化して、Javaのファイル以外を更新したので生成物を削除して構築をしてDaoTestMainを実行すると…&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a4f68f04-586b-41c6-a77a-dfca97543baa" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c"&gt;[EL Fine]: 2009.05.17 23:08:16.602--ServerSession(2719739)--Connection(6586390)--Thread(Thread[main,5,main])--SELECT ID, NAME FROM PERSON ORDER BY ID ASC
## 全データ出力
[springjpaedu.entities.Person[id=1], springjpaedu.entities.Person[id=2], springjpaedu.entities.Person[id=3], springjpaedu.entities.Person[id=4], springjp...省略]]
[EL Fine]: 2009.05.17 23:08:16.802--ClientSession(20804180)--Connection(27660658)--Thread(Thread[main,5,main])--UPDATE PERSON SET NAME = ? WHERE (ID = ?)
        bind =&amp;gt; [田中　麻呂, 1]
更新後の名前: 田中　麻呂
[EL Fine]: 2009.05.17 23:08:16.809--ClientSession(24809582)--Connection(9870377)--Thread(Thread[main,5,main])--INSERT INTO PERSON (ID, NAME) VALUES (?, ?)
        bind =&amp;gt; [1001, 木村　きむきむ]
追加した人の名前: 木村　きむきむ&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;うん。大丈夫そう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/173123.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Java][NetBeans]NetBeans6.7 BetaでICE Faces</title><link>http://blogs.wankuma.com/kazuki/archive/2009/05/16/173055.aspx</link><pubDate>Sat, 16 May 2009 00:13:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/05/16/173055.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/173055.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/05/16/173055.aspx#Feedback</comments><slash:comments>307</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/173055.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/173055.aspx</trackback:ping><description>&lt;p&gt;個人的に、成長し続けてくれたらNetBeansのうりの機能になると思ってたVisual JSFですが、一緒にバンドルされてたWoodstockコンポーネントの開発終了に伴い、残念な結果に終わってしまいました。&lt;/p&gt; &lt;p&gt;個人的な楽しみとしても、仕事としても使っていたためorzって感じでした。&lt;br&gt;Woodstockの代替として、ICE Facesというものを使うことが推奨されているっぽいです。&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.icefaces.org/main/home/"&gt;ICE FacesのWebサイト&lt;/a&gt;に行ってみると、「ICEfaces 1.8.0 Project Integration plugin for NetBeans 6.7 Beta」という文字が！？&lt;br&gt;つい先日でたNetBeans 6.7 Betaで使えるようになっているとな。素晴らしい。&lt;br&gt;ということで、軽く使ってみた。&lt;/p&gt; &lt;h1&gt;Visual JSFとICE Facesのインストール&lt;/h1&gt; &lt;p&gt;ICE FacesのNetBeansプラグインを使うためには、Visual JSFのプラグインが必要になります。（&lt;strong&gt;&lt;font color="#ff0000"&gt;追記：もうちょい後で判明しますが、このVisual JSFのインストールは必須じゃありませんorz&lt;/font&gt;&lt;/strong&gt;）&lt;/p&gt; &lt;p&gt;これは、デフォルトでは入っていないため、ツールのプラグインからVisual JSFとVisual JSF Runtimeをインストールします。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb.png" width="374" height="93"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;次に、ICE Facesのサイトから、ICEfaces-1.8.0-NetBeans-6.7beta-modules.zipをダウンロードして任意のフォルダに展開します。（ダウンロードにはユーザ登録が必要です）&lt;br&gt;展開した中にある以下の２つのnbmファイルを、NetBeansのツールのプラグインのダウンロード済みからインストールします。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;org-icefaces-netbeans-modules-lib.nbm&lt;/li&gt; &lt;li&gt;org-icefaces-netbeans-modules-web-frameworks.nbm&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;以上でインストールは完了です。&lt;/p&gt; &lt;h1&gt;こんにちは世界！&lt;/h1&gt; &lt;p&gt;インストールが終わったので早速使ってみます。&lt;br&gt;使ってみることが目的なので、プログラミングという素晴らしい世界へようこそ！という意味が込められているであろうHello worldを作成します。&lt;/p&gt; &lt;p&gt;まず、新規プロジェクト&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_3.png" width="244" height="46"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Java WebのWeb アプリケーションを選択&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_4.png" width="244" height="58"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;icehelloという名前にする&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_5.png" width="244" height="167"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;サーバーには、一番無難そうなGlassFish2を選択する&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_6.png" width="244" height="127"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;そして…ICEfacesを選択します&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_7.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_7.png" width="244" height="130"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;ここで気づいてしまいました。こいつVisualじゃね～！&lt;br&gt;RADな環境を期待していたのに、この手順で作成すると…&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_8.png" width="244" height="153"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;普通のエディタが表示されてしまいます。&lt;br&gt;リリースノートを詳しく見ていると、こんな記述がありました。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Visual Web ICEfaces module (Visual Web Project with Design Time and Run Time Support) is separated to a stand alone module, due to release at a later date. See &lt;a href="http://jira.icefaces.org/browse/ICE-4433"&gt;ICE-4433&lt;/a&gt; for more details&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;どうも、Visualなのは別モジュールとして独立して後でリリースすることになるから待っててねということなのだろうか。&lt;br&gt;本当にやりながらBlogを書いているのでこんなことになってしまいました。&lt;/p&gt; &lt;p&gt;でも、このまま突っ走ります！！&lt;/p&gt; &lt;h1&gt;&lt;/h1&gt; &lt;h1&gt;RADじゃなくても、プログラミングが素晴らしいことには変わりない！こんにちは世界！&lt;/h1&gt; &lt;p&gt;ということで、気を取り直して作成していきます。&lt;/p&gt; &lt;h2&gt;jspxの作成&lt;/h2&gt; &lt;p&gt;デフォルトで、welcomeJSF.jspxというファイルが作られていますが、名前が好みじゃないので消して、新規にファイルを作っていきます。&lt;/p&gt; &lt;p&gt;Webページの右クリックメニューから、新規のその他を選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_9.png" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;カテゴリJavaServer FacesのJSF JSPページを選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_10.png" width="476" height="144"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;JSP ファイル名をhelloworldにして、オプションで「&lt;strong&gt;&lt;font color="#ff0000"&gt;JSP ドキュメント(XML構文)&lt;/font&gt;&lt;/strong&gt;」を選択します。&lt;font color="#ff0000"&gt;（重要）&lt;/font&gt;&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_11.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_11.png" width="398" height="241"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;管理ビーンの作成&lt;/h2&gt; &lt;p&gt;次に、上で作成したJSPに対応する管理ビーンを作成します。&lt;/p&gt; &lt;p&gt;まず、ソースパッケージにicehelloというパッケージを作成します。&lt;/p&gt; &lt;p&gt;そして、icehelloパッケージに新規作成からJSF 管理対象 Beanを選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_12.png" width="398" height="146"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;クラス名をHelloWorldBeanにします。その際、スコープがrequestであることも確認してください。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_13.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_13.png" width="518" height="284"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;そうすると、以下のようなクラスが作成されます。（コメントは消しています）&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c404054a-fbbb-4d43-ace9-d6d7e72b3e2c" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package icehello;

public class HelloWorldBean {
    public HelloWorldBean() {
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ついでに、faces-config.xmlにも定義が追加されています。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e536ff66-f4cb-4525-90cb-a788f6bebd10" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;
&amp;lt;faces-config version="1.2"  xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&amp;gt;
    &amp;lt;managed-bean&amp;gt;
        &amp;lt;managed-bean-name&amp;gt;HelloWorldBean&amp;lt;/managed-bean-name&amp;gt;
        &amp;lt;managed-bean-class&amp;gt;icehello.HelloWorldBean&amp;lt;/managed-bean-class&amp;gt;
        &amp;lt;managed-bean-scope&amp;gt;request&amp;lt;/managed-bean-scope&amp;gt;
    &amp;lt;/managed-bean&amp;gt;
&amp;lt;/faces-config&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;HelloWorldBeanの作成&lt;/h2&gt;
&lt;p&gt;このまま引き続きHelloWorldBeanを作っていきます。&lt;br&gt;HelloWorldBeanは、入力値を表すString型のプロパティと、出力の値を表すString型のプロパティを持ち、ボタンのアクションに対応するメソッドを持ちます。&lt;br&gt;ボタンのアクションに対応するメソッドが実行されると「こんにちは、入力値さん。プログラミングの素晴らしい世界へようこそ！」という内容を出力を表すプロパティにセットするものとします。&lt;/p&gt;
&lt;p&gt;因みに、各々の英名は以下のようにします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入力値：inputValue&lt;/li&gt;
&lt;li&gt;出力値：outputValue&lt;/li&gt;
&lt;li&gt;ボタンのアクション：greet&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;まず、inputValueとoutputValueを作成します。&lt;br&gt;HelloWorldBeanのprivateフィールドとしてinputValueとoutputValueを定義します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a55f2abe-5174-4ba0-9c40-d96055a3e49a" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;public class HelloWorldBean {

    // 入力値
    private String inputValue;
    // 出力値
    private String outputValue;

    public HelloWorldBean() {
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;定義したら、コンストラクタの1行下あたりにカーソルを持ってきてAlt + Insertを押して「取得メソッドおよび設定メソッド」を選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_14.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_14.png" width="244" height="183"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;そうすると、チェックボックスのある画面が出てくるのでinputValueとoutputValueにチェックを入れて生成ボタンを押します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_15.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_15.png" width="244" height="102"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;これで、getter/setterが作成されます。&lt;/p&gt;
&lt;p&gt;次に、greetメソッドを作成します。&lt;br&gt;JSFのアクションに関連付けるメソッドは、戻り値がString型で、引数が無いものになります。ここの説明はたいしたことが無いので、コードだけ載せておきます。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5ebd97f6-a431-4624-8c07-ee65a43c351e" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;    public String greet() {
        outputValue = "こんにちは、" + inputValue + "さん。プログラミングの世界へようこそ！";
        return null;
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上で、HelloWorldBeanの実装を終わります。&lt;/p&gt;
&lt;h3&gt;わき道：単体テストもしてみよう&lt;/h3&gt;
&lt;p&gt;ちょっとわき道にそれますが、HelloWorldBeanの単体テストもしてみます。&lt;br&gt;HelloWorldBeanクラスでCtrl + Shift + Uをおすと、自動的にJUnitのテストの雛形を作成してくれます。&lt;/p&gt;
&lt;p&gt;JUnit4を選んだ次の画面で、デフォルトのまま了解を押します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_16.png" width="221" height="244"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;そうすると、getter/setterも含めたテストが作成されるので、greetのテストメソッドのみになるように整理します。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1d8a96f7-33f5-43bc-a0a5-a1761b9ef986" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package icehello;

import org.junit.Test;
import static org.junit.Assert.*;

public class HelloWorldBeanTest {

    @Test
    public void testGreet() {
        System.out.println("greet");
        HelloWorldBean instance = new HelloWorldBean();
        String expResult = "";
        String result = instance.greet();
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;一応この時点でCtrl+F6を押して実行して、テストが赤になることを確認しておくと確実です。&lt;/p&gt;
&lt;p&gt;次に、テストの中身を作ります。単純なのでさくっと。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6ac5dec1-0421-4421-8340-b62a53d27b98" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;HelloWorldBean instance = new HelloWorldBean();
instance.setInputValue("田中");
assertNull("greetでは画面遷移しないのでnullが返る", instance.greet());

assertEquals("greet呼出し後にoutputValueの値が更新されている",
        "こんにちは、田中さん。プログラミングの世界へようこそ！",
        instance.getOutputValue());&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ctrl + F6を押すとテストが実行されて青になるはずです。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_17.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_17.png" width="244" height="71"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ちょっと脱線ですが、UnitTestの方法でした。&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;画面の作成&lt;/h2&gt;
&lt;p&gt;helloworld.jspxを仕上げていきます。&lt;br&gt;titleをHello worldにします。&lt;/p&gt;
&lt;p&gt;そして、bodyタグの中身を消して、パレットにあるFormをbodyタグの中にぽとっと落とします。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;パレットのFormをつまんで&lt;/strong&gt;&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_18.png" width="244" height="211"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bodyタグの中にぽとっと落とす&lt;br&gt;&lt;/strong&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_19.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_19.png" width="189" height="106"&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;そうすると、rootタグにice名前空間が追加されて、ice:formタグがbodyタグ内に作成されます。この時点で、helloworld.jspxは以下のようになります。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a99dc0bb-d2d6-4117-84a8-ec381771f149" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;jsp:root xmlns:ice="http://www.icesoft.com/icefaces/component" version="2.1" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"&amp;gt;
    &amp;lt;jsp:directive.page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"/&amp;gt;
    &amp;lt;f:view&amp;gt;
        &amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
            &amp;lt;head&amp;gt;
                &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&amp;gt;
                &amp;lt;title&amp;gt;Hello world&amp;lt;/title&amp;gt;
            &amp;lt;/head&amp;gt;
            &amp;lt;body&amp;gt;
                &amp;lt;ice:form&amp;gt;
                &amp;lt;/ice:form&amp;gt;
            &amp;lt;/body&amp;gt;
        &amp;lt;/html&amp;gt;
    &amp;lt;/f:view&amp;gt;
&amp;lt;/jsp:root&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;同じ要領で、ice:formタグの中にInputTextと、CommandButtonと、OutputTextを置いていきます。若干インデントが崩れるので、Alt + Shift + Fでインデントを整えておきます。&lt;/p&gt;
&lt;p&gt;次に、以下のようにバインドをしていきます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;InputTextの値：　HelloWorldBeanのinputValueプロパティ&lt;/li&gt;
&lt;li&gt;CommandButtonのアクション：　HelloWorldBeanのgreetメソッド&lt;/li&gt;
&lt;li&gt;OutputTextの値：　HelloWorldBeanのoutputValueプロパティ&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;バインドは、EL式で書けるうえに補完がきくので素敵です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSFの管理ビーンの補完&lt;/strong&gt;&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_20.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_20.png" width="435" height="80"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;管理ビーンのメソッドやプロパティの補完&lt;/strong&gt;&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_21.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_21.png" width="405" height="58"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;EL式の設定が終わった後のhelloworld.jspxは以下のようになります。&lt;br&gt;(バインド以外に、ボタンに表示される値も設定しています）&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2cb2d1d2-4b63-492e-9e95-f78e07f3d846" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;ice:form&amp;gt;
    &amp;lt;ice:inputText value="#{HelloWorldBean.inputValue}"&amp;gt;
    &amp;lt;/ice:inputText&amp;gt;
    &amp;lt;ice:commandButton value="挨拶ボタン" action="#{HelloWorldBean.greet}"&amp;gt;
    &amp;lt;/ice:commandButton&amp;gt;
    &amp;lt;ice:outputText value="#{HelloWorldBean.outputValue}"&amp;gt;
    &amp;lt;/ice:outputText&amp;gt;
&amp;lt;/ice:form&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;以上で完成です。&lt;/p&gt;
&lt;h1&gt;実行してみよう&lt;/h1&gt;
&lt;p&gt;最後に実行してみます。&lt;br&gt;実行前にicehelloプロジェクトのプロパティの実行から&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_22.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_22.png" width="487" height="103"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;相対 URLを空にします。&lt;/p&gt;
&lt;p&gt;web.xmlのソースタブの開始ファイルをhelloworld.jspxにします。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_23.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_23.png" width="244" height="110"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;そして、F6を押して実行すると…&lt;/p&gt;
&lt;p&gt;ボタンのある画面が表示されます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_24.png" width="244" height="70"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;テキストフィールドに適当な名前を入れて挨拶ボタンを押すとメッセージが表示されます。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_25.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/JavaNetBeansNetBeans6.7BetaICEFaces_140C0/image_thumb_25.png" width="609" height="97"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;もちろん、画面のちらつきはありません。AJAXですから。&lt;/p&gt;
&lt;p&gt;以上！&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/173055.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Ruby][NetBeans]NetBeansバンドルのJRubyのgemを使う on Vista</title><link>http://blogs.wankuma.com/kazuki/archive/2009/05/14/172994.aspx</link><pubDate>Thu, 14 May 2009 22:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/05/14/172994.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/172994.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/05/14/172994.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/172994.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/172994.aspx</trackback:ping><description>&lt;p&gt;管理者権限で実行しないと使えません。&lt;br&gt;うちの環境ではそうでした。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/172994.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Ruby][NetBeans]NetBeans 6.7 betaでgemからopensslをインストール</title><link>http://blogs.wankuma.com/kazuki/archive/2009/05/14/172993.aspx</link><pubDate>Thu, 14 May 2009 22:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2009/05/14/172993.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/172993.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2009/05/14/172993.aspx#Feedback</comments><slash:comments>96</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/172993.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/172993.aspx</trackback:ping><description>&lt;p&gt;しようとすると&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2009/RubyNetBeansNetBeans6.7betagemopenssl_13895/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://kazuki.wankuma.com/images/2009/RubyNetBeansNetBeans6.7betagemopenssl_13895/image_thumb.png" width="607" height="413"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;というエラー画面が出てしまう。&lt;br&gt;VistaのProgram Files以下にインストールしている状態で、こうなってしまう…。&lt;/p&gt; &lt;p&gt;皆はうまくいってるのかな？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/172993.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>