<MyFaces>1.1 の TCK をパスしたそうな。それはめでたい。これで、MyFaces も標準的な実装とお墨付きをもらったのね。めでたしめでたし。っで、こちらの作業としては、MyFacesポートレットの実装をはじめる。できれば、今週中に動くまでにしたいところ。でも、問題は、リフレクションを使いまくりなので、パフォーマンスが心配。というわけで、効率的な実装が必要な気がしている。現在のところ、preFacesRender,postFacesRender, preNonFacesRender, postNonFacesRender, preProcessAction, postProcessAction というメソッドが必要かね。他によい実装があるかな・・・。
カテゴリー: Apache
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で作られたプロジェクトをもっと見てみたいところ・・・。何か良い例はないだろうか・・・。
Maven
<Maven>Maven2 をいじる。何となくは理解したと思う。でも、Maven1 と比べて、ディレクトリ構造が違うというのもな・・・。src/java じゃなくて、src/main/java だったりするし・・・。まぁ、複雑なものを作るのは、まだ、無理だが、普通にwarを作るくらいまでの知識は得ただろう。http://maven.apache.org/maven2/getting-started.html を見れば、簡単にそれがわかるのだけどね。というわけで、ポートレットを作るwarでも作ってみよう。
<Tobago>ソースコードを見てみる。<head>にCSSやJavaScriptを足すのは、<html>などを使うのではなく、Tobago?の<layout:overview>が<html>を含めて生成するように見える。実際には、UIPageクラスがそれを処理しているようだ。<html>を含めて生成するというのは、Sun Java Creator 2のコンポーネントも同じような感じだったような気が・・・。つまり、MyFacesのようにAddResourceであとからフィルタなんて普通はやらんのではないかね。Tobagoでは、<layout:overview>が管理していると言うことは、MyFacesPortlet で、FacesContextとからUIPageを取得して、<head>に入れるものを取得すればよいのかね。となると、やはり、リフレクションを使って、MyFacesPortletで対応するのが良さそうかね。あと、Tobago について、ソースを見ていたら、どうも、Java 5 でしか動かないような気がする・・・。最近は、1.4 とかでも動かなくてもたいした問題ではないのかね・・・。
<JBoss Wiki>サポートされていないと思うが、JBoss Wiki を Jetspeed 2 に置いてみた。そんでもって、普通に動かない・・・。どうも、wiki.war を展開して、フィルタで致命的なエラーが起きたと言われている。どうしたものか・・・。あと、これまた、Java 5 でしか動かないようなことがドキュメント化されていた。うーん、そろそろ、Java 5 をデフォルトで使うようにした方がいいのだろうか・・・。