Ubuntuでjavaのalternativesを変更する

UbuntuでJava 8をデフォルトで使おうと思うと、alternativesの値を変更する必要があると思うけど、update-alternatives -allで確認すると結構あるのでまとめておく。たとえば、/usr/lib/jvm/jdk1.8.0にJava 8を置いたら以下の感じ。

sudo update-alternatives --install "/usr/bin/ControlPanel" "ControlPanel" "/usr/lib/jvm/jdk1.8.0/jre/bin/ControlPanel" 1
sudo update-alternatives --install "/usr/bin/appletviewer" "appletviewer" "/usr/lib/jvm/jdk1.8.0/bin/appletviewer" 1
sudo update-alternatives --install "/usr/bin/extcheck" "extcheck" "/usr/lib/jvm/jdk1.8.0/bin/extcheck" 1
sudo update-alternatives --install "/usr/bin/idlj" "idlj" "/usr/lib/jvm/jdk1.8.0/bin/idlj" 1
sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jvm/jdk1.8.0/bin/jar" 1
sudo update-alternatives --install "/usr/bin/jarsigner" "jarsigner" "/usr/lib/jvm/jdk1.8.0/bin/jarsigner" 1
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0/jre/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/lib/jvm/jdk1.8.0/bin/javadoc" 1
sudo update-alternatives --install "/usr/bin/javafxpackager" "javafxpackager" "/usr/lib/jvm/jdk1.8.0/bin/javafxpackager" 1
sudo update-alternatives --install "/usr/bin/javah" "javah" "/usr/lib/jvm/jdk1.8.0/bin/javah" 1
sudo update-alternatives --install "/usr/bin/javap" "javap" "/usr/lib/jvm/jdk1.8.0/bin/javap" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0/jre/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/jcmd" "jcmd" "/usr/lib/jvm/jdk1.8.0/bin/jcmd" 1
sudo update-alternatives --install "/usr/bin/jconsole" "jconsole" "/usr/lib/jvm/jdk1.8.0/bin/jconsole" 1
sudo update-alternatives --install "/usr/bin/jcontrol" "jcontrol" "/usr/lib/jvm/jdk1.8.0/jre/bin/jcontrol" 1
sudo update-alternatives --install "/usr/bin/jdb" "jdb" "/usr/lib/jvm/jdk1.8.0/bin/jdb" 1
sudo update-alternatives --install "/usr/bin/jexec" "jexec" "/usr/lib/jvm/jdk1.8.0/jre/lib/jexec" 1
sudo update-alternatives --install "/usr/bin/jhat" "jhat" "/usr/lib/jvm/jdk1.8.0/bin/jhat" 1
sudo update-alternatives --install "/usr/bin/jinfo" "jinfo" "/usr/lib/jvm/jdk1.8.0/bin/jinfo" 1
sudo update-alternatives --install "/usr/bin/jmap" "jmap" "/usr/lib/jvm/jdk1.8.0/bin/jmap" 1
sudo update-alternatives --install "/usr/bin/jps" "jps" "/usr/lib/jvm/jdk1.8.0/bin/jps" 1
sudo update-alternatives --install "/usr/bin/jrunscript" "jrunscript" "/usr/lib/jvm/jdk1.8.0/bin/jrunscript" 1
sudo update-alternatives --install "/usr/bin/jsadebugd" "jsadebugd" "/usr/lib/jvm/jdk1.8.0/bin/jsadebugd" 1
sudo update-alternatives --install "/usr/bin/jstack" "jstack" "/usr/lib/jvm/jdk1.8.0/bin/jstack" 1
sudo update-alternatives --install "/usr/bin/jstat" "jstat" "/usr/lib/jvm/jdk1.8.0/bin/jstat" 1
sudo update-alternatives --install "/usr/bin/jstatd" "jstatd" "/usr/lib/jvm/jdk1.8.0/bin/jstatd" 1
sudo update-alternatives --install "/usr/bin/jvisualvm" "jvisualvm" "/usr/lib/jvm/jdk1.8.0/bin/jvisualvm" 1
sudo update-alternatives --install "/usr/bin/keytool" "keytool" "/usr/lib/jvm/jdk1.8.0/jre/bin/keytool" 1
sudo update-alternatives --install "/usr/lib/mozilla/plugins/libnpjp2.so" "libnpjp2.so" "/usr/lib/jvm/jdk1.8.0/jre/lib/amd64/libnpjp2.so" 1
sudo update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/jdk1.8.0/jre/lib/amd64/libnpjp2.so" 1
sudo update-alternatives --install "/usr/bin/native2ascii" "native2ascii" "/usr/lib/jvm/jdk1.8.0/bin/native2ascii" 1
sudo update-alternatives --install "/usr/bin/orbd" "orbd" "/usr/lib/jvm/jdk1.8.0/jre/bin/orbd" 1
sudo update-alternatives --install "/usr/bin/pack200" "pack200" "/usr/lib/jvm/jdk1.8.0/jre/bin/pack200" 1
sudo update-alternatives --install "/usr/bin/policytool" "policytool" "/usr/lib/jvm/jdk1.8.0/jre/bin/policytool" 1
sudo update-alternatives --install "/usr/bin/rmic" "rmic" "/usr/lib/jvm/jdk1.8.0/bin/rmic" 1
sudo update-alternatives --install "/usr/bin/rmid" "rmid" "/usr/lib/jvm/jdk1.8.0/jre/bin/rmid" 1
sudo update-alternatives --install "/usr/bin/rmiregistry" "rmiregistry" "/usr/lib/jvm/jdk1.8.0/jre/bin/rmiregistry" 1
sudo update-alternatives --install "/usr/bin/schemagen" "schemagen" "/usr/lib/jvm/jdk1.8.0/bin/schemagen" 1
sudo update-alternatives --install "/usr/bin/serialver" "serialver" "/usr/lib/jvm/jdk1.8.0/bin/serialver" 1
sudo update-alternatives --install "/usr/bin/servertool" "servertool" "/usr/lib/jvm/jdk1.8.0/jre/bin/servertool" 1
sudo update-alternatives --install "/usr/bin/tnameserv" "tnameserv" "/usr/lib/jvm/jdk1.8.0/jre/bin/tnameserv" 1
sudo update-alternatives --install "/usr/bin/unpack200" "unpack200" "/usr/lib/jvm/jdk1.8.0/jre/bin/unpack200" 1
sudo update-alternatives --install "/usr/bin/wsgen" "wsgen" "/usr/lib/jvm/jdk1.8.0/bin/wsgen" 1
sudo update-alternatives --install "/usr/bin/wsimport" "wsimport" "/usr/lib/jvm/jdk1.8.0/bin/wsimport" 1
sudo update-alternatives --install "/usr/bin/xjc" "xjc" "/usr/lib/jvm/jdk1.8.0/bin/xjc" 1

