今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

自宅サーバ構築 - Roller編(3)

おおぬきさんから Geronimo-v2.1.1 なら動いたと、コメントで情報をいただいた。でも 2.0.2 で動かない原因が気になるところ。ってことで、原因を調べてみた。
$GERONIMO/var/catalina/logs/roller.log を見ると、RuntimeException が発生しているのがわかる。

ERROR 2008-06-12 16:39:39,060 StandardContext:listenerStart - Exception sending context initialized event to listener instance of class org.apache.roller.weblogger.ui.core.RollerContext
java.lang.RuntimeException: Error checking for tables
        at org.apache.roller.weblogger.business.startup.DatabaseInstaller.isCreationRequir
ed(DatabaseInstaller.java:83)

スタックトレースの一番上は原因の本質ではなくて、スタックトレースをずっとたどったところに、この RuntimeException の発生原因が出てた。

Caused by: java.lang.NullPointerException
        at org.tranql.connector.jdbc.ConnectionHandle.getMetaData(ConnectionHandle.java:321)
        at org.apache.roller.weblogger.business.startup.DatabaseInstaller.tableExists(DatabaseInstaller.java:1145)
        at org.apache.roller.weblogger.business.startup.DatabaseInstaller.isCreationRequired(DatabaseInstaller.java:78)
        ... 52 more

Roller のこの部分のソースコードは以下の通り。

    private boolean tableExists(Connection con, String tableName) throws SQLException {
        String[] types = {"TABLE"};
        ResultSet rs = con.getMetaData().getTables(null, null, "%", null);
        while (rs.next()) {
            if (tableName.toLowerCase().equals(rs.getString("TABLE_NAME").toLowerCase())) {
                return true;
            }
        }
        return false;
    }

スタックトレースからすると、getMetaData() は正常に呼び出されているけど、その先で NullPointerException が発生しているらしい。ってことは、TranQL のバグっぽい。設定の間違いではなさそうなんで、ここで追っかけるのは終わりにする。

Geronimo v2.1.1 を試す

Geronimo v2.1.1 をダウンロードして試してみた。

# wget http://ftp.riken.jp/net/apache/geronimo/2.1.1/geronimo-tomcat6-javaee5-2.1.1-bin.tar.gz
# tar zxvf geronimo-tomcat6-javaee5-2.1.1-bin.tar.gz
  :
# cp -R ../geronimo-tomcat6-jee5-2.0.2/repository/mysql repository
# bin/geronimo.sh run &
  :

Geronimo Console (http://192.168.1.3:8080/console/)にアクセスして、2.0.2 のときと同様に、Database Pools に RollerPool を追加し、Geronimo 2.0.2 で使ってた Roller4 を Geronimo の deploy にコピーする。

# cp -R ../apache-roller-4.0/webapp/roller/ deploy/
Roller Weblogger: Successfully loaded custom properties file from classpath

ロードされる時点では特にエラーも出なかったので、ブラウザから http://192.168.1.3/roller/ にアクセスしてみる。と、今までは必ずエラーが出てたのに、あっさりと Roller の初期画面が表示された。

ここで[Yes - create tables now]をクリック。

テーブルが作成されたらしい。
ここで、roller-install-guide.pdf の 8.2 Register a user and create a weblog を参照する。

If Roller starts up fine but doesn't find a front-page weblog then it will display the Completing Your Installation below that explains how to register your first user, create your first weblog and setup your site's front page.

front page の URL をどこにも書いてないし。。。orz
とりあえず、「Don't forget: Reset the installation.type flag」に以下のように書いてあるんで、そのように変更して再起動してみることに。

Now that you're done with the installation you should turn off Roller's auto-installation system. Edit your roller-custom.properties file and set installation.type=manual. Then restart your server or
Roller so that it accepts the new setting.

Geronimo を止めずに $GERONIMO/deploy/roller/WEB-INF/classes/roller-custom.properties を変更したら、こんなメッセージが。

Roller Weblogger: Successfully loaded custom properties file from classpath
Roller Weblogger: Successfully loaded custom properties file from classpath
Exception in thread "Geronimo hot deploy scanner" java.lang.OutOfMemoryError: PermGen space

Geronimo Console から Shutdown を実行してみたけど、Geronimo が終了してくれないし。仕方ないので、shell から kill してみると、OutOfMemoryError が発生。プロセスを終了できないし。仕方ないので強制終了。w

#jobs
[1]+  Running                 bin/geronimo.sh run &
# kill %1
Java HotSpot(TM) Client VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGTERM to handler- the VM may need to be forcibly terminated
# ps -C java
  :
# kill -9 (pid)

設定を変更するときは、Geronimo を止めてからやった方が安全かも。
$GERONIMO/repository/Roller の下にある、roller-custom.properties をチェックしてみると、deploy での変更が反映されてない。$GERONIMO/repository/Roller を削除し、$GERONIMO/var/config/config.xml から以下の部分(ファイルの一番最後にある)を削除して、Geronimo を再起動する。

    

再び、http://192.168.1.3:8080/roller/ にアクセスしてみる。何も反応がない。。。shell を見ると、OutOfMemoryError が出てるし。もう一度 Geronimo Console から Shutdown してみると、やっぱりこんな出力が。

Exception in thread "http-192.168.1.3-8080-1" java.lang.OutOfMemoryError: PermGen space
Exception in thread "http-192.168.1.3-8080-2" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Persistence Adaptor Task" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Roller Weblogger Task Scheduler" java.lang.OutOfMemoryError: PermGen space

もういいってば。
再び Geronimo のプロセスを強制終了。
$GERONIMO/bin/geronimo.sh を見ると、JavaVM オプションは JAVA_OPTS 環境変数に定義するらしい。JavaVM オプションを追加して再起動し、また http://192.168.1.3:8080/roller にアクセスしてみる。

# echo $JAVA_OPTS

# export JAVA_OPTS=-Xmx512m
# bin/geronimo.sh run &

キターーーーッ!!(゜∀゜)