JBoss Application Server 入門 ~ Seasar2 を動かして見よう!~ サイオステクノロジー株式会社武田正英
の前に CM です 1/57
CM 中 Java の Web アプリケーションフレームワーク Wicket の解説書が出版されます 翻訳ではなく 本日の 13 時から Wicket とシステム開発の現場 でお話された矢野勉さんの書き下ろしになります 私もレビューに参加してます 渾身の作になるので読んで文句があったら言って来いとの事です 是非読んで下さい >< 2/57
CM 中 Java の Web アプリケーションフレームワーク Wicket の解説書が出版されます 翻訳ではなく 本日の 13 時から Wicket とシステム開発の現場 でお話された矢野勉さんの書き下ろしになります 私もレビューに参加してます 3/13 発売つまり昨日です 新鮮ピチピチです 渾身の作になるので読んで文句があったら言って来いとの事です 是非読んで下さい >< 3/57
sponsored by 矢野勉 矢野勉曰く おまいら Wicket だろ jk Wicket と S2 の組み合わせもいいと思うよ 4/57
Contents 1 JBoss とは 2 Seasar2 対応状況 3 JBoss5.0.0.GA で S2 を動かして見よう 4 Appendix 5/57
自己紹介 名前 : 武田正英 id:bose999 所属 : サイオステクノロジー OSS テクノロジーセンター 情報システム部門 運用 構築 開発を経験し プロジェクトマネージャー兼全工程要員 ( プレイングマネジャー ) として経験を積んできました 最近は過去の経験を生かして開発業務のコンサルタントとして全国のシステム開発 運用の現場を支援して回ってます ブログ : http://bose.techie.jp 技術 wiki: http://www26.atwiki.jp/memotech/ 6/57
自己紹介 名前 : 武田正英 id:bose999 所属 : サイオステクノロジー OSS テクノロジーセンター 今日も九州のお客様先から 情報システム部門 運用 構築 開発を経験し プロジェクトマネージャー兼全工程要員 ( プレイングマネジャー ) として経験を積んできました 飛行機でとんぼ返りして最近は過去の経験を生かして開発業務のコンサルタントとして全国のシステム開発 運用の現場を支援して回ってます なんとか間に合いました >< ブログ : http://bose.techie.jp 技術 wiki: http://www26.atwiki.jp/memotech/ 7/57
皆さんが使っている AP サーバは? Tomcat? WebLogic? WebSphere? Glass Fish? Gernonimo? etc. 8/57
私が主に使っている AP サーバ 武田は JavaEE 準拠のアプリケーションサーバ JBoss を主に使用してます!! JBoss a division of Red Hat 9/57
JBoss とは 開発開始時 EJBOSS として EJB コンテナとして開発がスタート 後に E を取り除き JBoss として改名 現在 現在は Application Server ESB BPM Engine Rule Engine 開発フレームワーク 開発 IDE と多岐にわたり OSS としてミドルウェアが提供されている 10/57
JBoss org 版と JBoss EAP について JBoss 1 3 2 1. OSS 版と有償サポート版の関係 Linux における Fedora と RHEL の関係と同様に現在は OSS 版と商用サポート版の開発体制が取られている 2. 有償サポート版の提供方法 OSS でのある時の最適な組み合わせを JBoss EAP (Enterprise Application Platform) としてスタック化して提供 3. 有償サポートって? パッチの提供 問い合わせの権等が提供される サイオステクノロジー社等から購入が可能 11/57
JBoss を使用する理由 例えば Tomcat に JavaEE に存在する機能が欲しくなったらどうします? あれ? この機能がない! マイクロコンテナアーキテクチャを採用していて 簡単に有効な機能のカスタマイズが可能 最初は Tomcat 相当の機能で動かして必要に応じて機能追加も JBoss なら簡単 JavaEE サーバなら当たり前に持っている機能使わなきゃ損です それとも作りますか? Web コンテナに Tomcat ベースのものを使用しているので Apache との連携等の Tomcat の知識が生かせます 12/57
マイクロカーネルアーキテクチャ JBoss Application Server はマイクロカーネルアーキテクチャを採用している その為 必要最小限の起動サービスに対して 必要なサービスを追加していきサーバを構成し カスタマイズするのが容易になっている 13/57
マイクロカーネルアーキテクチャ 一般サービス 一般サービス一般サービス一般サービス JBoss Microkernel ブートストラップサービス JMX Mbean Server コアサービス ブートストラップサービス 他のサービスをブートする為の最小限のサービス コアサービス ブートストラップサービス初期化後にデプロイされるホットデプロイ不可能なサービス (JNDI トランザクション等 ) JMX MBean Server サービスをデプロイするサーバ 一般サービス コアサービス初期化後にデプロイされる ホットデプロイが可能 この一つ一つがTomcatをベースにしたWebコンテナだったり JMSサーバだったりします 14/57
JBoss Application Server4 Mbean 形式の一般サービス Web コンテナ Tomcat ベース EJB コンテナ Java Messageing Service Web サービス JPA JSF etc. J2EE1.4 準拠 JBoss Application Server 4.2.X J2EE1.4 準拠の機能を内包している org 版 JBoss Application Server 4.2.X は J2EE1.4 に準拠した各種機能をアプリケーションサーバとして提供 15/57
マイクロコンテナアーキテクチャー JBoss Application Server 5 からはマイクロコンテナを採用 -JBossAS4 まではマイクロカーネルだった Mbean 形式でサービスを作成する必要があったが 5 からは POJO でサービスが作成可能になった - マイクロコンテナ上に色々なコンテナを構築できる 例 :Spring Guice JMX OSGi 16/57
マイクロコンテナアーキテクチャー JBoss Application Server 5 マイクロコンテナ MBean によるサービス MBean JMX MBean MBean 一つ一つがのサービスが Tomcat をベースにした Web コンテナだったり JMS サーバだったりします POJO によるサービス POJO POJO POJO 17/57
JBoss Application Server5 Mbean 形式または POJO 形式の一般サービス Web コンテナ Tomcat ベース EJB コンテナ Java Messageing Service Web サービス JPA JSF etc. JavaEE5 準拠 JBoss Application Server 5.0.X JavaEE5 準拠の機能を内包している org 版 JBoss Application Server 5.0.X は JavaEE5 に準拠した各種機能をアプリケーションサーバとして提供している 18/57
Seasar2 対応状況 Seasar2 アプリケーション稼動 JBoss5.0.0.GA から導入された VFS によりデプロイされたクラスファイルや Jar ファイルが取得できなくなっている (Seasar2.2.4.34) JBoss4.2.3.GA/ JBoss EAP4.3 までは対応しているので 4 系までならデフォルトで稼動 19/57
Seasar2を JBossで動かすのは JBoss4.2.Xまでで 終了のお知らせ 20/57
21/57
動かぬなら 動かしてみせよう JBoss5 22/57
ということで 現在 Seasar としては正式に JBoss5 の対応を進めております 特に設定もなく稼動させる対応を目指して作業を進めております 私自身も作業に参加をしてます 正式リリースはもう少しお待ちください 対応を進めて下さってる id:koichik さんありがとうございます!! そして 私自身が S2VFS として対応を進めようとしていた時に助けて下さいました T2 チームの米林さん 大谷さん 片山さんにこの場を借りてお礼を言いたいと思います 対応のログ [operation:2295] [ 申請 ] S2VFS http://ml.seasar.org/archives/operation/2009-february/004124.html [seasar-dev:1067] [S2Container] JBossAS5 対応 http://ml.seasar.org/archives/seasar-dev/2009-march/001066.html 私のブログ Seasar2 と JBoss5.0.0.GA VFS の問題 http://bose.techie.jp/?eid=703330 Seasar2 と JBoss5 VFS の問題解決に向けて http://bose.techie.jp/?eid=707358 23/57
ということで 現在 Seasarとしては正式にJBoss5の対応を進めております 特に設定もなく稼動させる対応を目指して作業を進めております 私自身も作業に皆さんに使って頂けるよう当たり前の事をしただけです 参加をしてます 正式リリースはもう少しお待ちください Enjoy Seasar! Enjoy T2! Enjoy OSS! 対応を進めて下さってる id:koichikさんありがとうございます!! そして 私自身がS2VFSとして対応を進めようとしていた時に By 米林助けて下さいましたT2チームの米林さん 大谷さん 片山さんにこの場を借りてお礼を言いたいと思います 対応のログ [operation:2295] [ 申請 ] S2VFS http://ml.seasar.org/archives/operation/2009-february/004124.html [seasar-dev:1067] [S2Container] JBossAS5 対応 http://ml.seasar.org/archives/seasar-dev/2009-march/001066.html 私のブログ Seasar2 と JBoss5.0.0.GA VFS の問題 http://bose.techie.jp/?eid=703330 Seasar2 と JBoss5 VFS の問題解決に向けて http://bose.techie.jp/?eid=707358 24/57
現状の対応状況 JBoss5.0.0.GA war 形式に関して Windows で動作確認済 展開した war 及び war ファイルのまま両方動作確認済 各種環境において来週検証予定 検証環境例 JBoss5.0.1.GA» 64bit RHEL OpenJDK,Sun JDK» 64bit SUSE Enterprise Linux IBM JDK,Sun JDK 展開 war 形式に関して Windows で動作確認済み War ファイルのままは動かない状態 JBoss5.0.2.GA の動向を見極めて対応する予定 25/57
JBoss5.0.0.GA で開発中の対応版を動かして見よう 1 ダウンロードで JBoss ゲット 2 JBoss フォルダ構成理解 3 SAStruts を動かしてみよう! 26/57
ダウンロード http://www.jboss.org を開いて Projects Servers JBoss Application Server を選択 27/57
ダウンロード 左図の 5.0.0.GA を クリックする! 28/57
ダウンロード 使用する JDK が 6 なら jboss-5.0.0.ga-jdk6.zip JDK が 5 なら jboss-5.0.0.ga.zip をクリックしてダウンロードする 解凍後 任意の場所に設置する 29/57
JBoss5.0.0.GA フォルダ構成理解 $JBOSS_HOME bin common/lib client docs lib server minimal 起動スクリプト シャットダウンスクリプト等 共通ライブラリ Java クライアントライブラリ JBoss 内で使用する DTD やデータソースサンプル等 JBoss のスタートアップ時に使用される jar ファイル JBoss サーバ設定が格納されている minimal default web all の 4 つ default web all 30/57
サーバ設定概要 minimal default JBoss を稼動させる最小限の設定 マイクロカーネルを起動させてロギング JNDI サーバ URL デプロイメントスキャナーが起動 JavaEE アプリケーションをデプロイする標準の基本 JavaEE5 構成 all クラスタリング IIOP 等を含む完全 JavaEE5 構成 Web JavaEE6 Web プロファイル相当 Web コンテナを軸とした軽量設定 31/57
SAStruts を動かしてみよう! 今回は default のサーバ設定を利用して $JBOSS_HOME/server/default 上で SAStruts+S2JDBC を動かしてみる! 32/57
Hudson から最新のビルドを手に入れる https://www.seasar.org/hudson/job /s2container-2.4-seasar2/ws/seasar2 /s2-framework/target/ から s2-framework-2.4.35-snapshot.jar を入手 https://www.seasar.org/hudson/job /s2container-2.4-seasar2/ws/seasar2 /s2-extension/target/ から s2-extension-2.4.35-snapshot.jar を入手 https://www.seasar.org/hudson/job /s2container-2.4-s2tiger/ws/s2-tiger/target/ から s2-tiger-2.4.35-snapshot.jar を入手 33/57
SAStruts の PJ の jar の入替 Hudson から手に入れた最新の jar ファイルを既存のアプリケーションの jar ファイルと差し替える これだけで JBoss5で動かす準備が出来ちゃいます 基本的には特別な設定をしなくてもいいように対応中です 34/57
J2EE サーバ上の Seasar2 データソース &JTA でも jar 差し替えて動かすだけでは Tomcat のような JTA の実装の無い環境の為に S2JTA& 独自のデータソースを Seasar が実装して用意したものを使ってる状態です 今回は J2EE サーバとしてデータソースも JTA も備えている JBoss を使用するので Seasar のデータソース &JTA ではなくて JBoss のデータソース &JTA を使う設定を紹介します 参考 URL: http://s2container.seasar.org/2.4/ja/transaction.html http://d.hatena.ne.jp/koichik/20081204#1228395633 S2JTA は厳密な 2PC じゃないので厳密な 2PC が必要な方は J2EE サーバの JTA 使用を要検討です 大抵のケースは S2JTA で問題はないですが 今回の設定は JDBC2 層ドライバを設定しないので 2PC の設定ではありません 通常の JDBC ドライバの設定になります 35/57
J2EE サーバ上の Seasar2 データソース &JTA でも jar 差し替えて動かすだけでは Tomcat のような JTA の実装の無い環境の為に S2JTA& 独自のデータソースを Seasar が実装して用意したものを使ってる状態です 今回はJ2EEサーバとしてデータソースも個人的な感想としては JTAも備えているJBossを使用するので Seasarのデータソース &JTAではなくて JBossのデータソース独自に&JTA JTA を使う設定を紹介します を実装している Seasar はすごい 参考 URL: http://s2container.seasar.org/2.4/ja/transaction.html と思います http://d.hatena.ne.jp/koichik/20081204#1228395633 S2JTA は厳密な 2PC じゃないので厳密な 2PC が必要な方は J2EE サーバの JTA 使用を要検討です 大抵のケースは S2JTA で問題はないですが 今回の設定は JDBC2 層ドライバを設定しないので 2PC の設定ではありません 通常の JDBC ドライバの設定になります 36/57
JBoss では必要ない jar ファイルを除く 絶対に抜いておくファイル WEB-INF/lib 内の geronimo*.jar は全て除く JTA 等の部分で JBoss のライブラリとぶつかりますので絶対にはずして下さい これしないとS2JTAのjarが先に読み込まれて JBossのライブラリが読まれません >< 37/57
環境構築データソース設定 JBoss サーバのデータソース機能を利用するには *-ds.xml という命名規則でファイル名を 設定して deploy フォルダに設置する 結果 JNDI に登録されて DataSource が取得可能に! AP サーバのデータソース &JTA が使用可能に!! DB2 SQL Server Oracle MySQL PostgreSQL 等のサンプルファイルが $JBOSS_HOME/docs/examples/ jca 以下に存在する このファイルをカスタマイズして設定するのが簡単な方法 RDBMS の JDBC ドライバは $JBOSS_HOME/server/default/ lib に置く 38/57
PostgreSQL のデータソース設定例 <?xml version="1.0" encoding="utf-8"?> <datasources> <local-tx-datasource> <jndi-name>postgresqlds</jndi-name> <connection-url> jdbc:postgresql://[servername]:[port]/[database name] </connection-url> <driver-class>org.postgresql.driver</driver-class> <user-name>xxxx</user-name> <password>xxxx</password> 新しい接続をする時に使用するSQL <new-connection-sql>select 1</new-connection-sql> <check-valid-connection-sql>select 1</check-valid-connection-sql> <metadata> <type-mapping>postgresql 8.0</type-mapping> </metadata> </local-tx-datasource> </datasources> JNDI に登録する名前 java:jndi に登録する名前で取得できるようになる JDBC 接続情報 新しい接続をする時に使用する SQL PostgreSQL PostgreSQL 7.2 PostgreSQL 8.0 から選択 $JBOSS_HOME/server/JBOSSCONF/conf/ standardjbosscmp-jdbc.xml の定義を参照 39/57
環境構築 S2JDBC 設定 app,dicon に s2jdbc.dicon ファイルをインクルードする jta-jboss42.dicon を用意 s2container.dicon にて jta.dicon と jta-jboss42.dicon の差し替えを設定 jdbc.dicon ファイルを JNDI を利用してデータソースを取得するように設定 s2jdbc.dicon ファイルを使用する RDBMS にあわせて設定 40/57
app.dicon 例 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="convention.dicon"/> <include path="aop.dicon"/> <include path="j2ee.dicon"/> <include path="s2jdbc.dicon"/> <component name="actionmessagesthrowsinterceptor" class="org.seasar.struts.interceptor.actionmessagesthrowsinterceptor"/> </components> 41/57
jta-jboss42.dicon 例 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components namespace="jta"> <component name="usertransaction class="javax.transaction.usertransaction"> @org.seasar.extension.j2ee.jndiresourcelocator@lookup("java:comp/usertransaction") </component> <component name="transactionmanager class="javax.transaction.transactionmanager"> @org.seasar.extension.j2ee.jndiresourcelocator@lookup("java:/transactionmanager") </component> <component name="transactionsynchronizationregistry class="javax.transaction.transactionsynchronizationregistry"> @org.seasar.extension.j2ee.jndiresourcelocator@lookup("java:comp/transactionsynchronizationregistry") </component> <component class="org.seasar.extension.tx.adapter.jtatransactionmanageradapter"/> </components> Seasar のサイトに記述されているものと同じで OK http://s2container.seasar.org/2.4/ja/transaction.html 42/57
s2container.dicon 例 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include condition="#env == 'ut'" path="warmdeploy.dicon"/> <include condition="#env == 'ct'" path="hotdeploy.dicon"/> <include condition="#env!= 'ut' and #ENV!= 'ct'" path="cooldeploy.dicon"/> <component class="org.seasar.framework.container.factory.simplepathresolver"> <initmethod name="addrealpath"> <arg>"jta.dicon"</arg> <arg>"jta-jboss42.dicon"</arg> </initmethod> </component> JBoss 用のJTAの設定ファイル </components> この部分を実ファイル名にする事でS2JTAと切替になる 43/57
jdbc.dicon 例 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components namespace="jdbc"> <include path="jta.dicon"/> <!-- from JNDI --> <component name="datasource"class="javax.sql.datasource"> @org.seasar.extension.j2ee.jndiresourcelocator@lookup("java:/postgresqlds") </component> </components> JNDI に登録した名前 java:jndi に登録する名前で取得 44/57
s2jdbc.dicon 例 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="jdbc.dicon"/> <include path="s2jdbc-internal.dicon"/> <component name= jdbcmanager class="org.seasar.extension.jdbc.manager.jdbcmanagerimpl"> <property name="maxrows">0</property> <property name="fetchsize">0</property> <property name="querytimeout">0</property> <property name="dialect">postgredialect</property> </component> </components> JNDI に登録した RDBMS にあうものを記述する 45/57
SAStruts を動かしてみよう! 環境構築デプロイ あとは $JBOSS_HOME/server/default/deploy フォルダにデータソース設定ファイルと出来上がった war をおくだけ 更新時も上書きするだけ! JavaEE AP サーバにありがちな 複雑な Deploy 手順はありません!! 46/57
SAStruts を動かしてみよう! 環境構築起動 $JBOSS_HOME/bin/run.bat を起動 $JBOSS_HOME/bin/run.bat b xxx.xxx.xxx.xxx とする事で任意の IP アドレスで起動が可能デフォルトでは localhost にバインドされて起動する 他にもオプションがありますが 詳細なものは別の機会に!! 47/57
Appendix 1 Teeda を JBoss で動かす際の注意点 2 Apache との連携 (mod_jk) について 3 mod_jk のコンパイル方法について 48/57
Teeda を JBoss で動かす際の注意点 49/57
Teeda を動かす際の注意点 Teeda で作られたアプリケーションをデプロイする時には既に JBoss が内包している JSF とコンフリクトします web.xml に下記を追加して JBoss が内包している JSF を使わないようにします JSF は JavaEE に含まれるので JBoss が JSF を持っています <context-param> <param-name>org.jboss.jbossfaces.war_bundles_jsf_impl</param-name> <param-value>true</param-value> </context-param> 50/57
Apache との連携 (mod_jk) について 51/57
Apache 連携設定ファイル例 /etc/httpd/conf.d/mod_jk.conf LoadModule jk_module modules/mod_jk.so JkWorkersFile conf.d/workers.properties JkLogFile /var/log/www/mod_jk.log JkLogLevel warn JkMount /sample/* blancer mod_jk 設定ファイル mod_jk ログファイル mod_jk ログ出力レベル mod_jk 連携先設定 52/57
Apache 連携設定ファイル例 workers.properties worker.list=blancer worker.blancer.type=lb worker.blancer.balance_workers=jboss01,jboss02 worker.blancer.sticky_session=true worker.blancer.method=session worker.list=jboss01 worker.jboss01.port=8009 worker.jboss01.host=192.168.0.2 worker.jboss01.type=ajp13 worker.jboss01.route=jboss01 worker.list=jboss02 worker.jboss02.port=8009 worker.jboss02.host=192.168.0.3 worker.jboss02.type=ajp13 worker.jboss02.route=jboss02 StickySession を有効にし Session 毎にアクセスを振り分ける JBoss アプリケーションサーバの IP アドレス ポート 連携プロトコル ajp13 を指定 $JBOSS_HOME/server/ $JBOSSCONF/deploy/ jbossweb.sar/server.xml の Engine 要素の jvmroute に設定されたユニークな名前を指定 参考 URL:http://tomcat.apache.org/connectors-doc/reference/workers.html 53/57
mod_jk のコンパイル方法について 54/57
RHEL5 上での mod_jk コンパイル例 Apache の下記のモジュール相当がインストールされている事 httpd-2.2.3-11.el5_2.4.x86_64 httpd-devel-2.2.3-11.el5_2.4.x86_64 Apache のサイトから tomcat-connectors-1.2.xx-src.tar.gz というソースをダウンロード ダウンロード URL:http://tomcat.apache.org/download-connectors.cgi root ユーザ権限で下記を実行 tar zxvf tomcat-connectors-1.2.xx-src.tar.gz cd./tomcat-connectors-1.2.xx-src./configure with-apxs=/usr/sbin/apxs make install 55/57
おまけのおまけ 私のブログとか技術 wikiにたどり着きたい場合は Google 先生に bose999 って聞いてみてください 56/57
終了後の質問 $JBOSS_HOME/server/default/lib に ライブラリの jar ファイルを置いてますが その方法で JBoss5 で S2 動きますか? このパターンの検証がまだされていません このパターンの検証も進めますので正式回答はお待ち下さい 57/57