JP4876438B2 - コンポーネントソフトウェアの運用方法および運用基盤 - Google Patents

コンポーネントソフトウェアの運用方法および運用基盤 Download PDF

Info

Publication number
JP4876438B2
JP4876438B2 JP2005158299A JP2005158299A JP4876438B2 JP 4876438 B2 JP4876438 B2 JP 4876438B2 JP 2005158299 A JP2005158299 A JP 2005158299A JP 2005158299 A JP2005158299 A JP 2005158299A JP 4876438 B2 JP4876438 B2 JP 4876438B2
Authority
JP
Japan
Prior art keywords
component
container
identifier
ejb
remote
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2005158299A
Other languages
English (en)
Other versions
JP2006338069A (ja
Inventor
真一 川本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2005158299A priority Critical patent/JP4876438B2/ja
Priority to US11/288,265 priority patent/US8782666B2/en
Publication of JP2006338069A publication Critical patent/JP2006338069A/ja
Application granted granted Critical
Publication of JP4876438B2 publication Critical patent/JP4876438B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、複数のソフトウェア部品(以後コンポーネント)から構成されるコンポーネントソフトウェアを高可用運用する運用方法及びコンポーネントソフトウェア運用基盤に関するものである。
オンラインショッピングサイトや、あるいは社内情報処理システムにおいて、クライアントとしてWebブラウザを用いるWebアプリケーションの利用が急速に広まっている。昨今のWebアプリケーションは、迅速な開発や柔軟な機能変更という観点から、複数の小規模なソフトウェアコンポーネントを組み合わせるコンポーネント型構成を採っている。このコンポーネントアプリケーションのための基盤技術としてJ2EE(Java2 Enterprise Edition)(JavaはSun Microsystems社の登録商標)や.NETがあり、これらを用いてWebアプリケーションを開発することが一般的となっている。J2EEや.NETは、WebアプリケーションのためのAPI(Application Programming Interface)を提供し、Webアプリケーションの開発者はこれらのAPIを用いてWebアプリケーションを構築する。これらのAPIを用いて構築されたWebアプリケーションはJ2EEサーバや.NETサーバと呼ばれるアプリケーション運用基盤上で実行される。以下ではJ2EEを例として、コンポーネントアプリケーションとその運用基盤について説明する。
J2EEにおけるコンポーネントはEJB(Enterprise Java Bean)と呼ばれる。主なEJBにセッションビーンとエンティティビーンがある。セッションビーンはユーザのセッションに対応して処理を行うEJBであり、エンティティビーンはユーザのセッションとは無関係に永続するデータを表すEJBである。エンティティビーンのデータは通常データベースに格納される。EJBはJ2EEのAPIに則りJava言語で記述されたコンポーネントである。EJBはEJBを他のEJB等の外部からリモート参照するために、リモートインタフェースとローカルインタフェースという2つのインタフェースをサポートしている。リモートインタフェースはリモートマシーン上に配備されたEJBの呼び出しに主に用いられる。一方、ローカルインタフェースは同一J2EEサーバ上に配備されたローカルEJBとの通信に用いられる。どちらのインタフェースが使えるかは、EJBの実装に依存する。
公知技術のコンポーネントソフトウェア運用基盤の構成をJ2EEサーバを例に図2に示す。100はコンポーネントソフトウェア運用基盤S、110はデプロイヤ、300、320はEJBを実行する実行環境であるコンテナ、310,330はコンテナ間のメソッド呼び出しを受信するリモート受信部、331はコンテナ間のメソッド呼び出しを送信するリモート送信部、400はネームサーバである。200はファイルシステムであり、ここに210や211のEJBクラスファイルを配置する。図2の例では、J2EEサーバには2つのEJB A、EJB Bが配備されている。なお、本図ではアプリケーション運用基盤は一つしかないが、複数のアプリケーション運用基盤を用意して、そのそれぞれにEJBを分散配備して一つのアプリケーションを構築することもできる。以下、図2の各構成要素について説明する。
(ネームサーバ)
ネームサーバ400はJNDI(Java Naming and Directory Interface)APIをサポートする名前とオブジェクトの対応関係を管理するサーバである。ネームサーバ400はテーブル401と制御部402を持つ。テーブル401は名前411とオブジェクト412の欄を持つ。制御部402はJNDI APIをクライアントに提供し、各APIの機能を実現する。ネームサーバの主要なAPIとして、以下の4つがある。
(1)bind
(2)lookup
(3)rebind
(4)unbind
bindは名前NとオブジェクトOの組(N、O)をネームサーバ400に登録し、lookupは名前Nでネームサーバ400を引いて名前Nに対応するオブジェクトOを取り出し、rebindは名前NとオブジェクトOの組(N、O)のオブジェクト部分をOからOnに変更し、unbindは名前Nのエントリ(N、O)をネームサーバから取り除く。図2のネームサーバ400のテーブル401には2つのエントリ421と422が登録されている。図1ではネームサーバ400はアプリケーション運用基盤中に存在しているが、アプリケーション運用基盤とは独立して存在する場合もある。
(デプロイヤ)
デプロイヤ110はEJBをファイルシステムから読み込んで、それを元にEJBのコンテナと、リモート送受信部を生成する。この動作を配備(デプロイ)と呼ぶ。例えばEJB Aを配備する場合、デプロイヤ110はファイルシステム200からEJB Aのクラスファイル210を読み込み、EJB Aのコンテナ300、リモートA受信部310、リモートA送信部311を生成する。そして、EJB Aの名前Aとコンテナ300のリモートインタフェースIntConAの組(A、IntConA)をネームサーバ400のbind APIを呼び出してネームサーバ400に登録する。登録されたエントリは421である。同様にEJB Bを配備すると、ファイルシステム200からEJB Bのクラスファイル211を読み込み、EJB Bのコンテナ320、リモートB受信部330、リモートB送信部(リモートB送信部は以後使用しないので図2には示していない)を生成する。そして、コンポーネントBの名前Bとコンテナ320のリモートインタフェースIntConBの組(B、IntConB)をネームサーバ400のbind APIを呼び出して登録する。登録されたエントリは422である。
デプロイヤは配備したEJBの配備解除(アンデプロイ)機能を持つ。配備解除は、まず当該EJBのコンテナ上で動作するEJBインスタンスを破棄し、コンテナとリモート受信部、リモート送信部を破棄する。
(コンテナ)
コンテナ300、コンテナ320はそれぞれEJB Aのインスタンス301、EJB Bのインスタンス321の実行をサポートする実行環境である。クライアントからのcreateメソッド呼び出しに従ってインスタンス301、321を生成する。
(リモート受信部・リモート送信部)
リモートA受信部310とリモートA送信部311はペアとなっておりクライアントからのEJB Aのリモートメソッド呼び出しのための通信をサポートする。同様にリモートB受信部330とリモートB送信部(図2中には記述無し)はペアとなっておりクライアントからのEJB Bのリモートメソッド呼び出しのための通信をサポートする。これらの通信は一般的にRMI−IIOPなどのプロトコルが使用される。一般的にリモート受信部(310、330)はRMIのスケルトン、リモート送信部(311)はRMIのスタブである。これらリモート受信部とリモート送信部のペアはEJBデプロイ時にJ2EEサーバによって自動的に生成されるか、あるいは、はじめからJ2EEサーバに組み込まれているかのどちらかである。
(ファイルシステムとクラスファイル)
ファイルシステム200はコンポーネントソフトウェア運用基盤100のが動作するOSのファイルシステムである。
(クラスファイル)
クラスファイル210、211はJavaのオブジェクトファイルであり、Javaで記述されたソースコードをJavaコンパイラでコンパイルして得られる。あるいは、コンパイルして得られたオブジェクトファイルとそれを配備するデプロイメントデスクリプタをJARファイルとしてアーカイブしたものである。
次に図2において、EJB Bのインスタンス321がEJB AのメソッドmethodXを呼び出す場合を例としてEJB間のメソッド呼び出しを説明する。EJB BにおけるEJB AのメソッドmethodXを呼び出すコードは一般に図3のようになる。まず図3の1〜2行目でJNDIのlookup APIを用いてネームサーバ400を参照し、名前Aに対応するEJB AのコンテナAのリモートインタフェースを取得する(これをホームインタフェースと呼ぶ)。次に3行目でEJB Aのホームインタフェースのcreateメソッドを呼び出す。このリモートホームインタフェースのメソッドcreateの呼び出しは、コンテナB320、リモートA送信部311、リモートA受信部310を経由してコンテナA300に到達する。コンテナA300はcreateメソッド呼び出しを受けると、EJB Aのインスタンス301を一つ生成し、このEJB Aのインスタンス301のリモートインタフェース(これをコンポーネントインタフェースと呼ぶ)を返り値として、リモートA受信部310、リモートA送信部311、コンテナB320を経由しEJB Bのインスタンス321に返し、EJB Bのインスタンス321がそれを受け取る。最後に、EJB Bのインスタンス321は4行目で、EJB Aのコンポーネントインタフェースに対しメソッドmethodXを呼び出すと、そのメソッド呼び出しは、コンテナB320、リモートA送信部311、リモートA受信部310、コンテナA300を経由し、EJB Aのインスタンス301に到達する。呼び出しを受けたEJB Aのインスタンス301はメソッドmethodXを実行し、その結果をコンテナA300、リモートA受信部310、リモートA送信部311、コンテナB320を経由して、EJB Bのインスタンス321に返す。
上記の説明では、EJB AのクライアントであるEJB BがEJB Aのホームインタフェースを使用してコンテナA300と通信する場合、及び、コンポーネントインタフェースを使用してEJB Aのインスタンス301と通信する場合の両方において、同一のリモート送信部311とリモート受信部310を使用するものとした。このような通信を実現するため、リモート送信部とリモート受信部を通るリモートメソッド呼び出しのためのメッセージは図17 1100のように構成される。1101はアクセス対象を示す対象識別子、1102は呼び出すメソッド、1103はメソッド1102のメソッド引数リスト1103である。対象識別子はコンテナIDまたはEJBインスタンスIDである。リモート受信部(310、330)はメッセージ1100の対象識別子1101がコンテナIDである場合は、コンテナに対してメソッド呼び出しを実行し、EJBインスタンスIDである場合には、当該EJBインスタンスのメソッド呼び出しを実行する。なお、J2EEサーバの実装によっては、ホームインタフェース用とコンポーネントインタフェース用の2種類のリモート送信部、リモート受信部を用いる場合もある。
以上EJBがリモートインタフェースを提供する場合について説明したが、ローカルインタフェースを提供する場合、リモート受信部、リモート送信部の代わりに、ローカル受信部、ローカル送信部が用いられ、同一J2EEサーバ内に特化されて最適化された低コスト通信が可能となる。
さて、これらのWebアプリケーションサイトの普及とともにサイト間の競争が激化しており、各サイトとも顧客の嗜好に合わせ迅速な機能修正や追加に追われている。迅速な機能の修正や追加は、すなわち開発とテストを限られた時間内で行うことを意味しており、必ずしも十分なテストができるとは限らない。従って、実際に顧客にサービスを提供する実運用を開始した後のWebアプリケーションにおいても、バグが残っている可能性が高く、それらのバグがシステムに障害を起し、サービスが停止する可能性がある。Webアプリケーションがバグ等によりダウンすると、サイトにとって莫大な損害が出ることから、バグが存在しても何とかサービスを継続させることのできる運用方法に注目が集まっている。
バグによって発生した障害の多くはアプリケーションを再起動することで一時的に解決することが知られていることから、Webアプリケーションを運営するサイトの中には、定期的にWebアプリケーションを再起動して障害を未然に防ぐ対策をしているところもある。
この再起動の考え方を粒度の小さなコンポーネントレベルで行うことでより効率的に障害から復旧する方法が特許文献1や非特許文献1に示されている。
特許文献1では、コンポーネントベース・アプリケーションにおいて、システム運用時に、システムの信頼性と性能を監視するために、ソフトウェア・コンポーネントに処理時間を測定するコードを埋め込み、これにより処理時間を測定し、測定された処理時間があらかじめ設定された閾値を超過した場合に、当該コンポーネントを異常状態と判定し、当該コンポーネントを閉塞したり、再起動するなどの対処方法について示している。
非特許文献1では、Webアプリケーションを構成するコンポーネントのうち、バグ等によって障害の発生したコンポーネントのみを再起動することによって、アプリケーション全体を再起動する場合に比べて高速に障害復旧するマイクロリブートという技術が示されている。障害の発生が予兆される場合にコンポーネントのマイクロリブートを行うことによって、低コストで未然に障害の発生を防ぐ方法についても示されている。
一方、再起動の場合、再起動している最中のコンポーネントに対する処理リクエストが来ると、それらはエラーとなってしまうこという問題があった。そこで、コンポーネントを終了して再び起動するのではなく、新しいコンポーネントを先に生成しておき新旧のコンポーネントを入替えることで、障害復旧とエラーを両立する方法が特許文献2と3に示されている。
特許文献2では、アプリケーションを構成するオブジェクト・インスタンス毎に監視プロセスを割り当て、これにより全てのオブジェクト・インスタンスの実行状況を監視し、異常と診断されたオブジェクト・インスタンスに対して、当該オブジェクト・インスタンスを代用オブジェクト・インスタンスと交換する方法を示している。
特許文献3では、マルチプロセス・マルチスレッドのアプリケーションにおいて、アプリケーションを停止することなく一部のコンポーネントを新コンポーネントと入替える方法が示されている。入替対象となっているコンポーネントに対する処理スレッドを一旦すべて停止し、全てのスレッドが停止状態となったらコンポーネントを置換するという方法を示している。
特開2002−82926号公報
特開平8−77120号公報 特開2001−290637公報 George Candea、 et al.、「A Microrebootable System − A Technique for Cheap Recovery」、6th Symposium On Operating Systems Design & Implementation 2004
しかし従来技術には次のような問題があった。第一に従来の技術ではコンポーネントを入替える際に、そのコンポーネントに対する処理をすべて停止するため、性能が低下するという問題があった。第二に、前述したようにEJBのメソッドを呼び出すためには、呼び出し側クライアントは呼び出し先EJBのホームインタフェースとコンポーネントインタフェースを順に取得し、最後に目的のメソッド呼び出しを行う。呼び出し先EJBの入替えを行った以後の当該EJBに対するメソッド呼び出しは、入替後の新EJBにて実行する必要がある。しかし、呼び出し側がホームインタフェース、または、ホームインタフェースとコンポーネントインタフェースの両方を取得した直後に、呼び出し先EJBの入替が行われ、その後メソッドが呼び出されても、当該インタフェースは旧EJBのインタフェースであるため、旧EJBに対してメソッド呼び出しを実行しようとする。もしEJBの入替直後に旧コンポーネントを終了すると、当該旧EJBに対するメソッド呼び出しはエラーとなる。また、EJBを入替た後も旧コンポーネントを残しておく方法も考えられるが、旧EJBに対するホームインタフェースやコンポーネントインタフェースは、クライアントのプログラムによって長時間生存し続ける可能性があることから、せっかくEJBを入替えて障害の発生を防止しようとしたのに、旧コンポーネントの終了ができずに、障害が発生してしまう可能性がある。
そこで、本発明の第一の課題は、障害の予兆や障害発生に適応してコンポーネントを入替えるコンポーネントアプリケーション運用方法であって、入替時にエラーを発生させずかつ性能を落とさないコンポーネント入替技術を提供することである。また、本発明の第二の課題は、コンポーネント入替時に問題となる上記インタフェースの問題を解決し、コンポーネントを旧コンポーネントから新コンポーネントに入替えた瞬間から、そのコンポーネントに対する全てのメソッド呼び出しは新コンポーネントで実行する技術を提供することである。
あらかじめコンポーネント毎に代替コンポーネントとそのコンポーネントに障害が発生することを予兆する条件を定義しておく。
アプリケーション運用基盤に、各コンポーネントの状態や運用基盤自身の状態を監視する監視部、監視部の情報に基づいて各コンポーネント毎に定義された条件が成立するかどうかを判定する判定部、判定部によって条件が成立したコンポーネントを指定された代替コンポーネントに入替える制御を行う制御部、既にアプリケーション運用基盤に配備されたコンポーネントを重複して配備する重複デプロイヤ、コンポーネント間の通信を制御する通信制御部、2つのエントリの名前とオブジェクトとをアトミックに入替える機能を持ったネームサーバを儲ける。
アプリケーション運用基盤は、監視部が各コンポーネントの状態や運用基盤自身の状態を監視して、判定部がその監視結果を元に各コンポーネントに定義された条件が成立するかどうか判定し、もしあるコンポーネントAの条件が成立した場合は、制御部がそのコンポーネントAを代替コンポーネントBと入替える。
入替えは、まず、重複デプロイヤによって代替コンポーネントBの実体をアプリケーション運用基盤上に生成し、その実体のインタフェースと、その実体を一意に識別する名前Bの組をネームサーバに登録する。そして、ネームサーバの入替え機能を用い、登録されている現在運用中のコンポーネントの名前Aと新規に登録した代替コンポーネントの名前Bのインターフェース部分を入替え、以後、名前Aで代替コンポーネントBの実体のインタフェースが得られるようにする。次に、通信制御部によってコンポーネントAに対する通信を、代替コンポーネントBに送るように通信先を入替える。最後にコンポーネントAの実体で実行されていた処理が全て完了するまで待って、完了するとコンポーネントAの実体を終了すると共に、当該実体と名前Bからなるエントリをネームサーバから削除する。
本発明のコンポーネントソフトウェアの運用方法は、特定のコンポーネントに障害の発生が予兆される場合、当該コンポーネント(旧コンポーネント)の代替コンポーネント(新コンポーネント)を新たに配備して、配備が完了すると、当該コンポーネントに対する新規の処理要求は全て新コンポーネントで実行し、かつ、旧コンポーネントが既に実行中の処理は旧コンポーネントで処理を実行し続け、旧コンポーネントで実行中の処理が全て完了すると、旧コンポーネントを終了することによって、処理を停止することなく新旧コンポーネントを入替えるため、性能低下がなくかつコンポーネント入替えによって障害の発生が予防できる。また、クライアントから受けた処理をコンポーネントに送る通信処理を間接化し、クライアントが旧コンポーネントのインタフェースを持っていて、そのインタフェースを用いてメソッド呼び出しをした場合であっても、そのメソッド呼び出しは旧コンポーネントではなく新コンポーネントに送られて新コンポーネントで処理されるため、コンポーネントの入替えの短期化と、それによる確実な障害予防が実現される。
性能を落とさずに高可用運転を実現するコンポーネントソフトウェアの運用基盤の実現を目的とし、既存のコンポーネントソフトウェア運用基盤であるJ2EEサーバをベースとし幾つかのモジュールの追加とJ2EEサーバの一部修正によって最小の工数で実現した。
図1は、本発明のコンポーネントソフトウェア運用基盤の構成図である。200、210、211、300、301、311、320、321は前述の図2と同じである。120は図2のデプロイヤ110に同一EJBを重複して配備する機能を持たせたデプロイヤ、130はEJBの入替えを制御する制御部、140は各EJBの状態、コンポーネントソフトウェア運用基盤の状態、コンポーネントソフトウェア運用基盤が動作するOSの状態などを監視する監視部、150は監視部140が監視して得られた各種の情報を元にしてEJB毎に定められた条件が成立するかどうか判定する判定部、312は図2のリモートA受信部310の機能を拡張したリモートA受信部、332は図2のリモートB受信部330の機能を拡張したリモートB受信部、450は図2のネームサーバ400に機能を追加したネームサーバである。220はEJB Aの代替EJBや入替え条件を定義したA入替え定義ファイル、221はEJB Bの代替EJBや入替え条件を定義したB入替え定義ファイルである。
(各部の説明)
(1)ネームサーバ
ネームサーバ450は図2のネームサーバ400に機能を追加したものである。テーブル401は図2のテーブルそのものである。制御部452は図2の制御部402がサポートする全てのAPIの他に図8に示すreplaceというAPIとその処理機能を備える。制御部452がサポートする主要なAPIを以下に示す。
(1)bind
(2)lookup
(3)rebind
(4)unbind
(5)replace
後述するように既存のbind等のAPIの処理も処理がアトミックとなるように機能を修正している。replace APIは2つの名前name1、name2を引数として取り、テーブル401に登録されている名前がname1のエントリのオブジェクトと、名前がname2であるエントリのオブジェクトをアトミックに入替える。例えばテーブル401に名前NaとオブジェクトOaの組(Na、Oa)と、名前NbとオブジェクトObの組(Nb、Ob)が登録されており、replace(Na、Nb)が呼び出された場合、2つのエントリは(Na、Ob)、(Nb、Oa)となる。このreplaceの処理はlookupとrebindを組み合わせることで実現できる。まずNa、NbをそれぞれlookupしオブジェクトOa、 Obを取り出す。次に、名前Naに対してObをrebindし、名前Nbに対してOaをrebindする。ただし、これらの処理の実行途中に、replace処理とは別にlookup、 rebind、 unbind処理が発生すると、テーブルが不整合になるなどの問題が発生する可能性がある。そこでまず制御部452にロック変数Lを設ける。また、従来のbind、 lookup、 rebind、 unbindをそれぞれibind、 ilookup、 irebind、 iunbindと名称変更し、bindやlookupはロック変数とibindやilookupを組み合わせて実現する。図9にreplace(Na、Nb)の処理フローを示す。1001でまずロック変数Lをロックする。既に他の処理がロック変数Lをロック中の場合はアンロックするまで待たされる。
次に1002でilookup(Na)により名前Naと組みになっているオブジェクトを取り出しtemp1に格納する。次に1003でilookup(Nb)により名前Nbと組になっているオブジェクトを取り出してtemp2に格納する。1004でirebind(Na、temp2)により、名前Naのオブジェクトを入替え、1005でirebind(Nb、temp1)により、名前Nbのオブジェクトを入替える。最後に1006でロック変数Lをアンロックする。図10にbind(N、O)の処理フローを示す。まず1011でロック変数Lをロックし、1012でibind(N、O)を実行し、1013でロック変数Lをアンロックする。rebind(N、O)、unbind(N)も同様であり、1012のところをそれぞれirebind(N、O)、iunbind(N)と置き換えるだけで実現される。図19にlookup(Na)の処理フローを示す。1021でロック変数Lをロックし、1022でilooup(Na)を実行し、1023でロック変数Lをアンロックし、1024で1022実行の結果得られたオブジェクトを返す。
(2) 入替え定義ファイル
入替え定義ファイル220、221は図4に示すように、XMLで記述され、EJB名(2行目)、代替EJB名(3行目)、入替え条件(4行目〜6行目)、優先度(7行目)などの項目から構成される。図4はEJB Aに関する入替えを定義しており、代替コンポーネントとしてEJB Aを(すなわち同一EJBの別の実体に入替える)、入替え条件として生存期間300秒(5行目)を指定しており、配備されてから300秒立つと入替えを行うことを意味する。優先度は、同時に複数のEJBで入替え条件が成立したときに、入替えEJBの順序を決定するのに使用する。入替え条件としては図4の生存期間の他、図5、図6、図7などが指定できる。図5はEJBの呼び出し回数が10000回になった場合、図6はOSのメモリ使用量が90%を超えた場合、図7はEJB Aにて例外(種類は問わない)が5回発生した場合それぞれ入替えを行う。これらの条件をandやorで複数結合し、複合条件を指定することもできる。定義ファイル220、221はXMLで記述されているが、他の形式や、独自形式であっても良い。また、図1ではEJB Aの入替え定義と、EJB Bの入替え定義を別々の入替え定義ファイルに記述しているが、幾つかのEJBの入替え定義を一つのファイルにまとめて記述しても良い。ファイルの代わりに、これらの値を入力するユーザインタフェースを設けてユーザに入力させても良い。
(3)デプロイヤ
デプロイヤ120は図2のデプロイヤ110を機能拡張したものであり、クラスファイルと入替え定義ファイルを読み込みEJBを配備する。以下ではEJB Aを配備する場合を例に説明する。EJB Aがコンポーネントソフトウェア運用基盤101に配備されていない場合、前述の図2の110とほぼ同様に動作する。すなわちファイルシステム200からEJB Aのクラスファイル210を読み込み、EJB Aのコンテナ300、リモートA受信部312、リモートA送信部311を生成する。そして、EJB Aの名前Aとコンテナ300のリモートインタフェースIntConAの組(A、IntConA)をネームサーバ450のbind APIを呼び出して登録する。次にA入替え定義ファイル220を読み込んで、EJB名、代替EJB名、優先度を制御部130に設定し、EJB名、入替え条件、現在時刻を判定部150に設定する。
EJB Aが既にコンポーネントソフトウェア基盤101に配備されている場合を図11を用いて説明する。図11はEJB AとEJB Bが配備された図1のコンポーネントソフトウェア運用基盤101にEJB Aを重複して配備した場合を示しており、変更分は500、501、512のもである。デプロイヤ120はファイルシステム200からEJB Aのクラスファイルを読み込み、既に配備されているコンテナA300、リモートA受信部310、リモートA送信部(図1中には記述なし)とは別に新たにEJB AのコンテナAs500、リモートAs受信部512、リモートAs送信部(図中に記述無し)を生成する。そして、EJB Aの名前Aと重複しない名前Asをオリジナルの名前Aに数字を付加して生成する。この数字はデプロイヤ120にEJB毎にカウンタを持たせ、EJB Aの重複配備を実行する度にカウンタを1インクリメントすることで実現する。この数字はデプロイヤ120の内部のカウンタで管理するのではなく、外部のDBで管理しても良い。そのほか、数字の代わりに特定の文字列を用いても良いし、時刻を用いても良い。このようにして生成した名前AsとコンテナAs500のリモートインタフェースIntConAsの組(As、IntConAs)をネームサーバ450のbind APIを呼び出して登録する。次にA入替え定義ファイル220を読み込んで、EJB名、代替EJB名、優先度を制御部130に設定し、EJB名、入替え条件、現在時刻を判定部150に設定する。なお、入替えて意義ファイルが存在しない場合は、上記の制御部130と判定部150の設定は行わない。
デプロイヤ120によるリモート受信部(312、332)の生成については以下のリモート受信部(312、332)の記述の際に述べる。
デプロイヤ120はデプロイヤ110と同様に配備解除機能を持つ。配備解除は、配備解除対象EJBのインスタンスを破棄し、コンテナ、リモート受信部、リモート送信部を破棄する。この配備解除機能の他に、デプロイヤ120は部分配備解除機能を持つ。部分配備解除機能とは、対象EJBのインスタンスとコンテナの破棄のみ行い、リモート受信部、リモート送信部の破棄を行わない。
(4)監視部
監視部140は、各EJB呼び出し回数、例外やエラーの発生、OSのメモリ使用率等を例えば30秒間隔ごとに定期的に計測する。EJBの呼び出し回数はコンテナ300、320、500内に整数カウンターを設け、呼び出しがあるたびにそれを1インクリメントすることで実現する。例外やエラーの発生は、コンテナ330、320、500にvectorを設け、エラーや例外が発生すると、発生したエラーの種類、メソッドの名称、呼び出し時刻をそれに追記していく。これらカウンタやlistを返すメソッドをコンテナに用意し、監視部140は定期的にこれらのメソッドを呼び出して情報を取得する。OSのメモリ使用率はコンポーネントソフトウェア運用基盤に用意されているAPIがあればそれを使用し、そうでなければOSにシステムコールを発行してコンポーネントソフトウェア運用基盤が使用しているメモリサイズと、最大メモリサイズを取得して、これらから使用率を計算する。監視部140はこれらのEJB呼び出し回数、例外やエラーの発生、メモリ使用率のそれぞれを外部から取得するメソッドgetCount、 getEvent、 getMemを備えている。
(5)判定部
判定部150は一定の間隔、例えば1分毎に各EJBの入替え条件が成立するか判定する。判定部150は図12に示す条件表600を備えている。条件表600は3つの欄EJB名610、入替え条件611、配備時刻612から構成されている。図12では2つのエントリ620と621が登録されている。これらのエントリはデプロイヤ120がEJBを配備する際に条件表600に登録される。エントリ620はEJB Aの入替え条件を示しており、配備時間が300秒を超えたら入替えを行うことを示す。配備時間を判定するために、配備時刻の欄612が用いられる。エントリ621はEJB Bの入替え条件を示しており、EJB Bの呼び出し回数が10000回となったら入替えを実行することを意味している。
判定部150は条件表600の各エントリに対して順次入替え条件が成立するかどうか判定する。入替え条件が配備時間である場合は、現在の時刻と条件表600に登録されている配備時刻612の差分が指定時間より長ければ入替え条件が成立したと判定する。入替え条件がEJBの呼び出し回数であるとき、監視部140のメソッドgetCountを呼び出して当該EJBの呼び出し回数を取得し、それが指定された値より大きければ入替え条件が成立したと判定する。入替え条件が例外やエラーの回数である場合は、監視部140のメソッドgetEventを呼び出して例外やエラー情報を取得し、指定されているエラーや例外の発生回数を調べ、それらが指定された回数を超えていれば条入替え条件が成立したと判定する。入替え条件がメモリ使用率である場合、監視部140のメソッドgetMemを呼び出してメモリ使用率を取得し、それが指定されたメモリ使用率より大きかった場合には、条件が成立したと判定する。以上の判定を条件表600の各エントリに対して実行し、入替え条件が成立したEJB名リストを引数として制御部130を呼び出す。
(6)リモート受信部
リモートA受信部312、リモートB受信部332(以後リモート受信部)は図2のリモートA受信部310、リモートB受信部330に機能を追加したものである。これらはそれぞれリモートA送信部311、リモートA送信部(図中に記述無し)(以後リモート送信部)とペアになっており、EJB A、EJB Bとのリモート通信を実現する。リモート受信部はRMIのスケルトンとして実現され、リモート送信部はRMIのスタブとして実現される。リモートA送信部311、リモートB送信部(図中に記述なし)はそれぞれ公知のRMIスタブである。デプロイヤ120がこれらはEJB AやEJB Bを配備する際に、公知のRMIコンパイラrmicを使用して自動的に生成する。その手法は公知のデプロイヤ110と同様である。リモートA受信部312、リモートB受信部332は公知のRMIスケルトンに機能追加している。
図14にリモートA受信部312の構成を示す。リモートA受信部は図2のリモートA受信部310にコンテナ管理変数800と制御部801とEJBインスタンス管理テーブル802を追加し、通信機能を一部修正したものである。コンテナ管理変数800の初期値はNULLである。この変数はコンテナの切り替えをサポートするために用いられる。制御部801はsetContainerメソッドをサポートする。setContainerメソッドをコンテナを引数として呼び出すと、制御部801は、引数で指定されたコンテナをコンテナ管理変数800に上書きする。EJBインスタンス管理テーブル802は、旧EJBインスタンスID810と新EJBインスタンスID811の欄から構成されるテーブルであり、コンテナを入替えた際に、旧インスタンスと新インスタンスとの対応関係を記録するために用いられる。EJBインスタンス管理テーブル802は、制御部801のsetContainerメソッドが呼び出されると、すべてのエントリがクリアされて初期化される。
リモートA受信部312とリモートA送信部311との間でやり取りされるメソッド呼び出しのメッセージは前述のリモートA受信部310とリモートA送信部311との間でやり取りされるメッセージ1100(図17)と同じである。リモートA受信部312がリモートA送信部311からメッセージ1100を受け取ると、リモートA受信部312はまずコンテナ管理変数800がNULLであるかどうか調べ、NULLである場合、メッセージ1100の対象識別子1101を調べ、対象識別子がコンテナIDである場合には、コンテナIDで示されるデフォルトのコンテナA300のメソッド1101を引数1102とともに呼び出す。対象識別子がEJBインスタンスIDである場合には、デフォルトのコンテナA300上の対象識別子1101で識別されるEJB Aのインスタンス301のメソッド1102を引数1103と共に呼び出す。
コンテナ管理変数800がNULLで無い場合であって、メッセージ1100の対象識別子がコンテナIDである場合には、コンテナ管理変数800で識別されるコンテナのメソッド1102を引数1103と共に呼び出す。対象識別子がEJBインスタンスIDである場合には、まずEJBインスタンス管理テーブル802を参照し、旧EJBインスタンスID810の欄がメッセージ1100の対象識別子1101と一致するエントリが無いか調べ、存在した場合は、そのエントリの新EJBインスタンスID811で識別される、コンテナ管理変数800で識別されるコンテナ上のEJBインスタンスのメソッド1102を引数1103と共に呼び出す。EJBインスタンス管理テーブル802にエントリに一致するエントリが存在しない場合は、コンテナ管理変数800で識別されるコンテナにcreateメソッドを発行して当該コンテナ上に一つEJBインスタンスを生成し、メッセージの対象識別子1101とcreateの結果生成されたEJBインスタンスの識別子の組をEJBインスタンス管理テーブル802に登録する。これによって、コンテナ管理変数にコンテナが登録されている場合には、アクセス対象をデフォルトのコンテナに代えて、指定されたコンテナとすることにより、リモートメソッド呼び出しの切り替えを実現している。
リモート受信部(312、332)は、デプロイヤ120がEJB AやEJB Bを配備する際に自動的に生成される。その方法は公知の図2のデプロイヤ110が従来のリモート受信部(310、330)を生成するのとほぼ同様である。相違点は、上記のコンテナ切り替え制御を実現するコードを通常のスケルトンコードに埋め組む拡張を施したRMIコンパイラrmicを使用することである。あるいはスケルトンの生成には通常のRMIコンパイラrmicを使用し、生成されたスケルトンコードに上記のコンテナ切り替えコードを埋め込むことによって生成しても良い。
(7)制御部
制御部130はEJBの入替えを行う。制御部は図13の入替表700と図20のユーザインタフェース1200とを持つ。
入替表700はEJB名710、代替EJB名711、優先度712の欄を持つ。デプロイヤ120がEJBを配備する際に入替定義ファイル220、221を読んで値を入替表700に登録する。EJB Aを配備した場合に登録されたエントリが720であり、EJB Bを配備した場合のエントリが721である。エントリ720は、EJB Aの代替EJBはEJB Aであり、その優先度は3であることを意味する。エントリ721はEJB Bの代替EJBがEJB Bnewであり、その優先度は5であることを意味する。
ユーザインタフェース1200はユーザがコンポーネントソフトウェア運用基盤101に対してコンポーネントの入替えに関する設定をするためのインタフェースである。ユーザインタフェース1200は自動入替えに関する設定と、手動入替えに関する設定をサポートする。自動入替えに関する設定は、コンポーネントの入替えを自動的に行うかどうかを指示する。ボタン1201は自動的に入替えを実施することを示し、1202は自動的に入替えを実施しないことを示す。これらのボタンはどちらか一方のみ選択できる。図20では入替えを実施するボタン1201が選択されており、この場合制御部130は以下に示すコンポーネント入替え処理を実行する。1202のボタンが選択されている場合には、コンポーネント入替え処理は行わない。また、手動入替えに関する設定は、入力欄1203に入替え対象コンポーネントを指定して、ボタン1204を押すと、以下コンポーネント入替え処理のフェーズ2で説明するように、入力したコンポーネントをその代替コンポーネントと入替える。なお、ユーザインタフェースは図20の1200のようなグラフィカルユーザインタフェース(Graphical User Interface: GUI)のほか、コマンドラインインタフェース(Command Line Interface: CUI)であっても良いし、GUIとCUIを両方サポートしても良い。また、ユーザの代わりに、他のプログラムが上記GUIまたはCUIを操作しても良い。
(コンポーネント入替え処理)
コンポーネント入替えは以下のフェーズ1とフェーズ2から構成される。
(フェーズ1)
制御部130は判定部150から呼び出される。判定部は入替え条件の成立したEJB名をリストとして制御部130に渡す。制御部130は、このリストを参照し、リストにある全てのEJBに対して入替表700から優先度を取り出し、優先度の高い順にEJBの入替えを行う。優先度が同じ場合にはランダムに選ぶ。他の選択方法であっても良い。以後決定した順番でEJBの入替えを行っていく。このとき、例えば10秒間隔で一つずつ入替える。あるいは、間隔をあけずに順次入替えても良い。
(フェーズ2)
以下EJB Aを入替える場合を例として処理方法を説明する。入替え処理は図15のフローに従って実行される。まず900で入替表700を参照して入替え対象EJBの代替EJBを取り出す。EJB Aの場合はEJB A自身が代替EJBである。次に901でデプロイヤ120に対し、EJB Aの代替EJBであるEJB Aの配備を指示する。代替EJB AがEJB Aと同一であるため、デプロイヤ120はコンテナを重複して配備する。配備後のコンポーネントソフトウェア運用基盤は図11の101となる。500は重複して配備されたEJB AのコンテナAs、512はEJB AのリモートAs受信部である。(識別容易化のためAの代わりにAsという記号を用いている)。図11の501はコンテナAs500上のEJB Aのインスタンスであるが、この時点ではまだインスタンスは生成されない。そしてデプロイヤ120はネームサーバ450にエントリ423を追加する。次に制御部130は902で入替え対象EJB Aの名前Aと、新たに配備した代替EJB Aの名前Asを引数としてネームサーバ450のreplace APIを呼び出す。これによって、ネームサーバ450のテーブル401のエントリは図16のようになる。424は名前Aと新規に配備されたEJB AのコンテナAsの組であり、425は名前Asと旧コンテナAの組である。次に制御部130は、903において、リモートA受信部312のsetContainerメソッドをコンテナAs500を引数として呼び出す。これによってリモートA受信部312のコンテナ管理変数800はNULLからコンテナAs500に書き換えられる。以後リモート受信部312を介するメソッド呼び出しはコンテナAs500で実行される。次に制御部130は、904にてコンテナA300で実行中の全ての処理が終了するまで待ち、905でデプロイヤ120の部分配備解除機能を呼び出して、旧EJB Aのインスタンス301と、コンテナ300を終了(配備解除)する。最後に906でネームサーバ450のunbind APIを名前Asを引数として呼び出し、エントリ(As、IntConAs)425をネームサーバ450から抹消する。以上でEJB Aの入替え処理は終了する。
(リモートメソッド呼び出し)
これまで主にEJB Aの入替え処理について説明してきた。ここでは、クライアントであるEJB BがEJB Aのメソッドを呼び出す観点からその動作を説明する。まずEJB BにおけるEJB Aのメソッド呼び出しコードの一部は図3のようになっているものとする。図1においてEJB Bのインスタンス321はまず図3の1〜2行目を実行すると、ネームサーバ450が参照されて、名前の欄がAであるエントリが検索される。結果としてエントリ421のオブジェクト欄に登録されているコンテナAのホームインタフェースIntConAが得られる。インスタンス321は図3の3行目を実行し、lookupによって得られたホームインタフェースIntConAのcreateリモートメソッドを呼び出す。このリモートメソッド呼び出しは、コンテナB320経由でリモートA送信部311に送られ、ここでメッセージ1100に変換されてリモート受信部312に到達する。メッセージ1100の対象識別子1101はコンテナA312であり、メソッド1102はcreateである。リモートA受信部はこのメッセージを受け取ると、まずコンテナ管理変数800を参照し、その値がNULLであるので、メッセージ1100の対象識別子1101で識別されるコンテナA312のcreateメソッドを呼び出す。
コンテナA312はEJB Aのインスタンス301を生成し、当該インスタンスのコンポーネントインタフェースをコンテナA300、リモートA受信部312、リモートA送信部311、コンテナBを経由してEJB Bのインスタンス321に返される。インスタンス321は次に図3の4行目を実行し、EJB Aのインスタンス301のmethodXリモートメソッドを呼び出す。このメソッド呼び出しはコンテナB320を経由してリモートA送信部311に送られ、メッセージ1100に変換される。ここでメッセージ1100の対象識別子はEJB Aのインスタンス301であり、メソッド1102はmethodXである。このメッセージ1100がリモートA受信部312に到達すると、リモートA受信部312はまずコンテナ管理変数800を参照し、その値がNULLなので、メッセージ1100の対象識別子1101で識別されるEJB Aのインスタンス301のmethodXメソッドを呼び出す。結果はコンテナA300、リモートA受信部312、リモートA送信部311、コンテナBを経由してEJB Bのインスタンス321に返される。
次に、EJB Aの入替え条件が成立し制御部130がEJB Aの入替えを実行し、それが完了した後のコンポーネントソフトウェア運用基盤を図18に示す。コンテナA300がコンテナA500に入替えられる。ネームサーバ450の名前AはリモートインタフェースIntConAsに入替えられる。また、リモートA受信部312のコンテナ管理変数800にはコンテナAsが500が格納される。ここで、前述のEJB BがEJB Aに対し再び図3の4行目のmethodXリモートメソッドを呼び出したとする。すると、前述と同様にメッセージが作成され、リモートA受信部312に渡される(コンテナ入替え後もリモートA送信部311はリモートA受信部312とペアになっており、リモートAs送信部512とは通信できない)。リモートA受信部312はまずコンテナ管理変数800を参照し、値がNULLではないので、メッセージ1100の対象識別子1101に相当するエントリが、EJBインスタンス管理表802に存在するかどうか検索し、存在しないので、コンテナ管理変数800で識別されるコンテナAs500のcreateメソッドを実行してコンテナAs500上にEJB Aのインスタンス501を生成する。メッセージ1100の対象識別子1101に格納されているコンテナA上のインスタンス301の識別子と、今生成したインスタンス501の識別子をペアとしてEJBインスタンス管理表802に登録し、インスタンス501のメソッドmethodXを実行し、得られた値をインスタンス321に返す。以上のようにしてコンテナを入替える前に取得したホームインタフェースやリモートインタフェースを用いたメソッド呼び出しは、すべて新規コンテナの新しいインスタンス上で実行されることになる。
最後に、EJB Aの入替えを行った後の図18の状態において、上述のEJB Bのインスタンス321とは異なる新規のインスタンス321が図3のコードを実行してEJB AのmethodXリモートメソッドを呼び出す場合について説明する。図18においてEJB Bの新規インスタンス321はまず図3の1〜2行目を実行すると、ネームサーバ450にlookupを発行し、名前の欄がAであるエントリが検索される。結果としてエントリ424のオブジェクト欄に登録されているコンテナAsのホームインタフェースIntConAsが得られる。新規インスタンス321は図3の3行目を実行し、ホームインタフェースIntConAsのcreateリモートメソッドを呼び出す。このリモートメソッド呼び出しは、コンテナB320経由でリモートA送信部311に送られ、ここでメッセージ1100に変換されてリモートAs受信部512に到達する。メッセージ1100の対象識別子1101はコンテナAs500であり、メソッド1102はcreateである。リモートAs受信部512はこのメッセージを受け取ると、まずコンテナ管理変数800を参照し、その値がNULLであるので、メッセージ1100の対象識別子1101で識別されるコンテナAs500のcreateメソッドを呼び出す。コンテナAs500はEJB Aのインスタンス501を生成し、当該インスタンスのコンポーネントインタフェースをコンテナAs500、リモートAs受信部512、リモートA送信部311、コンテナB320を経由してEJB Bの新規インスタンス321に返す。新規インスタンス321は次に図3の4行目を実行し、EJB Aのインスタンス501のmethodXリモートメソッド呼び出しも同様にして処理される。以上のようにしてコンテナを入替えた後にネームサーバのlookupから始まるプログラムを実行したリモートメソッド呼び出しは、すべて新しいコンテナAsで実行される。
本発明で示したコンポーネントソフトウェアの高可用運用方法を備えた運用基盤は、
幅広いアプリケーションを運用するアプリケーションプラットフォームソフトウェアとして利用可能である。特に、高い可用性が要求されるミッションクリティカルアプリケーションを運用するアプリケーションプラットフォームソフトウェアとしても利用できる。
コンポーネントソフトウェアの高可用運用方法及び運用基盤の実施方法を示した説明図である。(実施例1) 従来技術のコンポーネントソフトウェアの運用基盤を示した説明図である。 EJBのリモートメソッドを呼び出すクライアントプログラムの一部を示した図である。 本発明で使用するEJBの入替え定義ファイルの例を示した図である。 本発明で使用するEJBの入替え定義ファイルの入替え条件の一例を示した図である。 本発明で使用するEJBの入替え定義ファイルの入替え条件の一例を示した図である。 本発明で使用するEJBの入替え定義ファイルの入替え条件の一例を示した図である。 本発明で使用するネームサーバに追加したreplace APIの仕様を示した図である。 本発明で使用するネームサーバに追加したreplace APIの機能を実現する処理フローを示した図である。 本発明で使用するネームサーバのbind APIの機能を実現する処理フローを示した図である。 本発明で機能修正したデプロイヤによって既にコンポーネントソフトウェア運用基盤上に配備されているEJB Aを重複して配備した場合のコンポーネントソフトウェア運用基盤の説明図である。 本発明で新たに追加した判定部において、各EJBの判定条件を記録する判定表を示す図である。 本発明で新たに追加した制御部において、各EJBの代替EJBと優先度を記録する入替表を示す図である。 本発明で機能修正したリモート受信部の構成を示す図である。 本発明で新たに追加した制御部が、EJBを代替EJBと入替える際の処理フローを示した図である。 ネームサーバのテーブルであって本発明で新たに追加したreplace APIを実行した結果得られるエントリを示した図である。 従来技術のリモート送信部とリモート受信部の間でやり取りされるメッセージを示した概略図である。 本発明で追加した制御部によってEJB Aの入替え処理を実行し終えた後のコンポーネントソフトウェア運用基盤の状態を説明する図である。 本発明で使用するネームサーバのlookup APIの機能を実現する処理フローを示した図である。 本発明で使用する制御部のインタフェースの概要を示す説明図である。
符号の説明
100、101 コンポーネントソフトウェア運用基盤
110、120 デプロイヤ
130 制御部
140 監視部
150 判定部
200 ファイルシステム
210、211 EJBクラスファイル
220、221 入替定義ファイル
300、320、500 コンテナ
301、321、501 EJBインスタンス
310、312、330、512 リモート受信部
311 リモート送信部
400、450 ネームサーバ
401 テーブル
402、452 ネームサーバの制御部
411 名前
412 オブジェクト
421、422、423、424、425 ネームサーバのエントリ
600 条件表
610 EJB名
611 入替条件
612 EJB配備時刻
620、621 条件表のエントリ
700 入替表
710 EJB名
711 代替EJB
712 優先度
800 コンテナ管理変数
801 リモート受信部の制御部
802 EJBインスタンス管理テーブル
810 旧EJBインスタンスID欄
811 新EJBインスタンスID欄
1100 リモートメソッド呼び出しメッセージ
1101 対象識別子
1102 メソッド
1103 メソッド引数リスト
1200 ユーザインタフェース
1201 自動入替え制御Onボタン
1202 自動入替え制御Offボタン
1203 手動入替え対象EJB入力欄
1204 手動入替え開始ボタン。

Claims (6)

  1. ソフトウェア部品であるコンポーネントから構成されるコンポーネントソフトウェアの運用方法であって、
    前記コンポーネントを識別する識別子と、前記コンポーネントに対する処理要求を前記コンポーネントを用いて実行する実行環境であるコンテナと、の間の対応関係を管理し、
    前記コンポーネントソフトウェアの運用基盤であるコンポーネントソフトウェア運用基盤の中に第1のコンテナを生成し、
    前記第1のコンテナを前記コンポーネントの中の第1のコンポーネントの実行環境として、前記第1のコンポーネントを識別する第1の識別子と、前記第1のコンテナと、の前記対応関係である第1の対応関係を生成し、
    前記第1のコンポーネントに対する第1の処理要求を受信すると、前記第1の識別子に基づいて前記第1の対応関係を参照して、前記第1の識別子に対応付けられた前記第1のコンテナにおいて、前記第1のコンポーネントを用いて前記第1の処理要求を実行し、
    前記コンポーネントソフトウェア運用基盤の中に第2のコンテナを生成し、
    前記第1のコンポーネントと同じ内容の前記コンポーネントを前記第1のコンポーネントの代替のコンポーネントである第2のコンポーネントとして設定し、
    前記第2のコンテナを前記コンポーネントの中の第2のコンポーネントの実行環境として、前記第2のコンポーネントを識別する第2の識別子と、前記第2のコンテナと、の前記対応関係である第2の対応関係を生成し、
    予め設定された前記第1のコンポーネントの入れ替えの環境が整った場合、または他のソフトウェアやユーザからの入れ替え指示を受信した場合に、前記第2のコンテナにおいて前記第2のコンポーネントの使用を開始し、
    前記第2のコンポーネントの使用を開始した際に、前記第1の対応関係における前記第1の識別子を前記第2の識別子に、前記第2の対応関係における前記第2の識別子を前記第1の識別子に、それぞれ変更し、
    前記第2のコンポーネントの使用開始より前に受信済みの前記第1のコンポーネントに対する処理要求を前記第1のコンポーネントを用いて実行し、
    前記第2のコンポーネントの開始以降に前記第1の処理要求を受信した場合は、前記第1の識別子に基づいて前記変更後の前記第2の対応関係を参照して、前記第1の識別子に対応付けられた前記第2のコンテナにおいて、前記第2のコンテナを実行環境とする前記第2のコンポーネントを用いて前記第1の処理要求を実行し、
    前記第2のコンポーネントの開始より前に受信した前記第1のコンポーネントに対する処理要求の実行が完了したことを契機に、前記第1のコンポーネントを終了し、前記第1のコンテナを前記コンポーネントソフトウェア運用基盤から削除し、前記第1の対応関係を削除する、こと、
    を特徴とするコンポーネントソフトウェアの運用方法。
  2. 前記第2のコンポーネントの起動を、あらかじめ運用の開始前に行っておくこと、を特徴とする請求項1記載のコンポーネントソフトウェアの運用方法。
  3. 前記第2のコンポーネントを起動する際は、前記第1のコンポーネントの他に前記第1のコンポーネントと同一のコンポーネントを重複して、前記第2のコンポーネントとして起動すること、を特徴とする請求項1記載のコンポーネントソフトウェアの運用方法。
  4. ソフトウェア部品であるコンポーネントから構成されるコンポーネントソフトウェアの運用を行うコンポーネントソフトウェア運用基盤であって、
    前記コンポーネントと、前記コンポーネントに対する処理要求を前記コンポーネントを用いて実行する実行環境であるコンテナ、の生成及び削除を管理し、前記コンポーネントを識別する識別子と前記コンテナとの間の対応関係を管理する管理部と、
    前記コンポーネントに対する処理要求を受信すると、前記処理要求の対象である前記コンポーネントの前記識別子に基づいて前記対応関係を参照して、前記処理要求の対象である前記コンポーネントの前記識別子に対応付けられた前記コンテナにおいて、前記コンテナを実行環境とする前記コンポーネントを用いて前記処理要求を実行する処理要求実行部と、を有し、
    前記管理部は、
    第1のコンテナを生成し、前記第1のコンテナを前記コンポーネントの中の第1のコンポーネントの実行環境として、前記第1のコンポーネントを識別する第1の識別子と、前記第1のコンテナと、の前記対応関係である第1の対応関係を生成し、
    前記コンポーネントソフトウェア運用基盤の中に第2のコンテナを生成し、
    前記第1のコンポーネントと同じ内容の前記コンポーネントを前記第1のコンポーネントの代替のコンポーネントである第2のコンポーネントとして設定し、
    前記第2のコンテナを前記コンポーネントの中の第2のコンポーネントの実行環境として、前記第2のコンポーネントを識別する第2の識別子と、前記第2のコンテナと、の前記対応関係である第2の対応関係を生成し、
    前記第2のコンポーネントの使用が開始された際に、前記第1の対応関係における前記第1の識別子を前記第2の識別子に、前記第2の対応関係における前記第2の識別子を前記第1の識別子に、それぞれ変更し、
    前記第2のコンポーネントの開始より前に受信した前記第1のコンポーネントに対する処理要求の実行が完了したことを契機に、前記第1のコンポーネントを終了し、前記第1のコンテナを前記コンポーネントソフトウェア運用基盤から削除し、前記第1の対応関係を削除し、
    前記処理要求実行部は、
    前記第1のコンポーネントに対する第1の処理要求を受信すると、前記第1の識別子に基づいて前記第1の対応関係を参照して、前記第1の識別子に対応付けられた前記第1のコンテナにおいて、前記第1のコンポーネントを用いて前記第1の処理要求を実行し、
    予め設定された前記第1のコンポーネントの入れ替えの環境が整った場合、または他のソフトウェアやユーザからの入れ替え指示を受信した場合に、前記第2のコンテナにおいて前記第2のコンポーネントの使用を開始し、
    前記第2のコンポーネントの使用開始より前に受信済みの前記第1のコンポーネントに対する処理要求を前記第1のコンポーネントを用いて実行し、
    前記第2のコンポーネントの開始以降に前記第1の処理要求を受信した場合は、前記第1の識別子に基づいて前記変更後の前記第2の対応関係を参照して、前記第1の識別子に対応付けられた前記第2のコンテナにおいて、前記第2のコンテナを実行環境とする前記第2のコンポーネントを用いて前記第1の処理要求を実行する、こと、
    を特徴とするコンポーネントソフトウェア運用基盤。
  5. 前記管理部は、
    前記第2のコンポーネントの起動を、あらかじめ運用の開始前に行っておくこと、を特徴とする請求項4記載のコンポーネントソフトウェア運用基盤。
  6. 前記管理部は、
    前記第2のコンポーネントを起動する際は、前記第1のコンポーネントの他に前記第1のコンポーネントと同一のコンポーネントを重複して、前記第2のコンポーネントとして起動することを特徴とする請求項4記載のコンポーネントソフトウェア運用基盤。
JP2005158299A 2005-05-31 2005-05-31 コンポーネントソフトウェアの運用方法および運用基盤 Expired - Fee Related JP4876438B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005158299A JP4876438B2 (ja) 2005-05-31 2005-05-31 コンポーネントソフトウェアの運用方法および運用基盤
US11/288,265 US8782666B2 (en) 2005-05-31 2005-11-29 Methods and platforms for highly available execution of component software

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005158299A JP4876438B2 (ja) 2005-05-31 2005-05-31 コンポーネントソフトウェアの運用方法および運用基盤

Publications (2)

Publication Number Publication Date
JP2006338069A JP2006338069A (ja) 2006-12-14
JP4876438B2 true JP4876438B2 (ja) 2012-02-15

Family

ID=37558603

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005158299A Expired - Fee Related JP4876438B2 (ja) 2005-05-31 2005-05-31 コンポーネントソフトウェアの運用方法および運用基盤

Country Status (2)

Country Link
US (1) US8782666B2 (ja)
JP (1) JP4876438B2 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225310B1 (en) 2006-03-30 2012-07-17 Emc Corporation Automatic detection and redistribution of content management code
JP5052955B2 (ja) * 2007-05-09 2012-10-17 株式会社日立製作所 アプリケーションの高可用運用方法、オンラインバージョン変更方法及び計算機システム
JP2008310628A (ja) * 2007-06-15 2008-12-25 Toppan Printing Co Ltd 障害監視装置
KR101313692B1 (ko) * 2009-12-18 2013-10-02 한국전자통신연구원 로봇용 소프트웨어 컴포넌트를 실행하는데 있어서 고장 감내 방법 및 장치
TW201126335A (en) * 2010-01-26 2011-08-01 Chi Mei Comm Systems Inc System and method for detecting components
US20120239589A1 (en) * 2011-03-14 2012-09-20 Oracle International Corporation System and method for maintaining a business catalog
JP5799706B2 (ja) * 2011-09-26 2015-10-28 富士通株式会社 検索要求処理装置
US10157110B2 (en) 2012-09-24 2018-12-18 Nec Corporation Distributed system, server computer, distributed management server, and failure prevention method
JP6019995B2 (ja) 2012-09-24 2016-11-02 日本電気株式会社 分散システム、サーバ計算機、及び障害発生防止方法
JP6387747B2 (ja) * 2013-09-27 2018-09-12 日本電気株式会社 情報処理装置、障害回避方法およびコンピュータプログラム
US9207966B2 (en) * 2013-12-19 2015-12-08 Red Hat, Inc. Method and system for providing a high-availability application
CN106203460A (zh) 2015-05-05 2016-12-07 杜比实验室特许公司 训练信号处理模型以用于信号处理系统中的部件替换
US9871940B2 (en) 2015-08-19 2018-01-16 Ricoh Company, Ltd. Information processing system, information processing apparatus, and method for processing information
IL249816B (en) * 2016-12-28 2019-03-31 Gross Amit System and methods for diagnosing and repairing a smart mobile device by neutralization
CN112840321A (zh) * 2018-12-03 2021-05-25 易享信息技术有限公司 用于自动化操作管理的应用程序编程接口
JP7171458B2 (ja) * 2019-01-25 2022-11-15 エヌ・ティ・ティ・アドバンステクノロジ株式会社 シナリオ実行システム、管理装置、シナリオ実行管理方法及びプログラム
JP2021033469A (ja) * 2019-08-20 2021-03-01 ファナック株式会社 情報処理装置及びプログラム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3291931B2 (ja) 1994-08-31 2002-06-17 日本電信電話株式会社 サービス障害復旧方法
JP2639370B2 (ja) * 1994-12-29 1997-08-13 日本電気株式会社 プログラムの動的置換方式
US5920725A (en) * 1997-07-02 1999-07-06 Adaptivity Inc. Run-time object-synthesis and transparent client/server updating of distributed objects using a meta server of all object descriptors
US6581088B1 (en) * 1998-11-05 2003-06-17 Beas Systems, Inc. Smart stub or enterprise javaTM bean in a distributed processing system
US20030208641A1 (en) * 1999-03-09 2003-11-06 Wesemann Darren L. Software components as virtual processors
JP2001290637A (ja) * 2000-04-05 2001-10-19 Nec Corp コンポーネントの動的置換装置及びコンピュータ読み取り可能な記憶媒体
JP2002082926A (ja) * 2000-09-06 2002-03-22 Nippon Telegr & Teleph Corp <Ntt> 分散アプリケーション試験・運用管理システム
US20020087612A1 (en) * 2000-12-28 2002-07-04 Harper Richard Edwin System and method for reliability-based load balancing and dispatching using software rejuvenation
US7266816B1 (en) * 2001-04-30 2007-09-04 Sun Microsystems, Inc. Method and apparatus for upgrading managed application state for a java based application
US7246350B2 (en) * 2002-01-07 2007-07-17 Intel Corporation Dynamic composition and maintenance of applications
JP4392490B2 (ja) * 2002-03-05 2010-01-06 独立行政法人産業技術総合研究所 コンポーネントバスシステム及びコンポーネントバス用プログラム
US7363612B2 (en) * 2002-03-06 2008-04-22 Sun Microsystems, Inc. Application programs with dynamic components
US7302609B2 (en) * 2003-03-12 2007-11-27 Vladimir Matena Method and apparatus for executing applications on a distributed computer system
US7526771B2 (en) * 2003-11-12 2009-04-28 Ntt Docomo, Inc. Method and apparatus for configuring an application while the application is running
US7300123B2 (en) * 2003-11-24 2007-11-27 International Business Machines Corporation Method and apparatus for a container managed persistent entity bean support architecture

Also Published As

Publication number Publication date
JP2006338069A (ja) 2006-12-14
US20070006212A1 (en) 2007-01-04
US8782666B2 (en) 2014-07-15

Similar Documents

Publication Publication Date Title
JP4876438B2 (ja) コンポーネントソフトウェアの運用方法および運用基盤
US8762929B2 (en) System and method for exclusion of inconsistent objects from lifecycle management processes
JP5052955B2 (ja) アプリケーションの高可用運用方法、オンラインバージョン変更方法及び計算機システム
KR101970839B1 (ko) 서비스의 2차 위치에서의 작업의 재생 기법
US20020161840A1 (en) Adapter for interfacing with a workflow engine
US7698391B2 (en) Performing a provisioning operation associated with a software application on a subset of the nodes on which the software application is to operate
US8756461B1 (en) Dynamic tracing of thread execution within an operating system kernel
US20070234295A1 (en) Method for executing an application in a virtual container forming a virtualized environment session
US7526734B2 (en) User interfaces for developing enterprise applications
US20040088397A1 (en) System and method for management of software applications
EP1597654A2 (en) System and method and api for progressively installing a software application
CN111930355A (zh) 一种web后端开发框架及其构建方法
US20060101059A1 (en) Employment method, an employment management system and an employment program for business system
US11874758B2 (en) High-performance mechanism for generating logging information within application thread in respect of a logging event of a computer process
JP6993577B2 (ja) インタフェース変換プログラム、インタフェース変換方法および情報処理装置
CN114489847A (zh) 进程管理器的管控方法、系统、设备及存储介质
JP5052472B2 (ja) プログラムの設定情報切替システム及び切替方法
JP5403447B2 (ja) 仮想マシン管理装置、仮想マシン管理システム、仮想マシン管理方法、及びプログラム
CN108228266A (zh) 一种Android插件框架下不同插件间启动Fragment组件的方法和装置
JP2004126863A (ja) オブジェクト管理装置とその方法、およびプログラム
US20030212919A1 (en) Updateable event forwarding discriminator incorporating a runtime modifiable filter
JP2012212462A (ja) アプリケーションの高可用運用方法、オンラインバージョン変更方法及び計算機システム
JP5784792B1 (ja) 通信機器及びプログラム
WO2011117954A1 (ja) 仮想マシン管理装置、仮想マシン管理方法、及びプログラム
JP5504876B2 (ja) プロセス異常復旧装置及びプロセス異常復旧方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080121

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110419

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110615

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110705

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110901

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111101

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111114

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141209

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees