検索
カレンダー
2012年 5月
« 3月    
 12345
6789101112
13141516171819
20212223242526
2728293031  
ブログメニュー

Windowsのコマンドラインから既定のブラウザを起動するには

2009年10月21日

Windowsのコマンドラインから既定のブラウザを起動するには

rundll32 url.dll,FileProtocolHandler URL

という形で呼び出せばよいようです。「URL」は任意のURLに置き換えてください。

Javaから呼び出すときは

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);

のようになります。

CentOS5上でEclipse+TPTPを動かす

2008年10月16日

最近知ったんですが、TPTPの最新版(4.5)はAgentControllerを別途動かさなくてもよくなったので、かなり楽にプロファイリングができるようになりました。WTPと組み合わせると、とにかくスゴいです。ボタン一つでプロファイリングができてしまったりします。

今まではWindows上でやっていたのですが、今回はLinux上でやることになりました。インストールだけでは動かなかったのでメモを残しておきます。

まず、Eclipseはeclipse.orgからダウンロード。TPTPはTPTPプロジェクトのページから最新のものを取ってきました。

インストールやら設定やらをやって実行したのですが、「JPIAgent can’t load ACCollector」というエラーになってWTPからTomcatが起動できません・・・。

色々調べてみて環境変数やら起動オプションやらをいじっていると、今度は「agent library failed to init: JPBootLoader」とういエラーになりました。

もしかして、Linux版は別途AgentControllerが要るのか!?と思い、別途用意してみました。AgentControllerを起動すると、今度は「libstdc++-libc6.2-2.so.3がない」とのこと・・・。しかも、libstdc++は既に入っているのに・・・。

で、結局は、compat-libstdc++-296(compat-libstdc++-33かも)に入っていることが判明しました。これをyumでインストールして、無事AgentControllerを起動することができました。

・・・ここで気づいたんですが、 libstdc++-libc6.2-2.so.3があれば、AgentControllerを別途用意する必要はないみたいです。結局、このライブラリさえあれば、Eclupse+TPTPだけでプロファイリングできるみたいですね。

・・・疲れた。

Faceletsでエラー発生時にスタックトレースを表示させないようにするには

2008年4月28日

Faceletsでは例外が発生すると、faceletsが作ったスタックトレースを含む詳細なエラー画面が表示されます。
これは開発中には嬉しいんですが、実運用でスタックトレースを見せるのはまずいですよね。で、これを抑制することにしました。

・・・が、ここからかなり手間取りました(^^;まぁ、僕の予想が外れていただけなのですが。

エラー画面を見ると、右下に『Generated by Facelets』と書かれているので、どうやらFaceletsで作成しているようです。
そこでドキュメントを見ると、web.xmlに記述するコンテキストパラメータの「facelets.DEVELOPMENT」
で、エラーの詳細表示をするかどうかを指定できるようでした。
そこで早速falseにしてみたのですが・・・何も変化なし・・・。
どうやらデフォルトで無効のようです。

途方にくれて拙い英語の読解力で海外のメーリングリストを漁っていると、以下のようなページを見つけました!
http://www.mail-archive.com/users@myfaces.apache.org/msg47871.html

この回答で以下のようなものがありました(超意訳)


このページを見てごらん:http://wiki.apache.org/myfaces/Handling_Server_Errorsエラーハンドリングを無効にするにはこうすればいいんだ:

<!-- if you want to disable the behaviour completely -->
<context-param>
    <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
    <param-value>false</param-value>
</context-param>
<!-- if you are using myfaces + facelets don't forget to do this -->
<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>false</param-value>
</context-param>

てことらしいです。レオナルドに感謝!

Eclipse3.1におけるWTPとm2eclipseの連携

2007年12月25日

Eclipse3.1でWebアプリケーションを開発するとき、Maven2を使おうと思い立ちました。

で、準備を始めたのですが、ひとつだけ問題がありました。
それは「WTPのWebプロジェクトと、m2eclipseのMavenプロジェクトは、
そのままでは同時に適用できない」ということです。

これを実現するには、次の2つの方法があります。
1.Mavenプロジェクトでプロジェクトを作ってWebプロジェクトとしても登録する
2.Webプロジェクトでプロジェクトを作ってMavenプロジェクトとしても登録する

1の方法を紹介しているサイトを見つけたのですが、ワークスペースのプロジェクトファイルを
直接編集しないといけないようなので、もうひとつの2の方法を試してみることにしました。

以下、その手順です(私の環境はEclpise3.1+Pleiadesですので、文言もそれに合わせています)。


Webプロジェクトの作成

まず、動的Webプロジェクトを作成します。

動的Webプロジェクトの作成1
ここで気をつけることは、コンテンツディレクトリを「src/main/webapp」に、Javaソース・ディレクトリを「src/main/java」に変更することです。

動的Webプロジェクトの作成2
これで、Maven2のディレクトリ構成に沿ったWebプロジェクトが作成できます。

出力フォルダの設定(オプション)

さらにMavenに準拠させるために、プロジェクトの出力フォルダを設定します。
プロジェクトプロパティから「Javaのビルド・パス」を選択し、デフォルト出力フォルダを
「プロジェクト名/target/classes」に変更してください。

Mavenプロジェクトとして登録

プロジェクト名を右クリックし「Maven」→「Enable Dependency Management」を選択します。
それからパッケージングを「war」に変更してください。

新規POMの作成
そのまま進んでいくと、pom.xmlファイルが作成されます。
これで、このプロジェクトはm2eclipseの管理下に入りました。

(2007/12/16追記)

最後に、pom.xmlで定義した依存ライブラリにクラスパスを通す必要があります。
プロジェクトプロパティから「J2EEモジュール依存関係」を選択し、「Maven Dependencies」にチェックを入れてください。


たぶん、これでそれなりにMaven2に準拠したWebプロジェクトが作成できると思います。

log4j.propertiesの場所を指定したいときは

2007年11月30日

Javaでのログ出力でよく使われているlog4jですが、みなさんは設定ファイル(log4j.propertiesやlog4j.xml)はどこに置いているでしょうか。
もし何らかの事情で、指定したファイルをデフォルトの設定ファイルとしたい場合は、次のようにjavaの起動オプションで指定することができます。

java -Dlog4j.configuration=file://path/to/log4j.properties ...

すぐに忘れてしまうのでメモ。

JSF1.2+Faceletsでタグが動作しない

2007年9月12日

今、Javaのオールインワンフレームワークみたいなのを作っているんですが、思わぬところで問題にぶち当たりました。

ある理由でJSF1.2を使おうと思っているのですが、MyFaces1.2とFaceletsを組み合わせるとFaceletsで用意されているc:ifタグが効かなくなってしまう問題に遭遇しました。コードを追いかけたのですが、どうやらTomcatの方に行っているようで、なんだかわからなくなってしまいました。

Facelets用のカスタムタグを独自に作るか、このページにあるように rendered 属性で何とかするしかないのかも・・・。極力車輪の再発明はしない方向で考えているので、renderedで進めることにします。

同じ問題に遭遇している人へのメモでした。


(2007/11/27追記)
Faceletsを1.1.14にしたら動作するようになりました。


(2008/05/10追記)
h:viewのbeforePhaseListenerで呼び出されるメソッドの結果が、c:ifの判定文の中から見ることができないようです。
メソッドが呼び出されるより前に判定されているような…?

(2010/01/28追記)
この問題は解決したんですが書き忘れていました。どうやら、JSFのタグとJSTLのタグは評価されるタイミング違うようですね。
JSF2.0なら c:forEach の代わりに ui:repeat が使えます。

JSF の h:inputSecret タグで初期値を表示するには

2007年8月16日

JSF の h:inputText タグと h:inputSecret タグの違いは、type属性が”text”と”password”となる以外にもあります。

それは初期値です。

例えばユーザ名とパスワードを入力する画面をJSFで作り、ユーザ名を h:inputText タグで、パスワードを h:inputSecret タグで作ったとします。こから呼び出されたアクションメソッドでnullを返した場合、元の画面に遷移することになります。このとき、ユーザ名のフィールドには入力した文字列が入ったままになっていますが、パスワードのフィールドは空になります。

パスワードのフィールドも空にせずに値を入れたままにしたい場合は、

<h:inputSecret value="#{password}" redisplay="true" />

というように「redisplay=”true”」を定義します。