そして、

sudo update-alternatives --all

で全部の設定が聞かれるので対象箇所を変更しておく。

Fess 9.0リリース

リリースしました。ここから取得できます。四半期くらいでリリースしていきたいところでしたが、今回はいろいろと大きな変更を入れたので、半年近く時間がかかってしまいました。まぁ、いろいろな案件をこなしながら、ブラッシュアップしてきている感じではありますが。大きなところをまとめておくと、

  • ジョブ管理機能

以前はクロールのスケジュールはバッチなどを組まないと複数実行できなかったのですが、Fess 9では任意のジョブを組めるようにしました。ですので、クロールのスケジュールを指定すると言うよりは実行したい処理をジョブとして管理画面から登録する感じになります(まだ、ドキュメント不足感はありますが…)。ジョブを記述する言語は現時点ではgroovyをサポートしています。いろいろな言語をサポートできる気はしていますが、将来的に必要に応じて考えていこうと思います。

  • サジェスト

今回のリリースからは独自のサジェストを搭載しています。今まではSolrの機能に依存するサジェストでしたが、あの機能では日本語環境ではあまりに厳しいものがあります。というわけで、サジェストのデータはSolrにストアするものの機能自体は独自になっています。Fess 9ではクロールしたコンテンツのデータだけを元にサジェストをしていますが、次のバージョンでは検索ログ等の情報を含めてFess側でサジェストを構築する予定です。そんな感じで、この辺は今後も磨かれていくことでしょう。

  • ファイルのプロキシダウンロード

