<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">

<channel>
	<title>プラネット NetBeans</title>
	<link>http://www.planetnetbeans.org/ja/</link>
	<language>ja</language>
	<description>プラネット NetBeans - http://www.planetnetbeans.org/ja/</description>

<item>
	<title>しんさんの出張所　はてな編: [Java][NetBeans]最後にOpenJPAで日本語が通るか試してみた</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/shin/20080516/p2</guid>
	<link>http://d.hatena.ne.jp/shin/20080516/p2</link>
	<description>&#60;div class=&#34;section&#34;&#62;
			&#60;p&#62;NetBeansのライブラリへ登録して、EJB-jar、warともに組み込む。ライブラリサイズはHibernate EntityManagerよりはるかに小さい。&#60;/p&#62;
			&#60;p&#62;そしてpersistence.xmlのJPAベンダを切り替え。これはNetBeans6.1だとドロップダウンリストを選択するだけなので非常に楽チン。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;・・・結果成功！日本語の扱いに問題があるのはTopLink &#38;amp; EclipseLinkだけということになった。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;ログが一切書き出されていないようなのでそれを表示。&#60;/p&#62;
			&#60;p&#62;persistence.xmlのpropertiesに追加する。&#60;/p&#62;
&#60;pre class=&#34;syntax-highlight&#34;&#62;
&#60;span class=&#34;synIdentifier&#34;&#62;&#38;#60;property &#60;/span&#62;&#60;span class=&#34;synType&#34;&#62;name&#60;/span&#62;=&#60;span class=&#34;synConstant&#34;&#62;&#34;openjpa.Log&#34;&#60;/span&#62;&#60;span class=&#34;synIdentifier&#34;&#62; &#60;/span&#62;&#60;span class=&#34;synType&#34;&#62;value&#60;/span&#62;=&#60;span class=&#34;synConstant&#34;&#62;&#34;DefaultLevel=INFO,SQL=TRACE&#34;&#60;/span&#62;&#60;span class=&#34;synIdentifier&#34;&#62;/&#38;#62;&#60;/span&#62;
&#60;/pre&#62;

			&#60;p&#62;これでSQLが表示される。&#60;/p&#62;
			&#60;p&#62;生成されるSQLを見る限りHibernate EntityManagerのようにひどいSQLを発行することはないようだ。よしよし。&#60;/p&#62;
			&#60;p&#62;あとは悲観的ロックだが、Hibernate EntityManagerはやり方はわからなかったが、OpenJPAはちょっと調べればすぐにわかった。&#60;/p&#62;
			&#60;p&#62;まずpersistence.xmlのpropertiesに次の一文を追加する。&#60;/p&#62;
&#60;pre class=&#34;syntax-highlight&#34;&#62;
&#60;span class=&#34;synIdentifier&#34;&#62;&#38;#60;property &#60;/span&#62;&#60;span class=&#34;synType&#34;&#62;name&#60;/span&#62;=&#60;span class=&#34;synConstant&#34;&#62;&#34;openjpa.LockManager&#34;&#60;/span&#62;&#60;span class=&#34;synIdentifier&#34;&#62; &#60;/span&#62;&#60;span class=&#34;synType&#34;&#62;value&#60;/span&#62;=&#60;span class=&#34;synConstant&#34;&#62;&#34;pessimistic&#34;&#60;/span&#62;&#60;span class=&#34;synIdentifier&#34;&#62;/&#38;#62;&#60;/span&#62; 
&#60;/pre&#62;

			&#60;p&#62;そして、発行時のヒントとして&#60;/p&#62;
