忘れてしまうので、ドキュメントのダウンロード用のURLを記録しておこう。
以下は2012年6月12日現在のURL。
J2SE API reference download
http://www.oracle.com/technetwork/jp/java/java-sun-1440465-ja.html(日)
http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html(日英)
J2EE API reference(Servlet含む) download
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eedocs-419425.html
エラーメッセージとしては、「ページが見つかりませんでした」と表示されるだけなのでサーバにアクセスしているのかどうか分かりにくいのだが、動作の様子からするとそもそもブラウザが通信をできなくなっているようだった。
設定を確認するとモバイルネットワークは正常に機能していて、Android marketや各種のネットワークを利用するアプリケーションは利用できるのに、なぜかブラウザだけが上記のようなメッセージを出してどこにも接続できない。Wifiでは接続できていたので、単純にブラウザがモバイルネットワークを利用できない問題なのだろうと考えて、別のブラウザをインストールしてみたりしたのだが、解決できなかった。
最終的に解決策としては、ViRobotというアプリケーションに3G Networkのリストアという機能があるので、これを実行することで解決できた。ブラウザが利用するプロファイルみたいなものが壊れていたということだろうか。
原因は、DBIやJSP(JDBC)のドライバではなくPostgreSQLがprepared statementのときに検索コストの見積もりが
うまく行われていたいためらしい。このためpsqlのプロンプトやそこでexplainなどで値の埋め込まれたクエリを調べても、インデックスが使われるので障害を再現できない。
解決策の一つはprepared statementをやめることだが、
"SET enable_seqscan TO off"をPrepared statementのクエリ内で実行して強制的にインデックスを使用させるという方法もある。
http://thinkit.co.jp/free/marugoto/2/1/17/
Prepared statementの場合に有効かどうか分からないが、インデックスが使用されない場合はシーケンシャルスキャンのコストを変更することでもインデックスが使用されることがあるらしい。
ALTER DATABASE mydb SET seq_page_cost=2;
http://www.postgresonline.com/journal/archives/149-Forcing-the-planners-hand-with-set-enable_seqscan-off-WTF.html
このあたりの詳細な説明としては、FAQに項目があるようだ。
Why is my query much slower when run as a prepared query?
http://wiki.postgresql.org/wiki/FAQ#Why_is_my_query_much_slower_when_run_as_a_prepared_query.3F
(ということを、何回も忘れては調べて思い出しているので、こうしてブログに書いておけばあとで検索エンジンに引っかかるだろう。)
ソースコード検索をしたくなって先日Gonziuiをインストールしてみた結果、Perlのパッケージへの対応が不十分な様子だったので今度はOpenGrokをインストールしてみた。
日本語の紹介記事
http://sakplus.jp/2010/05/28/opengrok/
OpenGrokのホームページ
http://hub.opensolaris.org/bin/view/Project+opengrok/WebHome
まず事前にctagsとjavaとTomcatをインストールしておく。今回は、JDK1.6を/usr/local/java/jdk1.6.0_24に(/usr/local/java/currentにシンボリックリンク)、Tomcatを/home/tomcat/apache-tomcat-7.0.8にインストールした。
一応、antもインストールしておいた。
次に、opengrok-0.10.tar.gzをダウンロードして展開。
/home/tomcat/opengrok-0.10/
とした。ソースなどを置くデータ用のディレクトリとして、
/home/tomcat/opengrok_data
を作成しておいた。
環境変数は以下のように設定。
export PATH=/usr/local/java/current/bin:$PATH:/usr/local/java/lib/apache-ant-1.8.2/bin
export JAVA_HOME=/usr/local/java/current
export ANT_HOME=/usr/local/java/lib/apache-ant-1.8.2
export OPENGROK_TOMCAT_BASE=/home/tomcat/apache-tomcat-7.0.8
export OPENGROK_INSTANCE_BASE=/home/tomcat/opengrok_data
export EXUBERANT_CTAGS=/usr/bin/ctags
また、~/apache-tomcat-7.0.8/conf/server.xml内のポート番号8080を2424に変更しておく。
次にインデックス作成
cd opengrok-0.10/bin
./OpenGrok index
次にデプロイ
./OpenGrok deploy
http://[ホスト]:2424/sourceにアクセスすると、インストールができていれば検索フォームが表示される。ただ、ここで検索するとエラーになって(NullPointerExceptionだったかな?)、catalina.outには以下のようなエラーログが残っていた。どうやらconfigration.xmlは/var/opengrok/etc以下にないといけないようだ。(追記参照2011-03-16)
java.io.FileNotFoundException: /var/opengrok/etc/configuration.xml (No such file or directory)
環境変数を色々設定して試してみても駄目そうだったので、以下のようにしてシンボリックリンクを作成。
ln -s /home/tomcat/opengrok_data/etc/configuration.xml /var/opengrok/etc/configuration.xml
これで、念のため再度インデックスとデプロイをすると、検索もちゃんと機能するようになった。PerlもOKだし、日本語もOKだし、Perlのパッケージ名もOKだ。
-------
2011-03-16追記
configuration.xmlの置き場所を変更するには、まず${CATALILNA_HOME}/webapps/source/WEB-INF/web.xmlの以下のような箇所を変更する。
<param-name>CONFIGURATION</param-name>
<param-value>/var/opengrok/etc/configuration.xml</param-value>
次にzipコマンドでwarファイルを更新。
zip -u ../source.war WEB-INF/web.xml
これでOK。(webapps/source/は一度削除した方がいい?)
一応環境変数も設定しておく(効果ある?)
export READ_XML_CONFIGURATION=/home/opengrok/opengrok_data/etc/configuration.xml