クラスタリング設定とか、apacheとの連携とか

glassfishのインストールからクラスタ設定など

http://sdc.sun.co.jp/java/series/glassfish/index.html

今回は、DAS(ドメイン管理サーバ),instance1,instance2って感じにした。
それぞれ別マシン
上記は、Soralisなので多少違うが、インスタンスの作成などはおなじように。

クラスタに配備したアプリケーションの動作確認 まで確認できれば、OK

そこから、webサーバにapacheを使用するので、設定が変わってくる。

ここからは、glassfishとapacheの連携はおこなった事があることを前提とする。
つまり、glassfishにtomcat-ajp.jar、 commons-logging.jar and commons-modeler.jarなどが適切な場所にコピーされていること。わからなければここなんかを参考に

で、apacheでロードバランシングするには、クラスタ上の各instanceのAJPポートに
接続できるようになっていなければならない。

その設定が、ここ
とくにこの設定が、ほかのblogなどにはなかった。これしないと各instanceでAJPポート開いてくれない!!!
asadmin set server-config.http-service.http-listener.http-listener1.property.jkEnabled=true
もちろんこれも。
asadmin create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009

で、httpd.confやworker.propertiesの設定は、Tomcatのクラスタリングの時と同じです。

広告

クラスタリング設定とか、apacheとの連携とか

glassfishのインストールからクラスタ設定など

http://sdc.sun.co.jp/java/series/glassfish/index.html

今回は、DAS(ドメイン管理サーバ),instance1,instance2って感じにした。
それぞれ別マシン
上記は、Soralisなので多少違うが、インスタンスの作成などはおなじように。

クラスタに配備したアプリケーションの動作確認 まで確認できれば、OK

そこから、webサーバにapacheを使用するので、設定が変わってくる。

ここからは、glassfishとapacheの連携はおこなった事があることを前提とする。
つまり、glassfishにtomcat-ajp.jar、 commons-logging.jar and commons-modeler.jarなどが適切な場所にコピーされていること。わからなければここなんかを参考に

で、apacheでロードバランシングするには、クラスタ上の各instanceのAJPポートに
接続できるようになっていなければならない。

その設定が、ここ
とくにこの設定が、ほかのblogなどにはなかった。これしないと各instanceでAJPポート開いてくれない!!!
asadmin set server-config.http-service.http-listener.http-listener1.property.jkEnabled=true
もちろんこれも。
asadmin create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009

で、httpd.confやworker.propertiesの設定は、Tomcatのクラスタリングの時と同じです。

log4cxxまとめ

APRなどをDLしましょう。もしくはこちら
log4cxxをDLしましょう。