ファイルシステムや共有フォルダをクロールすると、file:〜のリンクになりますが、近年のブラウザのセキュリティ強化により検索結果上でfile:のリンクを表示してもクリックしたところで何も反応しないため、なかなか厳しい状況にありました。以前のリリースまでは標準ではJavaアプレットによりファイルを直接開く方法を採用していましたが、それはそれで厳しい状況になってきたため、今回のリリースからはFess自体でプロキシしてコンテンツを返すことにしました。つまり、ファイルシステムや共有フォルダに対して、それらを公開するウェブサーバなどを別途立てなくてもFess単独でコンテンツを返却することができます。ロール検索についても認証情報が適用されるので、不要なコンテンツはダウンロードできないようになっています。

  • Solr 4.6.1

利用しているSolrのバージョンを更新しています。SolrCloudなどの環境でも利用しやすい感じになっています。

  • リアルタイムにクリック数とお気に入り数の反映

今まではクリック数やお気に入り数は再インデックス後に反映されていました。今回のリリースではLuceneのdocValueを利用することで再インデックスをすることなく、それらの値が更新されリアルタイムに利用することができます。

  • 辞書管理

ユーザー辞書と同義語辞書について管理画面で変更することができるようになりました。ただし、編集時に辞書情報をメモリー上にロードするため、辞書のサイズ分のメモリが編集時には必要になります(数分利用しないとメモリーは解放されます)。また、Solrの辞書の場合は辞書を更新すると再起動が必要になるかと思いますが、Fessでは再起動をすることなく、辞書情報が更新されると反映されます。ただし、形態素解析等では単語の区切り方が変わるため、再インデックスが必要になる場合があります。という感じで、辞書周り全体の機能が強化された感じですが、将来のリリースではSynonymFilterまわりの日本語問題が残っているので対応したいと考えています。

大きなところはそんな感じでしょうか。その他にもAPI周りを大きくリファクタリングしたり、SolrCloud対応とかいろいろとある感じかと。次はFess 9.1を考えていますが近いうちにリリースしたいと考えています。

Fess 9のサジェスト機能

ブログも書こうと思っていてもなかなか手が回っていない今日このごろ…。というのは置いておいて、Fess 9もリリースできる日が近づいてきてます。これまでのバージョンでもSolrの機能をベースにしたサジェスト機能はあったのだけど、これって、日本語環境のサジェストには向いていない。というか、その枠組みだと、スペーラーの域を超えることは難しくて、Fessの案件でも結構苦労して対応してきています。そいうのもあって、Fessとしては今までサジェスト機能は使えるには使えるけど、みたいな感じでアピールしてもきませんでした。
ということで、Fess 9では仕組みから見なおして、Solr上のインデックスでサジェストはするものの、独自の実装を採用しました(しかも、私が主導で設計も実装しないでも実装できたことが大きい)。Fessのサジェストとしてはこれで枠組みができた感じなので、将来のリリースではより洗練したサジェストへ進んでいくでしょう。そんなわけですので、これはこれでいろいろとフィードバックをいただけると嬉しいです。
ひとまず、サジェストについて書きましたが、Fess 9はSolrプラグインを強化することで、辞書の編集とか、docValue対応とか、Solr自体の機能向上したり、Fess自体ではジョブ管理機能を持つことでFess上でいろいろなこと(とりあえず、groovyで記述すれば何でも実行できる)を実行できます。そんな感じで、かなり機能を追加したのでリリースが遅れてます…。現時点ではSolr 4.6.1がリリースされたら、リリースしようかと考えています。