図2●野村総合研究所のアグリゲーション・サービス・システム
株価やニュース・サイトの情報を収集し,会員ごとにカスタマイズした情報をメールとして配信する。1日に数十万通のメールを送信しており,数十台のサーバーからなる
図3●野村総合研究所による性能測定結果
ある顧客向けの基幹システム(顧客/契約管理システム)を想定したアプリケーションで,商用APサーバーと性能を比較した。おおむねJBossのほうが高い性能を示した。Session Beanを用いたアプリケーションで,Entity Beanは使用していない
写真1●日本上下水道の自治体向け会計パッケージ
DBMSにPostgreSQLを採用している
 野村総合研究所は株価やニュースの情報を収集し,利用者ごとに情報をカスタマイズしてWeb画面に表示,またはメールで配信する「アグリゲーション サービス」をJBossにより再構築した(図2[拡大表示])。1日に数十万通のメールを作成,配信するシステムである。野村総合研究所が運営し,証券会社やクレジット・カード会社にASPサービスとして提供している。

 JBossを検討した目的はコスト削減である。無償メールというだけであればTomcatを使用する手もあったが,JBossを使用したのは,J2EEの非同期処理機能JMS(Java Messaging Service)が必要だったためだ。「短時間に何万というメールを送るためには,非同期処理を行う必要があった」(野村総合研究所 福岡システム開発部 中野裕隆氏)。EJBの一種で,JMSによるメッセージによって非同期に動作するMessage Driven Beanを使用した。

 同社ではJBossを商用APサーバーと比較し検証した。APサーバーに必要とされた機能はいくつかあった。ひとつは,複数のサーバーからデータベースにアクセスする際にトランザクションの一貫性を保障する「分散トランザクション機能」である。JBossはJ2EEの分散トランザクションの仕様であるJTA/JISに対応しており,この機能を満足していた。

 もうひとつは,あらかじめ指定した時間を超えたリクエストの処理を強制的に中断する「タイマー監視機能」である。JBossは,指定時間を超過したスレッドを停止させることが可能であり,これもクリアした。また「流量制御」もEJBのインスタンス数の上限を設定することで,「負荷分散」もEJBによるリモート呼び出しを行うことで可能だった。

 性能面でも,測定の結果,商用APサーバーを上回るパフォーマンスが得られた。図3[拡大表示]に示したのは,野村総合研究所による,今回のアグリゲーション・サービスとは別の,あるユーザー企業の顧客/契約管理アプリケーションを想定した性能測定結果だが,JBossは主要な商用APサーバーを上回る性能を示した。

ソースコードを調査し,遅い原因を特定

 開発過程では,性能面で問題に突き当たった場面もあった。クラスタリング構成にして負荷をかけた際,あるサーバー上のJavaVMにフルGC*4(ガベージ・コレクション)が発生すると,クラスタを構成するサーバーすべての処理が極端に遅くなるという現象に遭遇したのだ。この問題は,メモリーの使用量が少なくなるようにプログラムを見直し,同時にJavaVMの設定を調整し,フルGCをこまめに行い,GC1回あたりに要する時間を短縮することで,GCの影響を軽減することができた。

 もう一点の問題は,大量の更新処理を行う際に非常に時間がかかっていたことだった。野村総合研究所でJBossのソースコードを調査したところ,SQL文を一件ずつ発行するのではなく,まとめて発行するJDBC*5のバッチ更新機能を使うことで高速化が可能だということが判明した。そこで,JBoss Organizationのメーリング・リストでJDBCのバッチ機能を使えるように提案した。「提案がいれられなかった場合は,自分でJBossのソースコードを改良するつもりだった」(野村総合研究所 中野氏)が,1週間ほどで,JBoss Organizationにより提案に沿った改良が行われた。これらの改善により,当初5000通を送付するのに30分以上かかっていたが,3分程度に短縮できた。

 Webアプリケーション開発フレームワークとしてはStruts*6を採用している。フレームワークとしてStrutsに不足していた機能は作成した。特定のサービスの受付を停止し,現在停止中などのメッセージを応答する「オンライン閉塞機能」,リクエストや応答を記録する「ジャーナル記録機能」,サービスの処理時間などを記録しレポートする「稼働統計記録機能」である。これらの機能は,オープンソース・ソフトウエア「T-Struts」として無償公開する予定である*7

Entity Bean(CMP)で生産性向上

 大規模システムだけでなく,小規模なシステムでも採用するJBossを採用するメリットはある。食品などをインターネットで販売するオイシックスは,Webベースの在庫管理システムをJBossで開発した。400種類以上の在庫食料品の在庫や賞味期限を記録し,出庫表などを印刷する。賞味期限などから適正在庫を自動計算する機能も備える。データベースはOracle9iを採用している。

 JBossを採用した目的は,生産性や柔軟性を向上させるためだ。前述したようにEJBのEntity Bean(CMP)を使用すれば,JBossはSQL文を自動生成し,発行してくれる。「同じようなコードを何度も書かずに済んだ。また,デバッグの際も修正点が少なく済んだ」(オイシックス 技術開発チーム システム開発マネジャー 山下寛人氏)。

 1000以上のレコードを更新または追加するような非常に長いEJBトランザクションを何度も実行すると,徐々に性能が低下する現象に遭遇したが,週に2回,APサーバーを再起動することで起きなくなった。

 稼働後一年近く経過したが「一度だけ原因不明のダウンがあったがそれ以外は安定稼働している」(山下氏)という。

業務パッケージでの利用も

 業務パッケージにJBossを利用している企業もある。宮城県 名取市は,下水道部門の会計システムに,JBossを使ったシステムを利用している。名取市が導入した自治体向け会計パッケージ「NJS公営企業会計システム」(前ページの写真1)は,APサーバーとしてJBoss,DBMSにPostgreSQL,OSにLinuxとすべてオープンソース・ソフトウエアを採用している。JBossを採用した理由は,無償であり,かつEJBのEntity Beanにより,データベースをオブジェクト化し,生産性を向上させるためだ。複雑なSQL文を発行する必要があったことから,JBossがSQLを生成するCMPではなく,プログラマがSQL文を記述するBMP(Bean Managed Persistence)を使用している。

 すべてオープンソース・ソフトウエアを採用しているため安価だ。「採用は入札で決定したが『NJS公営企業会計システム』が最も安価だった」(名取市 建設部下水道課主幹兼庶務係長 菅井義治氏)。2003年4月に導入したが,障害も発生していないという。