2008/11/17時点で最新バージョンは
log4cxx0.10.0
Apache Portable Runtime 1.3.3
APR-util 1.3.4
APR iconv 1.2.1(http://apr.apache.org/download.cgiに無いのはなぜ?)
でした。これ前提で進めます。

とりあえず、ここを開きます。
環境はVS2005SP1です。C:\Apacheで作業します。

unzip apr-1.2.11-win32-src.zip
rename apr-1.2.11 apr
unzip apr-util-1.2.10-win32-src.zip
rename apr-util-1.2.10 apr-util
cd apache-log4cxx-0.10.0
configure
configure-aprutil
で、configure.batとconfigure-aprutil.batを実行します。

configure.batはlog4cxx.hwとprivate/log4cxx_private.hwを、log4cxx.hとprivate/log4cxx_private.hにコピーします。
configure-aprutil.batは、sedコマンドを用いてapu.hwとapr_ldap.hwを編集し、APR-IconvとLDAPを無効にします。
sedコマンドがなければ、textエディタで編集してくれとのこと。sedはcygwinなどが入っていれば、OK。

projects/log4cxx.dswを開きます。
プロジェクトの変換はVS任せです。

log4cxxをビルドします。

テストのために次の環境変数を定義します。TOTO=wonderful, key1=value1, key2=value2
projects/testsuite.dswを開きます。
プロジェクトの設定で、作業ディレクトリに"../src/test/resources"を設定します。

実行します。。。正直何をしているのかわかりません。OKです。
Releaseビルドでも同じ結果ならOKです。

自分のプロジェクトにlog4cxxを追加します。

projects/testsuite.dswの設定を参考にしながら
まず、プリプロセッサの定義に下記が必要なようです。
APR_DECLARE_STATIC
APU_DECLARE_STATIC

ランタイムライブラリをマルチスレッド DLL (/MD)とします。

以下のlibをリンクします。
ADVAPI32.LIB
WS2_32.LIB
MSWSOCK.LIB
SHELL32.LIB
ODBC32.LIB
.\release\log4cxx.lib
..\..\apr-util\libr\aprutil-1.lib
..\..\apr-util\xml\expat\lib\libr\xml.lib
..\..\apr\libr\apr-1.lib

では、適当にアプリを作成します。

#include "log4cxx/logger.h"
#include "log4cxx/propertyconfigurator.h"

using namespace log4cxx;

int _tmain(int argc, _TCHAR* argv[])
{
LoggerPtr logger = Logger::getLogger("test");
PropertyConfigurator::configure("log4j.properties");

LOG4CXX_DEBUG(logger, "test");

return 0;
}
こんな感じのコンソールアプリを作ります。
でデバッグビルドで実行します。log4j.propertiesで設定のとおり、ログが出力されます。
で、リリースビルドで実行します。バッファオーバーランエラーが発生します。
結局、log4cxx.dllではこの問題を解決できませんでした。

解決策として、log4cxxをスタティックライブラリとしてビルドします。
log4cxxのプロジェクトを開き、構成の種類をスタティック ライブラリにします。
プリプロセッサの定義にLOG4CXX_STATICを追加し、DLLの定義を削除します。
ビルドします。

リリースビルドでもバッファオーバーランエラーが発生しません。

log4cxxまとめ

APRなどをDLしましょう。もしくはこちら
log4cxxをDLしましょう。

2008/11/17時点で最新バージョンは
log4cxx0.10.0
Apache Portable Runtime 1.3.3
APR-util 1.3.4
APR iconv 1.2.1(http://apr.apache.org/download.cgiに無いのはなぜ?)
でした。これ前提で進めます。

とりあえず、ここを開きます。
環境はVS2005SP1です。C:\Apacheで作業します。

unzip apr-1.2.11-win32-src.zip
rename apr-1.2.11 apr
unzip apr-util-1.2.10-win32-src.zip
rename apr-util-1.2.10 apr-util
cd apache-log4cxx-0.10.0
configure
configure-aprutil
で、configure.batとconfigure-aprutil.batを実行します。

configure.batはlog4cxx.hwとprivate/log4cxx_private.hwを、log4cxx.hとprivate/log4cxx_private.hにコピーします。
configure-aprutil.batは、sedコマンドを用いてapu.hwとapr_ldap.hwを編集し、APR-IconvとLDAPを無効にします。
sedコマンドがなければ、textエディタで編集してくれとのこと。sedはcygwinなどが入っていれば、OK。

projects/log4cxx.dswを開きます。
プロジェクトの変換はVS任せです。

log4cxxをビルドします。

テストのために次の環境変数を定義します。TOTO=wonderful, key1=value1, key2=value2
projects/testsuite.dswを開きます。
プロジェクトの設定で、作業ディレクトリに"../src/test/resources"を設定します。

実行します。。。正直何をしているのかわかりません。OKです。
Releaseビルドでも同じ結果ならOKです。

自分のプロジェクトにlog4cxxを追加します。

projects/testsuite.dswの設定を参考にしながら
まず、プリプロセッサの定義に下記が必要なようです。
APR_DECLARE_STATIC
APU_DECLARE_STATIC

ランタイムライブラリをマルチスレッド DLL (/MD)とします。

以下のlibをリンクします。
ADVAPI32.LIB
WS2_32.LIB
MSWSOCK.LIB
SHELL32.LIB
ODBC32.LIB
.\release\log4cxx.lib
..\..\apr-util\libr\aprutil-1.lib
..\..\apr-util\xml\expat\lib\libr\xml.lib
..\..\apr\libr\apr-1.lib

では、適当にアプリを作成します。

#include "log4cxx/logger.h"
#include "log4cxx/propertyconfigurator.h"

using namespace log4cxx;

int _tmain(int argc, _TCHAR* argv[])
{
	LoggerPtr logger = Logger::getLogger("test");
	PropertyConfigurator::configure("log4j.properties");

	LOG4CXX_DEBUG(logger, "test");

	return 0;
}
こんな感じのコンソールアプリを作ります。
でデバッグビルドで実行します。log4j.propertiesで設定のとおり、ログが出力されます。
で、リリースビルドで実行します。バッファオーバーランエラーが発生します。 
結局、log4cxx.dllではこの問題を解決できませんでした。

解決策として、log4cxxをスタティックライブラリとしてビルドします。
log4cxxのプロジェクトを開き、構成の種類をスタティック ライブラリにします。
プリプロセッサの定義にLOG4CXX_STATICを追加し、DLLの定義を削除します。
ビルドします。

リリースビルドでもバッファオーバーランエラーが発生しません。

log4cxx on VC8 リリースビルドの問題

log4cxxのリリースビルドで例外が発生する現象があり、使えなかった。
apatch_log4cxxのmlには、同じような問題に遭遇している人もいるようで、
Log4cxx with VisualC++ 2008 Express Edition – Release issue
で、こことかで落としたプロジェクトを使って見ても、問題は解決しなかった。
ランタイムライブラリが/MDで統一されていないとダメとか色々あるようだが、

log4cxxのスタティックライブラリを作成、リンクでリリースビルドでも
動作するようになった。スタティックライブラリとするには、
1.log4cxxのプロジェクトでlibを生成するように設定する
2.log4cxxのプロジェクトでプリプロに以下を設定(ARPもlibの場合)
LOG4CXX_STATIC
APR_DECLARE_STATIC
APU_DECLARE_STATIC
3.アプリのプロジェクトでプリプロにLOG4CXX_STATICを設定。
これしないとチョーリンクエラー。

log4cxx on VC8 リリースビルドの問題

log4cxxのリリースビルドで例外が発生する現象があり、使えなかった。
apatch_log4cxxのmlには、同じような問題に遭遇している人もいるようで、
Log4cxx with VisualC++ 2008 Express Edition – Release issue
で、こことかで落としたプロジェクトを使って見ても、問題は解決しなかった。
ランタイムライブラリが/MDで統一されていないとダメとか色々あるようだが、

log4cxxのスタティックライブラリを作成、リンクでリリースビルドでも
動作するようになった。スタティックライブラリとするには、
1.log4cxxのプロジェクトでlibを生成するように設定する
2.log4cxxのプロジェクトでプリプロに以下を設定(ARPもlibの場合)
LOG4CXX_STATIC
APR_DECLARE_STATIC
APU_DECLARE_STATIC
3.アプリのプロジェクトでプリプロにLOG4CXX_STATICを設定。
これしないとチョーリンクエラー。

apache-log4cxx-0.10.0 のビルド

aprが必要(前述)

arputilの中でaprとxmlをビルドしているが、apriconvも必要

/log4cxx/private/log4cxx_private.h が無いと怒られる!
apache-log4cxx-0.10.0\src\main\include\log4cxx\private\ にlog4cxx_private.hw
があるのだが、そこからlog4cxx_private.hが生成されていないらしい
→リビルドしたら生成された

hwファイルからhファイルの生成は、dsp内で行っている。

こんな、

!IF  “$(CFG)” == “aprutil – Win32 Release”
# Begin Custom Build – Creating apr_ldap.h from apr_ldap.hw
InputPath=.\include\apr_ldap.hw
“.\include\apr_ldap.h” : $(SOURCE) “$(INTDIR)” “$(OUTDIR)”
type .\include\apr_ldap.hw > .\include\apr_ldap.h
# End Custom Build
!ELSEIF  “$(CFG)” == “aprutil – Win32 Debug”
# Begin Custom Build – Creating apr_ldap.h from apr_ldap.hw
InputPath=.\include\apr_ldap.hw
“.\include\apr_ldap.h” : $(SOURCE) “$(INTDIR)” “$(OUTDIR)”
type .\include\apr_ldap.hw > .\include\apr_ldap.h
# End Custom Build
!ELSEIF  “$(CFG)” == “aprutil – x64 Release”
# Begin Custom Build – Creating apr_ldap.h from apr_ldap.hw
InputPath=.\include\apr_ldap.hw
“.\include\apr_ldap.h” : $(SOURCE) “$(INTDIR)” “$(OUTDIR)”
type .\include\apr_ldap.hw > .\include\apr_ldap.h
# End Custom Build
!ELSEIF  “$(CFG)” == “aprutil – x64 Debug”
# Begin Custom Build – Creating apr_ldap.h from apr_ldap.hw
InputPath=.\include\apr_ldap.hw
“.\include\apr_ldap.h” : $(SOURCE) “$(INTDIR)” “$(OUTDIR)”
type .\include\apr_ldap.hw > .\include\apr_ldap.h
# End Custom Build
!ENDIF