MyFaces

<MyFaces>pre, post メソッドを作って、呼ぶ方法ではだめなことが判明・・・。この方法だと、request をラップしたい場合などに対応ができない (;_;) やはりサーブレットフィルタみたいな感じでフィルタに的にしないと無理っぽい・・・。どういう実装が考えたけど、実装としては、サーブレットフィルタみたいな感じがよいと思われる。というわけで、サーブレットフィルタの実装について確認してみよう。このような実装方法はデザインパターン的には何というのだろうか・・・。まぁ、そんなわけで、また、再検討・・・。ちょっと別件でやらねばならないことがあるので、今週中に処理するのは厳しいかな・・・。

<サーブレットフィルタ>MyFaces の問題を解決するべく、今、Tomcat のFilterChain まわりを見てみた。ざっと見た感じでは、

FilterChain (ApplicationFilterChain)

-> FilterConfig (ApplicationFilterConfig)

-> Filter

というような感じの構成で、FilterChain に FilterConfig と Servlet を入れておく感じ。このイメージをポートレットにも適用するのが正しいのかね。うーん、何か、MyFacesの問題を解決するのではなくて、ポートレットフィルタをどう実装すべきかになってきたような気が・・・。まぁ、汎用的なコードになるなら、MyFaces以外にいれるのもありかも。話は変わるが、Tomcat5のApplicationFilterChainまわりのauthorは、Craig R. McClanahanになっていた。いろいろとやっとるな・・・。

MyFaces

<MyFaces>1.1 の TCK をパスしたそうな。それはめでたい。これで、MyFaces も標準的な実装とお墨付きをもらったのね。めでたしめでたし。っで、こちらの作業としては、MyFacesポートレットの実装をはじめる。できれば、今週中に動くまでにしたいところ。でも、問題は、リフレクションを使いまくりなので、パフォーマンスが心配。というわけで、効率的な実装が必要な気がしている。現在のところ、preFacesRender,postFacesRender, preNonFacesRender, postNonFacesRender, preProcessAction, postProcessAction というメソッドが必要かね。他によい実装があるかな・・・。

Maven

<Maven>Maven2を学習中。ちらほら検索すると、pom.xmlがデフォルトエンコーディングで読まれるという情報もあった。確か、Maven1 のときもPOMで日本語が使えなかったので、バグをあげて、パッチを出したな・・・。Maven2 では、現在、修正されたのだろうか。まぁ、今のところ、pom.xmlで日本語を使わなければならない状況に達していないので、基礎を学ぶ。とりあえず、ポートレットのwarをビルドできるまでに至ったが、ビルドするにもMaven2用のリポジトリが必要なので、Maven1 からコンバートするようなスクリプトを書いた。Maven2用のリポジトリに、Jetspeed2のJarとか置かないとビルドできなかったりするため、変換する必要があった。一応、参考までに以下のようなものをPerlで書いた。

#!/usr/bin/perl
$maven1_repo=$ARGV[0];
$maven2_repo=$ARGV[1];
$tmp_file="/tmp/m2_repo.txt";
system("find $maven1_repo -type f | grep jars | grep '\.jar\$' > $tmp_file");
open(FILE, "$tmp_file");
while(<FILE>)
{
chomp();
my $jarfile=$_;
if($jarfile =~ /$maven1_repo([^\/]*)\/jars\/([^\d]*)-([0-9].*).jar/)
{
my $group_id=$1;
my $artifact_id=$2;
my $version=$3;
my $newdir=$maven2_repo."/".$group_id."/".$artifact_id."/".$version;
my $newjarfile=$newdir."/".$artifact_id."-".$version.".jar";
my $pomfile=$newdir."/".$artifact_id."-".$version.".pom";
print("mkdir -p $newdir\n");
system("mkdir -p $newdir");
print("ln -s $jarfile $newjarfile\n");
system("ln -s $jarfile $newjarfile");
open(POMFILE,">$pomfile");
print POMFILE "<project>";
print POMFILE "  <modelVersion>4.0.0</modelVersion>";
print POMFILE "  <groupId>$group_id</groupId>";
print POMFILE "  <artifactId>$artifact_id</artifactId>";
print POMFILE "  <version>$version</version>";
print POMFILE "</project>";
close(POMFILE);
}
}
close(FILE);

ごらんの通り、きれいなものではないが、とりあえず、Maven1のjarのシンボリックリンクを張り、pomファイルを生成する(もともとシェルスクリプトでちゃちゃっと書いたら、pomファイルがないと動かないことが判明し、perlに置き換えてみたりした。あとは重複して持つのも何だから、シンボリックリンクにしてみた)。まぁ、こんな感じで適当に書けば、Maven2でリポジトリが使えるようになると思われます。メーリングリストを調べると、ant を使ったコンバートするものもあるらしいが、使っていないのでその辺は不明・・・。とりあえずは、これでビルドできるようになったので、次の問題は、今まで、project.propertiesのようなところで設定していたプロパティをどのように設定すればよいのかが、よくわからん。こういう値は、プラグインの設定で与えるようになったのだろうか・・・。Maven2で作られたプロジェクトをもっと見てみたいところ・・・。何か良い例はないだろうか・・・。