PALポータル(Jetspeed2) on JBoss AS 4.0.5 GA

Jetspeed2 を JBoss 上で動かすための最新のやり方がどこかにあるか知らないけど、メモがてら、やり方をまとめておく。クラスローダーまわりでちょっと問題があるので、Jetspeed のロギングの初期化を抜いたりした。Jetspeed2 の場合は、palportal の部分は、jetspeed に置き換える。../PALPortal には、PALポータルの Tomcat 版(普通のバイナリ)をインストールしておく。

$ cd /tmp
$ unzip /tmp/jboss-4.0.5.GA.zip
$ cd jboss-4.0.5.GA/
$ cp -r ../PALPortal/webapps/palportal/ server/default/deploy/palportal.war
$ cp ../PALPortal/shared/lib/*.jar server/default/lib/
$ cp -r ../PALPortal/database/ .
$ vi server/default/deploy/palportal-ds.xml
<datasources>
<local-tx-datasource>
<jndi-name>/JetspeedDS</jndi-name>
<connection-url>jdbc:derby:/tmp/jboss-4.0.5.GA/database/derby/productiondb;create=true</connection-url>
<driver-class>org.apache.derby.jdbc.EmbeddedDriver</driver-class>
<user-name></user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>0</idle-timeout-minutes>
</local-tx-datasource>
</datasources>
$ vi ./server/default/deploy/palportal.war/WEB-INF/assembly/deployment.xml
<!--
<bean id="org.apache.jetspeed.tools.pamanager.servletcontainer.ApplicationServerManager"
class="org.apache.jetspeed.tools.pamanager.servletcontainer.TomcatManager"
init-method="start" destroy-method="stop"
>
<constructor-arg index="0"><value>${autodeployment.catalina.base}</value></constructor-arg>
<constructor-arg index="1"><value>${autodeployment.catalina.engine}</value></constructor-arg>
<constructor-arg index="2"><value>${autodeployment.server}</value></constructor-arg>
<constructor-arg index="3"><value>${autodeployment.port}</value></constructor-arg>
<constructor-arg index="4"><value>${autodeployment.user}</value></constructor-arg>
<constructor-arg index="5"><value>${autodeployment.password}</value></constructor-arg>
</bean>
-->
<bean id="org.apache.jetspeed.tools.pamanager.servletcontainer.ApplicationServerManager"
class="org.apache.jetspeed.tools.pamanager.servletcontainer.JBossManager"
init-method="start" />
$ rm server/default/deploy/palportal.war/WEB-INF/lib/commons-logging-*.jar
$ rm server/default/deploy/palportal.war/WEB-INF/lib/log4j-*.jar
$ vi server/default/deploy/palportal.war/WEB-INF/web.xml
<!--
<listener>
<listener-class>org.apache.jetspeed.webapp.logging.Log4JConfigurator</listener-class>
</listener>
-->
$ vi server/default/deploy/palportal.war/WEB-INF/jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<class-loading>
<loader-repository java2ClassLoadingCompliance="false">
org.apache.jetspeed:loader=palportal.war<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</class-loading>
<security-domain flushOnSessionInvalidation="true">java:/jaas/Jetspeed</security-domain>
<resource-ref>
<res-ref-name>jdbc/jetspeed</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<jndi-name>java:/JetspeedDS</jndi-name>
</resource-ref>
</jboss-web>
$ vi server/default/conf/login-config.xml
<application-policy name="Jetspeed">
<authentication>
<login-module code="org.apache.jetspeed.security.impl.ext.JBossLoginModule"
flag="required">
<module-option name="unauthenticatedIdentity">guest</module-option>
</login-module>
</authentication>
</application-policy>
$ pushd server/default/deploy/palportal.war/WEB-INF/deploy/
$ for warfile in `find . -type f|grep war`; do tfile=`zipnote $warfile|grep commons-logging|sed -e "s/@ //"`;if [ ! x$tfile = "x" ] ; then zip -d $warfile $tfile; fi; done
$ for warfile in `find . -type f|grep war`; do tfile=`zipnote $warfile|grep log4j|sed -e "s/@ //"`;if [ ! x$tfile = "x" ] ; then zip -d $warfile $tfile; fi; done
$ popd
$ ./bin/run.sh

PALポータルとしては、pal-admin が XML パーサ問題(Teedaでよくある URL の amp; の話)で動かないので、pal-admin を修正しておく予定。基本的には、普通に動いていると思う。今度は、4.2系で試してみるか。

Linux上でDBFluteを使って多くのテーブルを処理する

今まで、Linux 上で DBFlute で起きていた問題ですけど、原因がわかりました。ファイルを開き過ぎで、対象のリソースが開けなくなったみたいです。つまり、ファイルディスクリプタのリミットにはまった感じ。ユーザーごとの限界値を見てみると、デフォルトで、

$ ulimit -n
1024

という感じで、1024。というわけで、

$ su
# ulimit -n 65536
# su taro
$ ./generate.sh

とかやれば、成功する(ユーザーではulimitできんかった)。うーん、こんな所にはまるとは・・・。というか、これをログだけ見て気づくの無理なんじゃないか。だって、Velocity 1.3 の FileResourceLoader#findTemplate で FileNotFoundException を捨てるんだもん・・・(結局、Velocityを追いました)。というわけで、私みたいにテーブルをガツガツ作らないで Linux でやれば通るだろうし、他の OS ならリミットが違うから問題が起こらないわけなのね。0.5.7 では問題なかったということは、0.5.8 から開きっぱなしになるファイル数が増えているということかな・・・(DBFlute の差分は把握してないですが)。とりあえず、原因もわかってすっきりしました(id:jflute さん、お騒がせいたしました)。