NetbeansがSDLoaderと相性がよい件

軽くSDLoader調べてみたら、NetBeansのフォルダ構成ってそのままSDLoaderにぶちこめるじゃないですか・・・。
今は保存すると自動でコンパイルやリソース配備もできるので(しかもデフォルト設定はこちら)なおさら都合がいいですね。


つまり適当なmainをテストパッケージでもどこでもいいのでプロジェクトのフルパス設定さえしてあげれば、何も考えることなくWebプロジェクトがSDLoaderで起動する。build/webフォルダを設定してあげるだけ。


TomcatGlassfishもなしでそのまま動くのでJavaSEプロジェクトが必要かと思いきや、通常のTomcat用とかと同じWebプロジェクトでよいというオチはすばらしい。つまり、Java EE用の各種プラグインが有効なわけですよ。


1回起動してしまえば出力ウインドウで再起動/停止がアイコンクリックするだけで起動/停止できるようになるのと、そのアイコンの使用不可能状態によって起動中なのかどうかがすぐにわかりますのでなおさら便利に。

http://shin.cside.com/diary/2010/0115-01.png

配備後にJSP変更すると反映されますね。すばらしい。


GlassfishTomcatのようにサービスのサーバーカテゴリのところにぶら下げる必要はないくさい。NetBeansの出力はいわゆるEclipseのコンソールより切り替えが容易なので問題はないはず。でも多重起動してそのままわすれるってことはありそうかも。そのへんの制御もしてもいいかな。


なにこの便利さ。SDLoader用でサーバー起動するNetBeansプラグイン作るのもいいかもしれないねー。そのまま配布可能なアーカイブも生成できるようにすればなお良いか。


ただ、Struts 1.3.8とSpring MVC 2.5の起動は確認できたけど(NetBeansで標準サポートされているのでフレームワークの選択をするだけ)JSFは1.2、2.0ともに起動できず。

以下は2.0でのエラーですが、1.2でも同じです。1.2はすべて英文で表記されていますが。

致命的: InternalWebApplication initialize fail.
java.lang.RuntimeException: java.lang.IllegalStateException: アプリケーションは起動時に正しく初期化されず、ファクトリが見つかりませんでした: javax.faces.context.FacesContextFactory
        at sdloader.javaee.WebAppManager.init(WebAppManager.java:146)
        at sdloader.SDLoader.initWebApp(SDLoader.java:596)
        at sdloader.SDLoader.start(SDLoader.java:498)
        at SDLoaderStart.main(SDLoaderStart.java:17)
Caused by: java.lang.IllegalStateException: アプリケーションは起動時に正しく初期化されず、ファクトリが見つかりませんでした: javax.faces.context.FacesContextFactory
        at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:804)
        at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:306)
        at javax.faces.webapp.FacesServlet.init(FacesServlet.java:166)
        at sdloader.javaee.InternalWebApplication.initServlet(InternalWebApplication.java:209)

とりあえずそんなところ。


あと確認したところではJAX-RSJava RESTful Webサービスの標準API)は動いているくさい。

SDLoaderを使う場合ってのはスタンドアロンで軽く動かすのが目的だろうから、フロントエンドをGWTFlashにしてJAX-RSJSONのデータをやり取りするだけってのがシンプルでよいかもしれない。フロントエンドってのは時代によって変わるものと考えるとね。


もっともJAX-RSのRIはスタンドアロンサーバーも持っていてクラスパスにあるリソースがそのまますぐに公開できるんでどうかという気もしないわけではないが。

public static void main(String[] args) throws Exception{
  HttpServer server = HttpServerFactory.create("http://localhost:8888/");
  server.start();
}

本当にこれだけで動く。sunはやれば出来る子。