&#60;pre class=&#34;syntax-highlight&#34;&#62;
setHint(&#60;span class=&#34;synConstant&#34;&#62;&#34;openjpa.FetchPlan.ReadLockMode&#34;&#60;/span&#62;,LockModeType.READ)
&#60;/pre&#62;

			&#60;p&#62;を追加する。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;生成されたSQLを見る限り「for update」が追加されている。おそらくこれで動いてると思う。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;ちょっと触ってみた感じだと一番まともに動いてるのがOpenJPAという結論になった。GlassFishとの相性が悪いTopLinkから差し替えていい気がする。&#60;/p&#62;
			&#60;p&#62;というか、TopLink（とEclipseLink）はGlassFishのコンポーネントのひとつなのに相性が悪いというのがおわっとる。&#60;/p&#62;
			&#60;p&#62;まとめるとこんな感じ&#60;/p&#62;

			&#60;table&#62;
				&#60;tr&#62;&#60;th&#62;JPAベンダ&#60;/th&#62;&#60;th&#62;発行されるSQL&#60;/th&#62;&#60;th&#62;ライブラリサイズ&#60;/th&#62;&#60;th&#62;悲観的ロック&#60;/th&#62;&#60;th&#62;日本語&#60;/th&#62;&#60;th&#62;LAZY&#60;/th&#62;&#60;/tr&#62;
				&#60;tr&#62;&#60;td&#62;TopLink Essentials &#38;amp; EclipseLink(NetBeansやGlassFishのデフォルト)&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;×&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;/tr&#62;
				&#60;tr&#62;&#60;td&#62;Hibernate EntityManager&#60;/td&#62;&#60;td&#62;×&#60;/td&#62;&#60;td&#62;×&#60;/td&#62;&#60;td&#62;？&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;△&#60;/td&#62;&#60;/tr&#62;
				&#60;tr&#62;&#60;td&#62;OpenJPA&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;△&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;td&#62;○&#60;/td&#62;&#60;/tr&#62;

			&#60;/table&#62;
			&#60;br /&#62;

			&#60;p&#62;OpenJPAは日本語の資料ほぼゼロというあたりがアレだが、Apacheプロジェクトの中ではかなりまともな部類に入るような気がする。&#60;/p&#62;
		&#60;/div&#62;</description>
	<pubDate>Fri, 16 May 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>人工無脳が作りたい: [NetBeans]すごく、ほしいもの。</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/happy_ryo/20080515#1210846079</guid>
	<link>http://d.hatena.ne.jp/happy_ryo/20080515#1210846079</link>
	<description>&#60;div class=&#34;section&#34;&#62;
			&#60;p&#62;ぼく、とっても欲しいものが有るんだ。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;まずは↓の画像を見て欲しい。&#60;/p&#62;
			&#60;p&#62;&#60;a href=&#34;http://www.flickr.com/photos/okazaki/2491033867/in/set-72157594144301548/&#34; target=&#34;_blank&#34;&#62;http://www.flickr.com/photos/okazaki/2491033867/in/set-72157594144301548/&#60;/a&#62;&#60;/p&#62;
			&#60;p&#62;&#60;a href=&#34;http://www.flickr.com/photos/okazaki/2491850808/in/set-72157594144301548/&#34; target=&#34;_blank&#34;&#62;http://www.flickr.com/photos/okazaki/2491850808/in/set-72157594144301548/&#60;/a&#62;&#60;/p&#62;
			&#60;p&#62;&#60;a href=&#34;http://www.flickr.com/photos/okazaki/2491851706/in/set-72157594144301548/&#34; target=&#34;_blank&#34;&#62;http://www.flickr.com/photos/okazaki/2491851706/in/set-72157594144301548/&#60;/a&#62;&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;ヤバイですよね？&#60;/p&#62;
			&#60;p&#62;ぼくは、しんじています。&#60;/p&#62;
		&#60;/div&#62;</description>
	<pubDate>Thu, 15 May 2008 10:07:59 +0000</pubDate>
</item>
<item>
	<title>しんさんの出張所　はてな編: [Java][NetBeans]せっかくなのでHibernate EntityManagerも日本語が通るか試してみた</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/shin/20080515/p2</guid>
	<link>http://d.hatena.ne.jp/shin/20080515/p2</link>
	<description>&#60;div class=&#34;section&#34;&#62;
			&#60;p&#62;Hibernate CoreとHibernate EntityManagerを落としてNetBeansへライブラリ登録。&#60;/p&#62;
			&#60;p&#62;依存ファイルも大量にあってファイルサイズがすさまじいのでデプロイ時間増加につながってちょっとイラつく。&#60;/p&#62;
			&#60;p&#62;persistence.xmlのベンダ設定のみを修正。ソースコードは一切かえずに実行！&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;&#60;span&#62;&#60;span&#62;・・・おおおおお、動いた！！！！！&#60;/span&#62;&#60;/span&#62;&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;NetBeansやGlassFishと最も相性のいいJPAのベンダはHibernate EntityManagerってことか。なさけないけど日本人なら日本語が問題なく通るほうを選ぶよね。TopLink &#38;amp; EclipseLinkだけの問題らしいということもこれで確定したかな。あとでOpenJPAも試してみよう。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;HibernateはJPAの挙動が最も気に入らないので避けていた。LAZYの問題もあるし、トレースのログが見にくいし、なんといっても吐き出すSQLが一番へぼい。設定とかで変わるかもしれないけど、JPAでの利用においてはかなりへぼい。Hibernate EntityManagerの悲観的ロックの仕方もようわからないし。上であげたようにライブラリが大きすぎるのも開発に時間がかかるということなのでバツ。&#60;/p&#62;
			&#60;p&#62;JPAの範囲だけを使う場合、かなり欠陥だらけだと思うんだけど。&#60;/p&#62;
			&#60;br /&#62;

			&#60;br /&#62;

			&#60;p&#62;でも背に腹は変えられん。無理して使うか。&#60;/p&#62;
			&#60;p&#62;まともなSQLを返す設定方法と悲観的ロックの仕方がわかればとりあえずのりかえてもいいかも。LAZYはJPAの範囲に収まらないけど&#60;a href=&#34;http://d.hatena.ne.jp/da-yoshi/20080512/1210604917&#34; target=&#34;_blank&#34;&#62;一応解決方法がある&#60;/a&#62;ようだし。&#60;/p&#62;
		&#60;/div&#62;</description>
	<pubDate>Thu, 15 May 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>しんさんの出張所　はてな編: [java][NetBeans]EclipseLinkで日本語が通るか試してみた</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/shin/20080515/p1</guid>
	<link>http://d.hatena.ne.jp/shin/20080515/p1</link>
	<description>&#60;div class=&#34;section&#34;&#62;
			&#60;p&#62;ライブラリを眺めていたらEclipseLinkがあった。&#60;/p&#62;
			&#60;br /&#62;

			&#60;img src=&#34;http://shin.cside.com/diary/2008/0515-01.png&#34; border=&#34;1&#34; /&#62;
			&#60;p&#62;入れた記憶もないのだが、ディレクトリを見るとGlassFish V3TP2をインストールするとここに追加されるようだ。&#60;/p&#62;
			&#60;p&#62;そういやTopLink Essentialsは日本語の扱いに問題があるのだが、EclipseLinkでは直っているのか気になった。そこで試してみることに。&#60;/p&#62;
			&#60;br /&#62;

			&#60;br /&#62;

			&#60;p&#62;JPAのウィザードのところにも自動的に検出されているようだ。&#60;/p&#62;
			&#60;img src=&#34;http://shin.cside.com/diary/2008/0515-02.png&#34; border=&#34;1&#34; /&#62;
			&#60;br /&#62;

			&#60;p&#62;ここでEclipseLinkを選び、ライブラリをejb-jarとwarのプロジェクトにそれぞれ追加する。あくまでもremoteのテストなのでearは今回は触らない。パッケージングするとremoteセッションビーンでもLocalと同様の扱いになるためだ。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;実行。&#60;/p&#62;
&#60;pre&#62;
com.sun.rave.web.ui.appbase.ApplicationException: nested exception is: java.rmi.RemoteException: CORBA DATA_CONVERSION 1330446337 No; nested exception is: 
        org.omg.CORBA.DATA_CONVERSION: ----------BEGIN server-side stack trace----------
org.omg.CORBA.DATA_CONVERSION:   vmcid: OMG  minor code: 1  completed: No
        at com.sun.corba.ee.impl.logging.OMGSystemException.charNotInCodeset(OMGSystemException.java:2093)
        at com.sun.corba.ee.impl.logging.OMGSystemException.charNotInCodeset(OMGSystemException.java:2111)
        at com.sun.corba.ee.impl.encoding.CodeSetConversion$JavaCTBConverter.convertCharArray(CodeSetConversion.java:336)
        at com.sun.corba.ee.impl.encoding.CodeSetConversion$JavaCTBConverter.convert(CodeSetConversion.java:249)
        at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeString(CDROutputStream_1_0.java:504)
        at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_string(CDROutputStream_1_0.java:493)

&#60;/pre&#62;

			&#60;p&#62;EclipseLinkもTopLink Essentialsと同様に日本語のフィールドがあるとだめみたい。まったく同様の現象から日本語のプロパティ自体はうまくいくと思われる。また、EJB単体でもうまくいくはず。&#60;/p&#62;
			&#60;p&#62;JPAを使う範囲においてはEclipseLinkとTopLink Essentialsは同様だと思っていいみたい。まだ1.0の実装だしね。&#60;/p&#62;
		&#60;/div&#62;</description>
	<pubDate>Thu, 15 May 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>NetBeans: [NetBeans][Java]Alt + Insertで出るコードジェネレーションをカスタマイズ</title>
	<guid isPermaLink="false">http://blogs.wankuma.com/kazuki/archive/2008/05/14/137729.aspx</guid>
	<link>http://blogs.wankuma.com/kazuki/archive/2008/05/14/137729.aspx</link>
	<description>&#60;p&#62;NetBeans6系で気に入ってる機能の１つ！Alt + Insertでコードを色々生成出来るってのがある。&#60;br /&#62;エディタ上でAlt + Insert(若干押しにくい)を押すと下のようなものが出てくる&#60;br /&#62;&#60;a href=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image.png&#34;&#62;&#60;img height=&#34;214&#34; alt=&#34;image&#34; src=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_thumb.png&#34; width=&#34;212&#34; border=&#34;0&#34; /&#62;&#60;/a&#62; &#60;/p&#62; &#60;p&#62;ここから生成したいコードを選ぶと、さくっとコードが出力される。&#60;br /&#62;例えば、equals() and hashCode()...を選ぶと&#60;br /&#62;&#60;a href=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_3.png&#34;&#62;&#60;img height=&#34;208&#34; alt=&#34;image&#34; src=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_thumb_3.png&#34; width=&#34;192&#34; border=&#34;0&#34; /&#62;&#60;/a&#62; &#60;/p&#62; &#60;p&#62;どのフィールドを対象にするかを選択するダイアログが出てきて&#60;br /&#62;&#60;a href=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_4.png&#34;&#62;&#60;img height=&#34;116&#34; alt=&#34;image&#34; src=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_thumb_4.png&#34; width=&#34;244&#34; border=&#34;0&#34; /&#62;&#60;/a&#62; &#60;/p&#62; &#60;p&#62;こんな感じのコードが出力される&#60;/p&#62; &#60;div class=&#34;wlWriterSmartContent&#34; id=&#34;scid:812469c5-0cb0-4c63-8c15-c81123a09de7:697b3f6f-b6e8-4db1-bb07-5efe7ec5495c&#34;&#62;&#60;pre name=&#34;code&#34; class=&#34;java&#34;&#62;    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Employees other = (Employees) obj;
        if (this.id != other.id &#38;amp;&#38;amp; (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.name != other.name &#38;amp;&#38;amp; (this.name == null || !this.name.equals(other.name))) {
            return false;
        }
        if (this.entDate != other.entDate &#38;amp;&#38;amp; (this.entDate == null || !this.entDate.equals(other.entDate))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 19 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 19 * hash + (this.name != null ? this.name.hashCode() : 0);
        hash = 19 * hash + (this.entDate != null ? this.entDate.hashCode() : 0);
        return hash;
    }
&#60;/pre&#62;&#60;/div&#62;
&#60;p&#62;これをカスタマイズしてみようと思う。&#60;/p&#62;
&#60;p&#62;&#38;nbsp;&#60;/p&#62;
&#60;h3&#62;プロジェクト作成&#60;/h3&#62;
&#60;p&#62;まず、モジュールのプロジェクトを作成する。名前は何でもいいけど、とりあえずinsertという名前にした。&#60;br /&#62;パッケージはcom.wankuma.kazuki.insertにしておいた。layer.xmlを使うので生成するようにしておく。&#60;/p&#62;
&#60;p&#62;そして、ライブラリに以下の3つを追加する。Java Editorのほうは、公式に公開されてるものじゃないみたいなので、Non-API Modulesからみつけるようにする。&#60;/p&#62;
&#60;ol&#62;
&#60;li&#62;Javac API Wrapper&#60;/li&#62;
&#60;li&#62;Java Editor(Show Non-API Modulesにチェックを入れないと出てこない）&#60;/li&#62;
&#60;li&#62;Java Source&#60;/li&#62;&#60;/ol&#62;
&#60;p&#62;そして、ここでもう一手間。&#60;br /&#62;これから使うクラスは、まだ公開されてないということなので、無理やり使うように設定する。&#60;br /&#62;Java Editorで右クリックしてEdit...を選択する。&#60;/p&#62;
&#60;p&#62;出てきたダイアログで、Specification VersionからImplementation Versionに変更する。&#60;br /&#62;&#60;a href=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_5.png&#34;&#62;&#60;img height=&#34;388&#34; alt=&#34;image&#34; src=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_thumb_5.png&#34; width=&#34;420&#34; border=&#34;0&#34; /&#62;&#60;/a&#62; &#60;/p&#62;
&#60;p&#62;&#38;nbsp;&#60;/p&#62;
&#60;h3&#62;Let's プログラミング！&#60;/h3&#62;
&#60;p&#62;そしたらおもむろにクラスを作成する。名前はcom.wankuma.kazuki.insert.HelloCodeGeneratorにする。&#60;br /&#62;そしてorg.netbeans.modules.java.editor.codegen.CodeGeneratorをimplementsする。&#60;/p&#62;
&#60;p&#62;
&#60;div class=&#34;wlWriterSmartContent&#34; id=&#34;scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2a3bdb16-96ac-46a1-aab6-879255e905f6&#34;&#62;&#60;pre name=&#34;code&#34; class=&#34;java&#34;&#62;package com.wankuma.kazuki.insert;

import javax.swing.text.JTextComponent;
import org.netbeans.modules.java.editor.codegen.CodeGenerator;

public class HelloCodeGenerator implements CodeGenerator {

    public String getDisplayName() {
        return null;
    }

    public void invoke(JTextComponent textComponent) {
    }

}
&#60;/pre&#62;&#60;/div&#62;&#60;/p&#62;
&#60;p&#62;getDisplayNameはAlt + Insertのときに表示されるテキスト。invokeは、実際の挿入処理を行うみたい。&#60;br /&#62;さくっと実装してみた。&#60;/p&#62;
&#60;p&#62;
&#60;div class=&#34;wlWriterSmartContent&#34; id=&#34;scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c4bb354b-2222-49f7-b32c-50f79e44a499&#34;&#62;&#60;pre name=&#34;code&#34; class=&#34;java&#34;&#62;    public String getDisplayName() {
        return &#34;Hello world&#34;;
    }

    public void invoke(JTextComponent textComponent) {
        // キャレットの位置を取得して
        int mark = textComponent.getCaret().getMark();
        try {
            // そこに適当な文字列を挿入する
            textComponent.getDocument().insertString(
                    mark, &#34;System.out.println(\&#34;Hello world\&#34;);&#34;, null);
        } catch (BadLocationException ex) {
            Logger.getLogger(HelloCodeGenerator.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
&#60;/pre&#62;&#60;/div&#62;&#60;/p&#62;
&#60;p&#62;そして、Generatorを生成するためのファクトリクラスを作成する。&#60;br /&#62;とりあえずHelloCodeGeneratorの内部クラスにする。&#60;/p&#62;
&#60;div class=&#34;wlWriterSmartContent&#34; id=&#34;scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d682afdf-8cef-49de-b6e6-8e9538e29318&#34;&#62;&#60;pre name=&#34;code&#34; class=&#34;java&#34;&#62;public class HelloCodeGenerator implements CodeGenerator {

    // ファクトリクラス！
    public static class Factory implements CodeGenerator.Factory {
        // Iterableを返すらしいので、さくっとね
        public Iterable&#38;lt;? extends CodeGenerator&gt; create(CompilationController arg0, TreePath arg1) throws IOException {
            return Collections.singleton(new HelloCodeGenerator());
        }
        
    }
    
    public String getDisplayName() {
    // 以下略

}
&#60;/pre&#62;&#60;/div&#62;
&#60;p&#62;後は、ファクトリクラスを、layer.xmlのEditors/text/x-java/codegeneratorsに登録する。&#60;/p&#62;
&#60;p&#62;
&#60;div class=&#34;wlWriterSmartContent&#34; id=&#34;scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a9ef56ca-1288-4aa6-aafc-fac654432cde&#34;&#62;&#60;pre name=&#34;code&#34; class=&#34;xml&#34;&#62;&#38;lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;
&#38;lt;!DOCTYPE filesystem PUBLIC &#34;-//NetBeans//DTD Filesystem 1.1//EN&#34; &#34;http://www.netbeans.org/dtds/filesystem-1_1.dtd&#34;&gt;
&#38;lt;filesystem&gt;
    &#38;lt;folder name=&#34;Editors&#34;&gt;
        &#38;lt;folder name=&#34;text&#34;&gt;
            &#38;lt;folder name=&#34;x-java&#34;&gt;
                &#38;lt;folder name=&#34;codegenerators&#34;&gt;
                    &#38;lt;file name=&#34;com-wankuma-kazuki-insert-HelloCodeGenerator$Factory.instance&#34; /&gt;
                &#38;lt;/folder&gt;
            &#38;lt;/folder&gt;
        &#38;lt;/folder&gt;
    &#38;lt;/folder&gt;
&#38;lt;/filesystem&gt;
&#60;/pre&#62;&#60;/div&#62;&#60;/p&#62;
&#60;p&#62;これで完成！！&#60;/p&#62;
&#60;p&#62;&#38;nbsp;&#60;/p&#62;
&#60;h3&#62;&#60;/h3&#62;
&#60;h3&#62;実行してみよう&#60;/h3&#62;
&#60;p&#62;F6を押して実行！テスト用NetBeansが立ち上がる。&#60;/p&#62;
&#60;p&#62;適当にJavaのプロジェクトを作成してJavaのコードエディタ内でAlt + Insertをしてみると．．．．&#60;br /&#62;&#60;a href=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_6.png&#34;&#62;&#60;img height=&#34;163&#34; alt=&#34;image&#34; src=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_thumb_6.png&#34; width=&#34;208&#34; border=&#34;0&#34; /&#62;&#60;/a&#62; &#60;/p&#62;
&#60;p&#62;出た！！選択すると…&#60;br /&#62;&#60;a href=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_7.png&#34;&#62;&#60;img height=&#34;105&#34; alt=&#34;image&#34; src=&#34;http://kazuki.wankuma.com/images/2008/NetBeansJavaAltInsert_1463C/image_thumb_7.png&#34; width=&#34;353&#34; border=&#34;0&#34; /&#62;&#60;/a&#62; &#60;/p&#62;
&#60;p&#62;お～出た～。&#60;br /&#62;こんな手軽にいけるなら、がんがん俺様フレームワークのスニペットみたいなのを作れるんじゃないだろうか。&#60;br /&#62;単純に固定区を入れるものから、設定ファイルからコード生成するものとか…&#60;/p&#62;
&#60;p&#62;夢は広がる。&#60;/p&#62;&#60;img src=&#34;http://blogs.wankuma.com/kazuki/aggbug/137729.aspx&#34; width=&#34;1&#34; height=&#34;1&#34; /&#62;</description>
	<pubDate>Wed, 14 May 2008 14:22:09 +0000</pubDate>
</item>
<item>
	<title>marsのメモ: [NetBeans] Ruby on Rails用 統合開発環境（IDE） 比較レポート：CodeZine</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/masanobuimai/20080514#1210773421</guid>
	<link>http://d.hatena.ne.jp/masanobuimai/20080514#1210773421</link>
	<description>よく調べたなぁと感心しつつも，NetBeansのデメリットに &#38;#62;http://codezine.jp/a/article/aid/2482.aspx?p=2:title&#38;#62; 短所 IDE起動後の索引作成に時間がかかる JavaのIDEとしてデファクトスタンダードであるEclipseではないため、見た目、操作感が違い戸惑う可能性がある  ってあるけど，それってあんまりジャマイカ？ ＃ヒドイ言いがかりだ。:-P</description>
	<pubDate>Wed, 14 May 2008 13:57:01 +0000</pubDate>
</item>
<item>
	<title>Masaki Katakai's Weblog: NetBeans 6.1 ブログコンテスト結果発表 : 高倉さん、おめでとう！</title>
	<guid isPermaLink="false">http://blogs.sun.com/katakai/entry/netbeans_6_1_beta_blogging</guid>
	<link>http://blogs.sun.com/katakai/entry/netbeans_6_1_beta_blogging</link>
	<description>&#60;img alt=&#34;&#34; src=&#34;http://blogs.sun.com/katakai/resource/2008/nb61betablogcontest.png&#34; align=&#34;right&#34; /&#62;NetBeans 6.1 Beta のブログコンテストですが結果の発表がありました。みなさま、ご応募ありがとうございました。&#60;br /&#62;
&#60;ul&#62;
&#60;li&#62;&#60;a href=&#34;http://www.netbeans.org/competition/blog-contest.html&#34;&#62;NetBeans
IDE 6.1 Beta Blogging Contest&#60;/a&#62;&#60;/li&#62;
&#60;/ul&#62;
日本語では昨年の &#60;a href=&#34;http://blogs.sun.com/katakai/entry/netbeans_day_tokyo1&#34;&#62;JJUG
カンファレンスで NetBeans コミュについて LT&#60;/a&#62; してくれた&#60;a href=&#34;http://snakemanshow.blogspot.com/&#34;&#62;高倉さん&#60;/a&#62;の PHP
に関する記事が選ばれたようです。おめでとうございます！&#60;br /&#62;
&#60;ul&#62;
&#60;li&#62;&#60;a href=&#34;http://snakemanshow.blogspot.com&#34;&#62;へびのぬけがら&#60;/a&#62; : &#60;a href=&#34;http://snakemanshow.blogspot.com/2008/04/netbeans-61-rc-php.html&#34;&#62;NetBeans
6.1 RC で PHP を使う&#60;/a&#62;&#60;/li&#62;
&#60;/ul&#62;
高倉さんは&#60;a href=&#34;http://wiki.netbeans.org/JaNetBeansDocs&#34;&#62;翻訳プロジェクト&#60;/a&#62;のほうにも参加してくれていて wiki.netbeans.org にある英語のドキュメントを日本語にしてくれています。いつもありがとー！</description>
	<pubDate>Wed, 14 May 2008 07:05:02 +0000</pubDate>
</item>
<item>
	<title>Masaki Katakai's Weblog: Sun Business .Next 2008 の資料が公開されました : NetBeans</title>
	<guid isPermaLink="false">http://blogs.sun.com/katakai/entry/sun_business_next_2008_info</guid>
	<link>http://blogs.sun.com/katakai/entry/sun_business_next_2008_info</link>
	<description>先月行われた &#60;a href=&#34;http://jp.sun.com/documentation/events/200804-next/thanksfornext.html&#34;&#62;Sun
Business .Next 2008 の資料&#60;/a&#62;が公開されました。当日はたくさんの方にご来場いただき本当にありがとうございました。
私からは NetBeans の概要に ja.netbeans.org のマスコット &#60;a href=&#34;http://ja.netbeans.org/nekobean&#34;&#62;ねこび〜ん&#60;/a&#62; と、&#60;br /&#62;
&#60;br /&#62;
&#60;img alt=&#34;&#34; src=&#34;http://blogs.sun.com/katakai/resource/2008/sun-next08-4.png&#34; /&#62;&#60;br /&#62;
&#60;br /&#62;
ねこび〜ん作者の&#60;a href=&#34;http://blog.cgfm.jp/mutsuki/&#34;&#62;金内さん&#60;/a&#62;と、&#60;br /&#62;
&#60;br /&#62;
&#60;img alt=&#34;&#34; src=&#34;http://blogs.sun.com/katakai/resource/2008/sun-next08-2.png&#34; /&#62;&#60;br /&#62;
&#60;br /&#62;
ねこび〜ん実物第１号を試作してくださった&#60;a href=&#34;http://d.hatena.ne.jp/monyakata/&#34;&#62;宗形さん&#60;/a&#62;を&#60;br /&#62;
&#60;br /&#62;
&#60;img alt=&#34;&#34; src=&#34;http://blogs.sun.com/katakai/resource/2008/sun-next08-3.png&#34; /&#62;&#60;br /&#62;
&#60;br /&#62;
ご紹介させていただきました。ありがとうございました！</description>
	<pubDate>Wed, 14 May 2008 05:56:11 +0000</pubDate>
</item>
<item>
	<title>しんさんの出張所　はてな編: [Java][NetBeans]Seasar2とSpringでいまいちサーバー管理のJPAの使い方が分らない</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/shin/20080513/p2</guid>
	<link>http://d.hatena.ne.jp/shin/20080513/p2</link>
	<description>&#60;div class=&#34;section&#34;&#62;
			&#60;p&#62;まずRESOURCE_LOCALとかnon-jta-datasourceとかがはいってるwarやejb-jarはGlassfishがデプロイ時にはじくので環境がかなり狭められてしまう。&#60;/p&#62;
			&#60;p&#62;そしてSpringやSeasar2のサポートするJPAは独自のJPA管理ということで躊躇してしまう。アプリ側のコンテナ依存はしかたないにしても、JPAやデータソースは鯖側で持っていてほしい情報だ。そこをアプリ側で持つのは我慢できない人は多いと思う。&#60;/p&#62;
			&#60;p&#62;Glassfishの管理ツールでjndi一覧を見る限りEntityManagerはjndiで取得することはできなさそう。&#60;/p&#62;
			&#60;p&#62;やはりJPAを使うならEJB3が一番だということか。Glassfish＋Toplinkで日本語が通らない問題さえ解決すればべつにこだわる必要はないのだが。&#60;/p&#62;
			&#60;p&#62;もっともJPAを扱う場合NetBeansはEJB3の開発効率は割といいので本当は日本語問題が解決されるのが一番なのだが、ここは正直期待できない部分なので回避方法を探すしかない。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;シングルバイト圏とくらべてこういった部分だけでもかなりハンデだなー。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;そこでJSFでは@EJBがきくことから、他のリソース系もインジェクトされるかどうか確かめてみた。&#60;/p&#62;
			&#60;p&#62;Visual Web JSFを起動して確かめる。Visual Web JSFはJSFのRIを使いつつもさらに薄いラッピングをしている一種のフレームワークだ。NetBeansのGUIエディタのようにボタンを貼り付けてそのイベントを書くだけでWebアプリを作ることが可能だ。&#60;/p&#62;
			&#60;p&#62;そこのイベントにコードを書いてみる。&#60;/p&#62;
&#60;pre class=&#34;syntax-highlight&#34;&#62;
    &#60;span class=&#34;synPreProc&#34;&#62;@PersistenceContext&#60;/span&#62;
    EntityManager em;

    &#60;span class=&#34;synPreProc&#34;&#62;@Resource&#60;/span&#62;
    UserTransaction ut;

    &#60;span class=&#34;synComment&#34;&#62;//ボタンクリックイベント&#60;/span&#62;
    &#60;span class=&#34;synType&#34;&#62;public&#60;/span&#62; String button1_action() {
        
        &#60;span class=&#34;synStatement&#34;&#62;try&#60;/span&#62; {
            ut.begin();

            Customer c = &#60;span class=&#34;synStatement&#34;&#62;new&#60;/span&#62; Customer();
            c.set得意先名(&#60;span class=&#34;synConstant&#34;&#62;&#34;なまえ&#34;&#60;/span&#62;);
            c.set電話番号(&#60;span class=&#34;synConstant&#34;&#62;&#34;TEL&#34;&#60;/span&#62;);
            em.persist(c);

            ut.commit();
        } &#60;span class=&#34;synStatement&#34;&#62;catch&#60;/span&#62; (Exception ex) {
            Logger.getLogger(Page1.&#60;span class=&#34;synType&#34;&#62;class&#60;/span&#62;.getName()).log(Level.SEVERE, &#60;span class=&#34;synConstant&#34;&#62;null&#60;/span&#62;, ex);
        }
        &#60;span class=&#34;synStatement&#34;&#62;return&#60;/span&#62; &#60;span class=&#34;synConstant&#34;&#62;null&#60;/span&#62;;
    }
&#60;/pre&#62;

			&#60;p&#62;まったく問題なく動いた…。&#60;/p&#62;
			&#60;p&#62;シンプルにアプリを書く場合悪くはないな。トランザクション管理はコンテナがやってくれるのが一番だが小さいアプリを書いたりそこまでやる必要としない場合はこれでいいかもしれない。ejb-jarが必要としないのでシンプルに扱える。&#60;/p&#62;
			&#60;p&#62;通常Visual Web JSFのロジックはセッションスコープのマネージドビーンにおいておくのが普通だ。そうなるとインジェクトしたEntityManagerの動きがどうなるかが怪しく感じるかもしれない。&#60;/p&#62;
			&#60;p&#62;そこでGlassfishのソースを調べてみた。NetBeansでコンパイルの仕方が分らないのでデバッグ用のログも吐き出すことができず、エディタで開いての机上デバッグのみとなる。それでも、実際に動かしててどの用になるのか調べる必要が出てくる。&#60;/p&#62;
			&#60;p&#62;そこでリフレクションだけでひたすら追ってみた。フィールド変数までしか終えないが、getDelegate()とかを使うとトレースできないからだ。&#60;/p&#62;
			&#60;p&#62;たとえば一部を取り出したりするとこんな感じになる。&#60;/p&#62;
&#60;pre class=&#34;syntax-highlight&#34;&#62;
            &#60;span class=&#34;synStatement&#34;&#62;try&#60;/span&#62; {

                Method method = em.getClass().getDeclaredMethod(&#60;span class=&#34;synConstant&#34;&#62;&#34;_getDelegate&#34;&#60;/span&#62;);
                method.setAccessible(&#60;span class=&#34;synConstant&#34;&#62;true&#60;/span&#62;);
                method.invoke(em);
                
                Field field = em.getClass().getDeclaredField(&#60;span class=&#34;synConstant&#34;&#62;&#34;txManager&#34;&#60;/span&#62;);
                field.setAccessible(&#60;span class=&#34;synConstant&#34;&#62;true&#60;/span&#62;);
                Object obj =  field.get(em);
                System.out.println(&#60;span class=&#34;synConstant&#34;&#62;&#34;txManager:&#34;&#60;/span&#62;+obj);
                
                Method tran = obj.getClass().getMethod(&#60;span class=&#34;synConstant&#34;&#62;&#34;getTransaction&#34;&#60;/span&#62;);
                System.out.println(&#60;span class=&#34;synConstant&#34;&#62;&#34;transaction:&#34;&#60;/span&#62;+tran.invoke(obj));

            } &#60;span class=&#34;synStatement&#34;&#62;catch&#60;/span&#62; (Exception ex) {
                Logger.getLogger(SessionBean1.&#60;span class=&#34;synType&#34;&#62;class&#60;/span&#62;.getName()).log(Level.SEVERE, &#60;span class=&#34;synConstant&#34;&#62;null&#60;/span&#62;, ex);
            }
&#60;/pre&#62;

			&#60;p&#62;Object型だけでひたすらリフレクションで追うという、あほみたいに時間がかかることをしたのは俺だけでいい。&#60;/p&#62;
			&#60;p&#62;getDelegate()やその他のメソッドは毎回生成されて初期化や後始末等されていて追えないので、_getDelegateを直接いじったりトレースしたりする必要が出てくる。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;とりあえず軽く触って分ったのは、インジェクトされるEntityManagerはラッパであるということ。そしてEntityManagerをアクセスするたびに本来のEntityManagerが生成されるということ。&#60;/p&#62;
			&#60;p&#62;あとUserTransactionのcommitまたはrollbackでこれら取得した本来のEntityManagerがcloseされるようだ。&#60;/p&#62;
			&#60;p&#62;この場合EJB3でのユーザー管理のトランザクションと同じ動きなのでたぶん問題はない…はず。&#60;/p&#62;
			&#60;br /&#62;

			&#60;p&#62;ということはこのインジェクトをSpringやSeasar2のコンポーネントに対しても行うことができれば手軽にアプリケーションサーバー管理のJPAを扱うことができるはず。そうすれば日本語問題も解決しなくてもなんとかなるかな。&#60;/p&#62;
		&#60;/div&#62;</description>
	<pubDate>Tue, 13 May 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>marsのメモ: [NetBeans] NetBeans6.1を試す</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/masanobuimai/20080512#1210598794</guid>
	<link>http://d.hatena.ne.jp/masanobuimai/20080512#1210598794</link>
	<description>まずは見た目を自分好みに調整。IntelliJと設定できる項目がビミョーに異なるけど，それっぽくすることはできた。なによりBDF M+のちっこい方のビットマップフォントが使えて満足。 f:id:masanobuimai:20080512220333p:image   気になった点を上げる（主にダメ出し）。  foldingの余白のせいで，エディタの行頭位置がわかりづらいね。  NBのツールウィンドウの使い勝手がいまいち（単にあたしがIntelliJに慣れてるからって話か）。  なるほど，プロジェクトウィンドウ閉じると，パッと見，そのファイルがどこにあるのかわからんってことに気づいた。  ちょっとブランクあったけど，まだNetBeansは使えるし，人に使い方も教えられる。でもEclipseはすっかりご無沙汰になってしまって，今やどうやって使うのかもあやしくなってきたな。:-P</description>
	<pubDate>Mon, 12 May 2008 13:26:34 +0000</pubDate>
</item>
<item>
	<title>Masaki Katakai's Weblog: ねこび〜んの「ネットビーンズトラベル」が NetBeans.tv に！</title>
	<guid isPermaLink="false">http://blogs.sun.com/katakai/entry/nekobean_s_netbeans_travel_movie1</guid>
	<link>http://blogs.sun.com/katakai/entry/nekobean_s_netbeans_travel_movie1</link>
	<description>&#60;table border=&#34;0&#34; cellpadding=&#34;2&#34; cellspacing=&#34;2&#34;&#62;
&#60;tbody&#62;
&#60;tr&#62;
&#60;td&#62;&#60;a href=&#34;http://ja.netbeans.org/nekobean&#34;&#62;&#60;img alt=&#34;&#34; src=&#34;http://ja.netbeans.org/nekobean/nekobean-small.png&#34; align=&#34;left&#34; /&#62;&#60;/a&#62;&#60;/td&#62;
&#60;td&#62;&#60;a href=&#34;http://ja.netbeans.org/nekobean&#34;&#62;ねこび〜ん&#60;/a&#62;の「&#60;span&#62;&#60;a href=&#34;http://blogs.sun.com/katakai/entry/nekobean_s_netbeans_travel&#34;&#62;ネットビーンズトラベル&#60;/a&#62;&#60;/span&#62;」が NetBeans.tv に載りました！ NetBeans チームにとても気に入ってくれた人がいて是非 NetBeans.tv に載せたいと連絡をもらっていたのですが、&#60;a href=&#34;http://hibiki.imprix.net/&#34;&#62;Hibiki さん&#60;/a&#62;が頑張って Flash
をムービーにしてくれました、ありがとー！最初 Flash 版が載っていたのですがその時の NetBeans.tv
のトップページを撮っておいたので載せておきますね。&#60;br /&#62;
&#60;/td&#62;
&#60;/tr&#62;
&#60;/tbody&#62;
&#60;/table&#62;
&#60;ul&#62;
&#60;li&#62;&#60;a href=&#34;http://netbeans.tv/podcasts/NETBEANS-TRAVEL-343/&#34;&#62;NETBEANS
TRAVEL on NetBeans.tv&#60;/a&#62;&#60;/li&#62;
&#60;/ul&#62;
&#60;a href=&#34;http://netbeans.tv/podcasts/NETBEANS-TRAVEL-343/&#34;&#62;&#60;img alt=&#34;&#34; src=&#34;http://blogs.sun.com/katakai/resource/2008/nekobeantv01.png&#34; /&#62;&#60;/a&#62;&#60;br /&#62;</description>
	<pubDate>Mon, 12 May 2008 12:24:11 +0000</pubDate>
</item>
<item>
	<title>Masaki Katakai's Weblog: NekoBean's NETBEANS TRAVEL Movie on NetBeans.tv!</title>
	<guid isPermaLink="false">http://blogs.sun.com/katakai/entry/nekobean_s_netbeans_travel_movie</guid>
	<link>http://blogs.sun.com/katakai/entry/nekobean_s_netbeans_travel_movie</link>
	<description>&#60;table border=&#34;0&#34; cellpadding=&#34;2&#34; cellspacing=&#34;2&#34;&#62;
&#60;tbody&#62;
&#60;tr&#62;
&#60;td&#62;&#60;a href=&#34;http://ja.netbeans.org/nekobean&#34;&#62;&#60;img alt=&#34;&#34; src=&#34;http://ja.netbeans.org/nekobean/nekobean-small.png&#34; align=&#34;left&#34; /&#62;&#60;/a&#62;&#60;/td&#62;
&#60;td&#62;&#60;a href=&#34;http://ja.netbeans.org/nekobean&#34;&#62;NekoBean&#60;/a&#62;'s &#60;b&#62;NetBeans Travel&#60;/b&#62;
now on &#60;a href=&#34;http://netbeans.tv&#34;&#62;NetBeans.tv&#60;/a&#62;! Thank you very much &#60;a href=&#34;http://hibiki.imprix.net/&#34;&#62;Hibiki-san&#60;/a&#62; for preparing the
movie! The original flash movie is &#60;a href=&#34;http://hibiki.imprix.net/flash/nb06.swf&#34;&#62;here&#60;/a&#62;.&#60;br /&#62;
&#60;/td&#62;
&#60;/tr&#62;
&#60;/tbody&#62;
&#60;/table&#62;
&#60;ul&#62;
&#60;li&#62;&#60;a href=&#34;http://netbeans.tv/podcasts/NETBEANS-TRAVEL-343/&#34;&#62;NETBEANS
TRAVEL on NetBeans.tv&#60;/a&#62;&#60;/li&#62;
&#60;/ul&#62;
&#60;a href=&#34;http://netbeans.tv/podcasts/NETBEANS-TRAVEL-343/&#34;&#62;&#60;img alt=&#34;&#34; src=&#34;http://blogs.sun.com/katakai/resource/2008/nekobeantv00.png&#34; /&#62;&#60;/a&#62;</description>
	<pubDate>Mon, 12 May 2008 12:03:13 +0000</pubDate>
</item>
<item>
	<title>marsのメモ: [NetBeans] John O’Conner’s Blog: Creating OpenOffice Extensions</title>
	<guid isPermaLink="false">http://d.hatena.ne.jp/masanobuimai/20080511#1210509164</guid>
	<link>http://d.hatena.ne.jp/masanobuimai/20080511#1210509164</link>
	<description>「NetBeans使うとOpenOfficeのプラグイン開発が簡単だよ」というのなら，何でもいいからサンプルを載せてくれぃ。:-( いままでOpenOfficeはノーマークだったけど，Javaでプラグイン作れるんだったら，ちょっとチェックしておこうかな。</description>
	<pubDate>Sun, 11 May 2008 12:32:44 +0000</pubDate>
</item>
<item>
	<title>NetBeans: [NetBeans][Java][plugin開発]FileSystemに登録したjarをプロジェクトのクラスパスに登録</title>
	<guid isPermaLink="false">http://blogs.wankuma.com/kazuki/archive/2008/05/09/137077.aspx</guid>
	<link>http://blogs.wankuma.com/kazuki/archive/2008/05/09/137077.aspx</link>
	<description>&#60;p&#62;１つ前の投稿とのあわせ技で、プラグイン内に埋め込んだjarファイルをプロジェクトの下のlibフォルダにコピーしてクラスパスに追加するということが出来る。&#60;br /&#62;spring.jarをコピーして追加してクラスパスに追加するコードは下のようになる。&#60;/p&#62;
&#60;p&#62;まず、プラグインのプロジェクトの適当なパッケージにjarを追加する。&#60;br /&#62;ここでは、org/yourorghere/module3/spring.jarに置いたとして話を進める。&#60;/p&#62;
&#60;p&#62;そして、layer.xmlに登録する。&#60;/p&#62;
&#60;blockquote dir=&#34;ltr&#34;&#62;
&#60;p&#62;&#38;lt;folder name=&#34;MyArchives&#34;&gt;&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; &#38;lt;file name=&#34;spring.jar&#34; url=&#34;nbresloc:/org/yourorghere/module3/spring.jar&#34;&gt;&#38;lt;/file&gt;&#60;br /&#62;&#38;lt;/folder&gt;&#60;/p&#62;&#60;/blockquote&#62;
&#60;p dir=&#34;ltr&#34;&#62;後はコードで、コピって追加するだけ。&#60;/p&#62;
&#60;blockquote dir=&#34;ltr&#34;&#62;
&#60;p dir=&#34;ltr&#34;&#62;Project project = ....; // プロジェクトはどうにかしてとってくる&#60;br /&#62;Sources sources = project.getLookup().lookup(Sources.class);&#60;br /&#62;SourceGroup[] groups = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);&#60;/p&#62;
&#60;p dir=&#34;ltr&#34;&#62;// ファイルシステムからjarを取得&#60;br /&#62;FileSystem fs = Repository.getDefault().getDefaultFileSystem();&#60;br /&#62;FileObject springJar = fs.getRoot().getFileObject(&#34;MyArchives/spring.jar&#34;);&#60;/p&#62;
&#60;p dir=&#34;ltr&#34;&#62;try {&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; // libフォルダを作ってコピーする&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; FileObject libDir = project.getProjectDirectory().createFolder(&#34;lib&#34;);&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; FileUtil.copyFile(springJar, libDir, springJar.getName());&#60;/p&#62;
&#60;p dir=&#34;ltr&#34;&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; // jarファイルをクラスパスへ追加する&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; FileObject[] jars = libDir.getChildren();&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; URL[] uris = new URL[jars.length];&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; for (int i = 0; i &#38;lt; jars.length; i++) {&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; uris[i] = FileUtil.getArchiveRoot(jars[i]).getURL();&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; }&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; ProjectClassPathModifier.addRoots(uris, groups[0].getRootFolder(), ClassPath.COMPILE);&#60;br /&#62;} catch (MalformedURLException ex) {&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; Exceptions.printStackTrace(ex);&#60;br /&#62;} catch (IOException ex) {&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; Exceptions.printStackTrace(ex);&#60;br /&#62;} catch (UnsupportedOperationException ex) {&#60;br /&#62;&#38;nbsp;&#38;nbsp;&#38;nbsp; Exceptions.printStackTrace(ex);&#60;br /&#62;}&#60;/p&#62;&#60;/blockquote&#62;
&#60;p dir=&#34;ltr&#34;&#62;今日は、これがわかっただけで満足。&#60;br /&#62;来週ものは作ろう。&#60;/p&#62;&#60;img src=&#34;http://blogs.wankuma.com/kazuki/aggbug/137077.aspx&#34; width=&#34;1&#34; height=&#34;1&#34; /&#62;</description>
	<pubDate>Fri, 09 May 2008 18:19:00 +0000</pubDate>
</item>
<item>
	<title>NetBeans: [NetBeans][Java]モジュールからプロジェクトのライブラリにjarを追加するには</title>
	<guid isPermaLink="false">http://blogs.wankuma.com/kazuki/archive/2008/05/09/137069.aspx</guid>
	<link>http://blogs.wankuma.com/kazuki/archive/2008/05/09/137069.aspx</link>
	<description>&#60;p&#62;NetBeansのモジュール側からjarファイルをプロジェクトのクラスパスに追加したかった！&#60;/p&#62;
&#60;p&#62;ライブラリに登録してあるものに関しては、色々情報があったけど、jarファイルを直接登録する方法は、なかなか見つからなかったのでメモする。&#60;br /&#62;ポイントとなるクラスは、以下の１つのクラス。&#60;/p&#62;
&#60;blockquote dir=&#34;ltr&#34;&#62;
&#60;p&#62;org.netbeans.api.java.project.classpath.ProjectClassPathModifier&#60;/p&#62;&#60;/blockquote&#62;
&#60;p dir=&#34;ltr&#34;&#62;このクラスのaddRoots(URL[] classPathRoots, FileObject projectArtifact, String classPathType)このメソッドで追加できた。&#60;br /&#62;各々の引数には、下記の値を渡す。&#60;/p&#62;
&#60;p dir=&#34;ltr&#34;&#62;classPathRoots：FileUtil.getArchiveRoot(jarファイルのFileObject).getURL()したもの&#60;br /&#62;projectArtifact：プロジェクトのソースフォルダのFileObject&#60;br /&#62;classPathType：ClassPathクラスに定義されている定数（COMPILEかな）&#60;/p&#62;
&#60;p dir=&#34;ltr&#34;&#62;ということで、プロジェクトフォルダの下にlibフォルダにあるhoge.jarを追加する場合のコードは下のような感じになる。&#60;/p&#62;
&#60;blockquote dir=&#34;ltr&#34;&#62;
&#60;p dir=&#34;ltr&#34;&#62;Project project = ....; // ProjectはどうにかしてとってくるFileOwnerQueryとかで&#60;br /&#62;Sources sources = project.getLookup().lookup(Sources.class);&#60;br /&#62;// ソースフォルダ取得&#60;br /&#62;SourceGroup sourceGroup = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);&#60;br /&#62;&#60;br /&#62;// jarのFileObjectを取得&#60;br /&#62;FileObject libDir = project.getProjectDirectory().getFileObject(&#34;lib&#34;);&#60;br /&#62;FileObject hogeJar = libDir.getFileObject(&#34;hoge.jar&#34;);&#60;br /&#62;FileObject hogeArchiveRoot = FileUtil.getArchiveRoot(hogeJar);&#60;br /&#62;&#60;br /&#62;ProjectClassPathModifier.addRoots(new URL[]{ hogeArchiveRoot.getURL() }, sourceGroup.getRootFolder(), ClassPath.COMPILE);&#60;/p&#62;&#60;/blockquote&#62;
&#60;p dir=&#34;ltr&#34;&#62;たったこれだけなのに午後いっぱいくらい使ってしまったorz&#60;br /&#62;因みに参考情報：&#60;a href=&#34;http://fisheye5.cenqua.com/browse/sailfin/tools/netbeans/sip/src/main/java/org/jvnet/glassfish/comms/netbeans/sip/module/SIPProvider.java?r=1.6&#34;&#62;http://fisheye5.cenqua.com/browse/sailfin/tools/netbeans/sip/src/main/java/org/jvnet/glassfish/comms/netbeans/sip/module/SIPProvider.java?r=1.6&#60;/a&#62;&#60;br /&#62;&#60;br /&#62;&#60;br /&#62;&#60;br /&#62;&#60;/p&#62;&#60;img src=&#34;http://blogs.wankuma.com/kazuki/aggbug/137069.aspx&#34; width=&#34;1&#34; height=&#34;1&#34; /&#62;</description>
	<pubDate>Fri, 09 May 2008 17:28:00 +0000</pubDate>
</item>

</channel>
</rss>
