差分クロール

Fess 3.0 のやりたいことリストで書き忘れてたけど、差分クロールを実装してみた。今までは Last Modifed を気にせず、GET しにいっていたけど、前回クロールで取得していたら、HEAD で Last Modified を取得・比較して、更新されていたら GET しにいって、インデックスを更新する。差分クロールをするかどうかは管理画面から変更可能な感じ。差分クロールすると外部へのコンテンツ取得の負荷は下がるけど、前回データが Solr の中にあるので(つまりSolrに聞きにいくことになる)、Solrへの負荷が上がる感じ。というわけで、それを踏まえて利用するかどうかを決めるのが良いかと。

次は、外部から接続可能なAPIを作ることかな…。

実装クラスはpublicでない方が良いのか…

Twitter4Jでpublicなインターフェースがあって、その実装クラスがpublicでない感じなのだが、まぁ、これはこれで実装クラスを隠蔽して触らせない感じでライブラリを作る側からすると変更しやすいのでよくあるパターンの一つかと思う。でも、リフレクションをしたりするには実装クラスがpublicでないから、publicなインターフェースを使わないとアクセスできない。Seasar2 の Beans とかは実装クラスを使うので取れない感じに陥る。昔は綺麗な感じの設計が好きだったので前者の方だったのだけど、今は開発現場で便利に使える方が重要なので実装クラスはpublicでもいいんじゃない派になっている(publicフィールドにも結構抵抗があったけど、今じゃあれはあれで現場で便利だから拒否反応はなくなった)。S2のBeansで引数増やすとか、ゴニョゴニョと頑張るとかもあるかもしれないけど、そこでがんばるのも微妙な気がして…(Beansの中で実装クラスがpublicじゃなかったらインターフェースを取りにいってアクセスするとか?)。うーん、美しい設計(いまいち何と表現するのが良いか分からんけど)がいいのか、現場で便利なのがいいのか、どちらも間違ってはいないと思うしな。そんな私を悩ます問題は、ディスカッションの「TFJ-298 リフレクションで値が取れない」という話。いろんな考えがある気がしますが、他の方のご意見も興味ありますので時間がありましたらよろしくお願いします~。

Fess 3.0 でやりたこと

Fess 3.0 でやりたいことをあげてみる。

  • Solr 1.4対応
  • Solrの設定をマルチコアにしておく
  • クロール処理のプロセス化
  • 設定ウィザード
  • ヘルプ機能

Solr 1.4は前から移行しようと思ってたことだけど、マルチコア設定は一つのSolrで複数のFessを扱いやすいようにしたいのでデフォルトでマルチコアにしやすい設定ファイル構成に変えました。Solrの移行系作業は既に完了して、クロール処理のプロセス化に取り組み中。今まではスレッドでクロール処理をしていたのだけど、これだとたとえばJava自体のバグとか踏んだりするとデッドロックになる可能性があり、システム自体を立ち上げ直す必要がある。というわけで、別プロセスとしてクロール処理をすることで、そうなっても強制終了することができる。同じプロセス内のスレッドだと何ともしようがないからね。最後の二つは使いやすくしたいので、考え中。ルータの設定とかだと、設定ウィザードみたいなシンプルな設定をよく見るから、そんな感じで設定もできるようにしたい。ヘルプ機能はHudsonのようにフォームの右側にヘルプアイコンを用意しておいて、クリックするとヘルプが表示されるのをイメージしている。そんな感じで、進めていこうかとおもってますー。