Integer.java を見てみる。Integerは、value(int)を単純にラップしているっぽい。このvalueはfinalだから変更できない(どおりで++とかないわけね)。前にも見たことがあるのだけど、-128~127のIntegerが必要ならvalueOfを使うと、キャッシュのIntegerを使ってくれる。1.5から導入されている “bit twiddling” メソッドあたりとか、こまごまとしたメソッドがあるので、社内勉強会で説明してもらおうっと。
カテゴリー: Java
GlassFishとApacheの連携(1台クラスタ版)
単純なApacheと連携やクラスタの設定は以前書いてものを参照してもらうとして、GlassFishのクラスタ構成でApacheとmod_jkでつなぐのを試す。
mod_jkの設定
# vi /etc/httpd/conf.d/jk.conf LoadModule jk_module modules/mod_jk.so JkWorkersFile /etc/httpd/conf/workers.properties JkLogFile /var/log/httpd/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat "%w %V %T" JkShmFile "/tmp/jk-runtime-status" JkMount /clusterjsp/* loadbalancer # vi /etc/httpd/conf/workers.properties worker.list=loadbalancer worker.loadbalancer.balance_workers=worker1,worker2 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.lbfactor=1 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300 worker.worker2.type=ajp13 worker.worker2.host=localhost worker.worker2.port=8010 worker.worker2.lbfactor=1 worker.worker2.socket_keepalive=1 worker.worker2.socket_timeout=300 worker.loadbalancer.type=lb # exit
ドメインとノードエージェントを起動して、パラメータ設定
$ ./bin/asadmin start-domain
$ ./bin/asadmin create-jvm-options --target cluster1 "-DjvmRoute=\${AJP_INSTANCE_NAME}"
$ ./bin/asadmin create-jvm-options --target cluster1 "-Dcom.sun.enterprise.web.connector.enableJK=\${AJP_PORT}"
$ ./bin/asadmin create-system-properties --target instance-ONE AJP_INSTANCE_NAME=instanceONE
$ ./bin/asadmin create-system-properties --target instance-ONE AJP_PORT=8009
$ ./bin/asadmin create-system-properties --target instance-TWO AJP_INSTANCE_NAME=instanceTWO
$ ./bin/asadmin create-system-properties --target instance-TWO AJP_PORT=8010
$ ./bin/asadmin stop-domain
$ ./bin/asadmin start-domain
$ ./bin/asadmin start-node-agent --syncinstances=true cluster1-nodeagent
1台でインスタンスが 2 つあるため、設定が面倒。Webの管理ツールでインスタンスのプロパティをみるとエラーが出るのでこのやり方が正解なのか不明。バグの可能性もあるけど、そこまで見てない。そもそも、こんな構成にするなということもあるかも。
Apacheの起動
$ su # /etc/init.d/httpd restart
GlassFishとApacheの連携
Sun Java System Webserverをロードバランサのとこに使うのも何なので、Apacheに切り替えてみる。クラスタ構成でApacheとつなごうと思ったのだけど、うまくいかないので、まずは、クラスタじゃないシンプルなGlassFishとApacheの連携を確認してみる。SunのApplication Server のところにもプラグインを使ったApacheとのつなぎ方が書いてあるみたいなんだけど、Apacheをビルドするのも何だかなという気もするので、mod_jk経由でやってみる。ちなみに、また、CentOS5。
GlassFish のインストール
$ java -Xmx256m -jar /tmp/glassfish-installer-v2ur1-b09d-linux.jar $ cd glassfish/ $ ant -f setup.xml
mod_jk のインストール
(httpd-develを入れておく)
$ cd /tmp $ wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-connectors/jk/source/jk-1.2.26/tomcat-connectors-1.2.26-src.tar.gz $ tar zxvf tomcat-connectors-1.2.26-src.tar.gz $ cd tomcat-connectors-1.2.26-src/native/ $ ./configure --with-apxs=/usr/sbin/apxs $ make # su # make install
mod_jk の設定
# vi /etc/httpd/conf.d/jk.conf LoadModule jk_module modules/mod_jk.so JkWorkersFile /etc/httpd/conf/workers.properties JkLogFile /var/log/httpd/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat "%w %V %T" JkShmFile "/tmp/jk-runtime-status" JkMount /hello/* worker1 # vi /etc/httpd/conf/workers.properties worker.list=worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost.localdomain worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300 # exit
Tomcat jar ファイルをGlassFishに入れる
$ cd /tmp/ $ wget http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.23/bin/apache-tomcat-5.5.23.tar.gz $ tar zxvf apache-tomcat-5.5.23.tar.gz $ cd [glassfish_home] $ cp /tmp/apache-tomcat-5.5.23/server/lib/tomcat-ajp.jar lib/ $ cp /tmp/apache-tomcat-5.5.23/server/lib/commons-modeler-2.0.jar lib/ $ cp /tmp/apache-tomcat-5.5.23/bin/commons-logging-api.jar lib/
ドメインを起動して、サンプルアプリケーションを配備
$ wget http://glassfish.dev.java.net/downloads/quickstart/hello.war $ ./bin/asadmin start-domain $ ./bin/asadmin create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009 $ cp hello.war domains/domain1/autodeploy/ $ ./bin/asadmin stop-domain $ ./bin/asadmin start-domain
Apacheの起動
$ su # /etc/init.d/httpd start
という感じで、できるみたい(そうそう、いろいろ調べていたら、Tomcat は 5.5.23 より上とかは動かないみたいな記述もあった気がする)。次は、クラスタ構成での確認かね。