JP3864251B2 - メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム - Google Patents

メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム Download PDF

Info

Publication number
JP3864251B2
JP3864251B2 JP2002355641A JP2002355641A JP3864251B2 JP 3864251 B2 JP3864251 B2 JP 3864251B2 JP 2002355641 A JP2002355641 A JP 2002355641A JP 2002355641 A JP2002355641 A JP 2002355641A JP 3864251 B2 JP3864251 B2 JP 3864251B2
Authority
JP
Japan
Prior art keywords
agent
message
processing
request source
priority
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
JP2002355641A
Other languages
English (en)
Other versions
JP2004192047A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2002355641A priority Critical patent/JP3864251B2/ja
Priority to US10/729,057 priority patent/US7478130B2/en
Publication of JP2004192047A publication Critical patent/JP2004192047A/ja
Application granted granted Critical
Publication of JP3864251B2 publication Critical patent/JP3864251B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/04Network management architectures or arrangements
    • H04L41/046Network management architectures or arrangements comprising network management agents or mobile agents therefor
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • H04L41/0604Management of faults, events, alarms or notifications using filtering, e.g. reduction of information by using priority, element types, position or time
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/546Xcast
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/329Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Computer And Data Communications (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、多数、例えば数十万〜数百万又はそれ以上の処理要求元に適用するメッセージの処理を、エージェントを使って処理するメッセージ処理装置、メッセージ処理方法及びメッセージ処理プログラムに関し、詳しくは処理時間を短縮したメッセージ処理装置、メッセージ処理方法及びメッセージ処理プログラムに関する。
【0002】
【従来の技術】
特許文献1では、エージェント・サーバが開示されている。該エージェント・サーバでは、負荷の増大を抑制するために、活動エージェントの個数を制限するとともに、エージェントを使って、各利用者へ所定のメッセージを通知することを開示する。
【0003】
本出願人は非特許文献1に係るメッセージ処理サーバを出荷している。
【0004】
【特許文献1】
特開平11−327908号公報
【非特許文献1】
Agent Framework-Java(本出願人に係る製品の名称。http://www.alphaworks.ibm.com/aw_nsf/techs/caribbean閲覧。該web頁では、該製品が出願時点においてコード・ネームcaribbeanとして紹介されている。)
【0005】
【発明が解決しようとする課題】
メッセージ処理サーバの具体例に、所定の起因情報の受付けに対して会員へメール通知を行うメール配信サーバがある。このようなメール配信サーバにおける具体的ニーズについて考える。例えば、会員としての会員が自分の希望する通知(例:IBMの株価がP円以上に上がったことの通知。)の通知条件をサブスクライブ・テーブルに予め登録しておき、メッセージ処理サーバが、クライアント(例:所定の証券会社に設置されて企業の株価をオンラインで受け取っているコンピュータ)から株価変動等のイベントを受けると、該イベントを起因とするメッセージの会員をサブスクライブ・テーブルから検索により特定し、特定された各会員へ通知するニーズが予想される。
【0006】
特許文献1のエージェント・サーバ及び非特許文献1のメッセージ処理サーバは、各通知希望者の通知条件を予めサブスクライブ・テーブルに登録しておくこと、及びイベントに対してサブスクライブ・テーブルから今回の通知対象の会員を検索して、会員へ通知メールを配信すると言う処理は行われていない。
【0007】
メール配信サーバでは、次のニーズも予想される。すなわち、異なるイベントが時間的に接近して生じ、異なるイベントに対してそれぞれのイベントに係る各通知メールを同一の会員へ配信する場合に、各通知メールに優先度を設定して、優先度順にメッセージへ送りたいことがある。例えば、典型的な通知希望者は、株価情報に係る通知メールは、他の内容の通知メール、例えば所定分野の新商品案内の通知メールよりも早く受け取ることを希望する。サーバに実装される通知メール用メッセージ処理アプリケーションは、全体の処理時間短縮のために、シングル・スレッドではなく、マルチ・スレッドを利用するので、各イベントに対してスレッドを割当て、各会員に係るメッセージ・キューにメッセージを挿入することにすると、会員総数の多いメッセージが各会員用のメッセージ・キューに挿入されるのに要する時間が、会員総数の少ないメッセージが各会員用のメッセージ・キューに挿入されるのに要する時間より長くなり、優先度の高い通知メールが優先度の低い通知メールより会員に遅れて届くことがあり得る。
【0008】
また、会員の格付けとしてゴールド会員と一般会員とが含まれている場合に、同一情報に係る通知メールはゴールド会員に一般会員より先に、すなわちゴールド会員の優先度を一般会員のそれよりも高くするのが営業政策上、望まれる。また、一方では、格付けの高い会員への優先度を高くしつつ、他方では、格付けの低い会員に対しても、急ぎの、すなわち内容的に優先度の高い通知メールについては、格付けの高い会員への急がない通知メールよりも早く(優先して)配信したいニーズも予想される。
【0009】
別の予想ニーズとして、同一の会員へ配布しかつ内容の異なる複数の通知メールが存在するときは、それら通知メールは、それらの起因になる情報の受付順に配布しなければならないことがある。例えば、IBMの株価がP1になり、その数秒後にP2(P2<P1)になった場合には、それら両方のイベントを起因とする通知メールについて通知希望を出している通知希望者は、P1に係る通知メールを先に受けてから、P2に係る通知メールを受けないと、株価の値下がりにもかかわらず、株価の値上がりと誤解する。マルチ・スレッド型メッセージ処理アプリケーションを開発した場合、該アプリケーションでは、複数のスレッドが並列に処理を行うことになるので、各スレッドの処理量の多寡によっては、後のイベントに割当てられたスレッドが、先のイベントに割当てられたスレッドより先に処理を終了してしまい、通知希望者には、時間的に後のイベントに係る通知メールが、時間的に前のイベントに係る通知メールより先に届いてしまうことがあり得る。
【0010】
本発明の目的は、エージェント起動原因イベントに対して対応の処理要求元に適用するメッセージについて、対応のエージェントに所定の処理を行わせるメッセージ処理装置、メッセージ処理方法及びメッセージ処理プログラムにおいて、作業時間の短縮を図ることである。
【0011】
本発明の他の目的は、永続記憶装置からキャッシュ・メモリへのエージェントの読込みを抑制して、全体の処理時間の短縮を図りつつ、優先度に基づく処理を達成するメッセージ処理装置、メッセージ処理方法及びメッセージ処理プログラムを提供することである。
【0012】
本発明の別の目的は、マルチ・スレッドによる処理を実現しつつ、各処理要求元に適用されるメッセージを、それらの起因となったエージェント起動原因イベントの受付け順に処理することを保障するメッセージ処理装置、メッセージ処理方法及びメッセージ処理プログラムを提供することである。
【0013】
【課題を解決するための手段】
本発明のメッセージ処理装置は次のものを有する。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成手段、
各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となる複数個のエージェント、
前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込み手段、
メッセージが挿入されているメッセージ・キューに係るエージェントにその作動を指示するエージェント用指示手段、及び
前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込み手段にその処理の繰返しを指示する繰返し指示手段。
【0014】
エージェントを作動させるためには、エージェントがキャッシュ・メモリに存在する必要がある。処理要求元、したがってエージェントは、例えば、数十万から数百万、又はそれ以上に達することがあり、全部のエージェントをキャッシュ・メモリに常時、存在させるキャッシュ・メモリの容量上、困難である。本発明では、エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を処理要求元検索情報に基づいて作成し、該リスト情報に未選択の処理要求元として残っている全部(未選択の処理要求元が少ないとき)又は幾つかの(未選択の処理要求元が多いとき)を選択し、それら選択した処理要求元に対応付けられているメッセージ・キューにメッセージを挿入する。挿入・読込み手段は、該挿入作業に並行して又は挿入作業の前若しくは後に、それら処理要求元に対応付けられているエージェントを永続記憶装置からキャッシュ・メモリへ読込む。こうして、メッセージが挿入されているメッセージ・キューについては、該メッセージ・キューに係るエージェントは例えばスケジューラ等のエージェント用指示手段からの指示により作動開始することになるが、作動対象のエージェントはキャッシュ・メモリにおける存在を保証されるので、永続記憶装置からキャッシュ・メモリへのエージェントの読込みが抑制され、作業時間が短縮される。
【0015】
エージェント起動原因イベントとしては、例えば株価の変更、電子モール・システムにおける商品データベースの価格変更等がある。各エージェントは、例えばIBMの株価に係るエージェント起動原因イベントと言うように、起動原因が同種のものであるとは限定されない。例えば、同一のエージェントが、パソコンの価格に係るデータベースの更新としてのエージェント起動原因イベントと、プリンタの価格に係るデータベースの更新としてエージェント起動原因イベントとを起動原因とするように、複数主のエージェント起動原因イベントを起動原因とすることもあり得る。本発明のメッセージ処理装置は、メール配信処理装置に限定されない。同一のエージェントは、或るエージェント起動原因イベント(該エージェント起動原因イベントをエージェント起動原因イベントA1と呼ぶことにする。)に対しては、処理要求元へメールを通知することがあっても、別の或るエージェント起動原因イベント(該エージェント起動原因イベントをエージェント起動原因イベントA2と呼ぶことにする。)に対しては処理要求元へメールを通知しないこともある。また、エージェント起動原因イベントは、同一のエージェント起動原因イベント(該エージェント起動原因イベントをエージェント起動原因イベントA3と呼ぶことにする。)に対して、エージェント起動原因イベントA3が発生する前に起動原因となった1個又は複数のエージェント起動原因イベントの相違及びそれらの組み合わせの相違により、異なる処理結果、例えば対応の処理要求元へメールを通知したり、通知しなかったりすることもある。なお、本発明のメッセージ処理装置を、メール配信装置以外に適用したものは、後述の実施例4において詳述する。
【0016】
処理要求元は、本発明のメッセージ処理装置、メッセージ処理方法及びメッセージ処理プログラムに対して外部から処理を要求するものである。処理要求元の下位概念には、例えば会員(有料会員及び無料会員を含む。また、会員には、人だけでなく、会社等の組織も会員の概念に含む。)、処理依頼元、アプリケーション処理要求元、処理委託元、サーバ処理要求元がある。処理要求元には、ワーク・フロー処理から処理要求を出すワーク・フロー処理部分も含まれる。これについては、後述の実施例5において詳述する。
【0017】
エージェントは、典型的には、メッセージ・キュー内のメッセージを引数として所定の処理を実施するメッセージ・ハンドラと、該メッセージ・ハンドラが使用するデータとを含む。例えば、エージェント起動原因イベントAを生成起因とするメッセージをBとすると、メッセージを適用される全処理要求元に対応付けられている各メッセージ・キューには、すべてメッセージBが挿入されるが、エージェント内の処理結果はエージェント内のデータによってメッセージBに対する処理結果が処理要求元ごとに異なることがある。例えば、メッセージ配信処理装置では、企業1の株価が$90から$100になったとき、処理要求元1,2は、$100以上になったとの通知メールを受け、処理要求元3は、$95以上になったとの通知メールを受ける。
【0018】
本発明のメッセージ処理装置は次のものを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成手段、
各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となる複数個のエージェント、
第1のメッセージ・キュー用処理機構、
第2のメッセージ・キュー用処理機構、
第1及び第2のメッセージ・キュー用処理機構のどちらかを選択する選択手段、及び
メッセージが挿入されているメッセージ・キューに係るエージェントについて該エージェントがキャッシュ・メモリに有れば該エージェントにその作動を直ちに指示しまた該エージェントがキャッシュ・メモリに無ければ該エージェントを前記永続記憶装置から前記キャッシュ・メモリへ読込んでから該エージェントにその作動を指示するエージェント用指示手段。
さらに、第1のメッセージ・キュー用処理機構は、前記リスト情報に含まれる全部の処理要求元に係るメッセージ・キューに前記メッセージを挿入する挿入手段、を有している。また、第2のメッセージ・キュー用処理機構は、前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込み手段、及び前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込み手段にその処理の繰返しを指示する繰返し指示手段、を有している、
【0019】
各エージェント起動原因イベントに係る処理要求元の総数は各エージェント起動原因イベントごとに異なる。非常に多い場合もあれば、きわめて少ない場合もある。また、各処理要求元に対応付けられている各エージェントがキャッシュ・メモリにおいてヒットする率は、状況によって異なる。類似するエージェント起動原因イベントが連続的に受付けられるときは、各エージェント起動原因イベントに係る処理要求元が一致する可能性が高まるので、各エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に対応付けられるエージェントについてのキャッシュ・メモリにおけるヒット率が上昇する。そのような場合は、時として、(a)リスト情報に含まれる処理要求元の中から未選択の処理要求元を選択して、それら選択された処理要求元に対応付けられるメッセージ・キューの全部にメッセージを挿入し、かつそれら全部のメッセージ・キューに対応付けられるエージェントをキャッシュ・メモリへ読込むよりは、(b)作動させようとするエージェントがキャッシュ・メモリに有るときは該エージェントを直ちに、また、無いときは、該エージェントを永続記憶装置からキャッシュ・メモリへ読込んでから、作動させた方が作業時間が短縮されることもあり得る。本発明では、(a)と(b)とを選択自在にする。(a)と(b)との切替は、例えば、エージェント起動原因イベントごと、曜日ごと、季節ごと、及び時間帯ごとに実施できる。
【0020】
本発明のメッセージ処理装置は次のものを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元を前記処理要求元検索情報に基づいて決定する処理要求元決定手段、各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているとき作動可能となる複数個のエージェント、
各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する少なくとも1個のサブ処理優先度決定手段、
前記サブ処理優先度決定手段の総個数が2以上であるときは各サブ処理優先度決定手段が各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、前記サブ処理優先度決定手段の総個数が1であるときは該唯一のサブ処理優先度決定手段が各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する複合処理優先度決定手段、
各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント同士では、キャッシュ・メモリに存在する方のエージェントを、存在しない方のエージェントより優先してその作動を指示するエージェント用指示手段。
【0021】
処理要求元処理装置全体の処理時間を抑制しつつ、メッセージについて処理優先度を設定し、該処理優先度に基づいたメッセージの処理を行うニーズが存在する。処理優先度は、また、単一の価値基準により決定される場合もあるし、複数個の価値基準の処理優先度を複合して決定される場合もある。本発明では、複合処理優先度に基づき処理が行われるとともに、メッセージ・キュー間で、最高複合処理優先度が同一のメッセージが含まれる場合には、該メッセージ・キューに対応付けられるエージェントがキャッシュ・メモリに存在する方のメッセージ・キューを、存在しない方のメッセージ・キューより優先して、処理する。こうして、今回のエージェント起動原因イベントに対して作動対象となっているエージェントが、キャッシュ・メモリに存在していたときに作動時期が来ずに、作動を先延ばしされて、該エージェントがキャッシュ・メモリに存在しなくなってから、配布順番が来て、永続記憶装置からキャッシュ・メモリへ該エージェントを読込まなければならない事態が排除される。
【0022】
本発明のメッセージ処理装置は次のものを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記受付手段が受付けたエージェント起動原因イベントについての受付順番情報を管理する受付順番情報管理手段、
各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となっている複数個のエージェント、
相互に並列動作可能である複数個のスレッドであって各スレッドはエージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づいて検出しかつ各検出処理要求元に係るメッセージ・キューに前記メッセージを挿入する複数個のスレッド、
各スレッドにそれが処理を担当するエージェント起動原因イベントを割当てる割当て手段、
前記受付手段が受付けた各エージェント起動原因イベントについてのスレッドによる処理の進行状態情報を管理する進行状態情報管理手段、
処理進行状態情報がスレッド処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に前記受付手段において受付けたエージェント起動原因イベントの中にまだスレッド処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する判定手段、及び前記判定手段が「有る」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を抑制するエージェント制御手段。
【0023】
エージェント起動原因イベントは次々に受付けられ、また、各エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の個数は膨大である。したがって、各エージェント起動原因イベントに対して、該エージェント起動原因イベントに係る処理要求元のメッセージ・キューへ、該エージェント起動原因イベントを生成起因とするメッセージを挿入する処理は、別々のスレッドに実施させる、すなわち複数のスレッドにより処理することが、作業時間短縮上、好ましい。しかし、マルチ・スレッドを採用する場合、各エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の総数によっては、受付順番が後のエージェント起動原因イベントに係る処理を担当したスレッドが、受付順番が前のエージェント起動原因イベントに係る処理を担当したスレッドより先に処理を終了することがある。本発明では、メッセージ・キューにおけるメッセージの挿入処理において、受付順番が後のエージェント起動原因イベントに係る処理が終了しても、受付順番が前のエージェント起動原因イベントに係る処理が終了していなければ、後のエージェント起動原因イベントを生成起因とするメッセージについての処理要求元へのエージェントによる処理を抑制する。
【0024】
本発明のメッセージ処理方法は次のステップを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能であるエージェント設定ステップ、
前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込みステップ、
メッセージが挿入されているメッセージ・キューに係るエージェントにその作動を指示するエージェント用指示ステップ、及び
前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込みステップの繰返しを指示する繰返し指示ステップ。
【0025】
本発明の別のメッセージ処理方法は次のステップを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能であるエージェント設定ステップ、
第1のメッセージ・キュー用処理ステップ、
第2のメッセージ・キュー用処理ステップ、
第1及び第2のメッセージ・キュー用処理ステップのどちらかを選択する選択ステップ、及び
メッセージが挿入されているメッセージ・キューに係るエージェントについて該エージェントがキャッシュ・メモリに有れば該エージェントにその作動を直ちに指示しまた該エージェントがキャッシュ・メモリに無ければ該エージェントを前記永続記憶装置から前記キャッシュ・メモリへ読込んでから該エージェントにその作動を指示するエージェント用指示ステップ。
さらに、第1のメッセージ・キュー用処理ステップは、前記リスト情報に含まれる全部の処理要求元に係るメッセージ・キューに前記メッセージを挿入する挿入ステップ、を有している。また、第2のメッセージ・キュー用処理ステップは、前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込みステップ、及び前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込みステップの繰返しを指示する繰返し指示ステップ、を有している、
【0026】
本発明の別のメッセージ処理方法は次のステップを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元を前記処理要求元検索情報に基づいて決定する処理要求元決定ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され各エージェントは永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能でありかつ各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となっているように設定するエージェント設定ステップ、
各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する少なくとも1個のサブ処理優先度決定ステップ、
前記サブ処理優先度決定ステップの総個数が2以上であるときは各サブ処理優先度決定ステップにおいて各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、前記サブ処理優先度決定ステップの総個数が1であるときは該唯一のサブ処理優先度決定ステップにおいて各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する複合処理優先度決定ステップ、及び
各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント同士では、キャッシュ・メモリに存在する方のエージェントを、存在しない方のエージェントより優先してその作動を指示するエージェント用指示ステップ。
【0027】
本発明の別のメッセージ処理方法は次のステップを有している。
エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記受付ステップにおいて受付けたエージェント起動原因イベントについての受付順番情報を管理する受付順番情報管理ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは、各処理要求元に対応付けられており、永続記憶装置に記憶され、永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり、かつ各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となっているように設定するエージェント設定ステップ、
複数個のスレッドを設定するスレッド設定ステップであって各スレッドは、相互に並列動作可能であり、エージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づいて検出し、かつ各検出処理要求元に係るメッセージ・キューに前記メッセージを挿入するスレッド設定ステップ、
各スレッドにそれが処理を担当するエージェント起動原因イベントを割当てる割当てステップ、
前記受付ステップにおいて受付けた各エージェント起動原因イベントについての各スレッドによる処理の進行状態情報を管理する進行状態情報管理ステップ、処理進行状態情報がスレッド処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に前記受付ステップにおいて受付けたエージェント起動原因イベントの中にまだスレッド処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する判定ステップ、及び
前記判定ステップにおいて「有る」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を抑制するエージェント制御ステップ。
【0028】
本発明のメッセージ処理プログラムは、前記各メッセージ処理処理方法における各ステップをコンピュータに実行させる。
【0029】
【発明の実施の形態】
本発明の実施の形態について説明する。なお、発明の実施の形態及びその後に続いて説明する実施例は、本発明をそれらに限定するものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【0030】
図1はメッセージ処理システム10の概略図である。ネットワーク12は典型的にはインターネットである。本発明に従うアプリケーションを実装するメッセージ処理サーバ14、複数個の情報源クライアント15、及び例えば数十万〜数百万又はそれ以上の処理要求元コンピュータ16は、ネットワーク12を介してメッセージ、データ、及び各種情報を相互に送受自在になっている。なお、ワークフロー内の所定部分が処理要求元になる場合、1個のコンピュータ16が相互に識別自在の複数個の処理要求元になることがあり得る。情報源クライアント15は、例えば、エージェント起動原因イベントとしての株価情報をメッセージ処理サーバ14へ送るために、証券会社等に設置される。処理要求元コンピュータ16は、ネットワーク12へ直接接続されていることもあるし、ルータを介してネットワーク12へ接続されていることもある。
【0031】
図2はメッセージ処理装置20の構成図である。メッセージ処理装置20において、処理要求元検索情報管理手段22は、エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報21を管理する。処理要求元検索情報21は、ハード・ディスク装置や磁気テープ装置等の永続記憶装置に記憶される。受付手段27はエージェント起動原因イベントを受付ける。リスト情報作成手段28は、エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を処理要求元検索情報21に基づいて作成する。複数個のエージェント23は、各処理要求元に対応付けられており、永続記憶装置24に記憶され、永続記憶装置24からプログラム実行領域としてのキャッシュ・メモリ25へ読込み可能及びキャッシュ・メモリ25から破棄可能となっている。各エージェント23は、キャッシュ・メモリ25に存在しているときのみ、作動して、該エージェント23に対応のメッセージ・キュー内のメッセージについての処理を実施可能となる。挿入・読込み手段38は、リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し、該挿入・読込み対象処理要求元に係るメッセージ・キュー39に、メッセージを挿入するとともに、挿入・読込み対象処理要求元に係るエージェント23を永続記憶装置24からキャッシュ・メモリ25へ読込む。エージェント用指示手段31は、メッセージが挿入されているメッセージ・キュー39に係るエージェント23にその作動を指示する。繰返し指示手段32は、リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェント23の処理終了を待って挿入・読込み手段38にその処理の繰返しを指示する。
【0032】
エージェント23が、永続記憶装置24からキャッシュ・メモリ25へ読込まれることを「スワップ・インSi」、及び永続記憶装置24において上書き等で消去することを「スワップ・アウトSo」と適宜、呼ぶことにする。スワップ・インSi及びスワップ・アウトSoは、1個のエージェント23を単位にして可能である。なお、スワップ・インSi及びスワップ・アウトSoは、図2及び図4等では、幅太の矢印で示され、図5では、幅太の矢印と共に、幅細の矢印でも示されている。幅太の矢印によるスワップ・インSi及びスワップ・アウトSoは、複数のエージェント23をまとめてスワップ・インSi及びスワップ・アウトSoすることを表し、幅細の矢印によるスワップ・インSi及びスワップ・アウトSoは1個のエージェント23をスワップ・インSi及びスワップ・アウトSoすることを表している。
【0033】
メッセージ処理装置20は例えばメール配信装置として使用される場合には、各エージェント23は、該エージェント23に対応付けられているメッセージ・キュー39におけるメッセージに対して、該エージェント23に対応付けられた処理要求元への通知を実施する。
【0034】
なお、メール配信装置において、エージェントの処理終了とは、典型的には、エージェントが、その処理要求元のメール・アドレスを管理する処理要求元側メール・サーバへの配布終了である。しかし、処理要求元のメール・アドレスが、過去は存在していたものの、現在では、処理要求元側メール・サーバから消失していたり、処理要求元側サーバの一時的なトラブル等により配布でなかったり等の配布上の支障がある場合には、エージェントは、一時的又は永続的に処理が困難になることがある。このような場合には、エージェントは直ちに又は所定条件が満たされるや、処理を終了し、この終了を「エージェントの処理終了」とすることができる。所定条件とは、例えば一定時間が経っても配布上の支障が解決されないこととか、相手側メール・サーバへの配布を所定回数、試してみたが、失敗に終わったこととかである。
【0035】
図3はエージェント23の構成図である。エージェント23は、メッセージを引数として渡されて所定の処理を実施するメッセージ・ハンドラ34と、該メッセージ・ハンドラ34がその処理の際に使用するデータ35とを含む。
【0036】
図4はメッセージ処理装置42の構成図である。メッセージ処理装置42において、図2のメッセージ処理装置20の要素と同一のものは同符号で指示して、説明は省略する。選択手段43は、第1及び第2のメッセージ・キュー用処理機構45のどちらかを選択する。エージェント用指示手段46は、メッセージが挿入されているメッセージ・キュー39に係るエージェント23について、該エージェント23がキャッシュ・メモリ25に有れば、該エージェント23にその作動を直ちに指示し、また、該エージェント23がキャッシュ・メモリ25に無ければ、該エージェント23を永続記憶装置24からキャッシュ・メモリ25へ読込んでから、該エージェント23にその作動を指示する。
【0037】
図5及び図6はそれぞれ第1のメッセージ・キュー用処理機構44及び第2のメッセージ・キュー用処理機構45の詳細図である。第1のメッセージ・キュー用処理機構44は、リスト情報に含まれる全部の処理要求元に係るメッセージ・キュー39にメッセージを挿入する。第2のメッセージ・キュー用処理機構45は、挿入・読込み手段38及び繰返し指示手段32を含む。第2のメッセージ・キュー用処理機構45の挿入・読込み手段38及び繰返し指示手段32は図2のメッセージ処理装置20の挿入・読込み手段38及び繰返し指示手段32と同一であり、説明を省略する。
【0038】
図4に戻って、選択手段43における選択はオペレータの指示に基づく。又は、選択手段43における選択は、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の予測数、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に係るエージェント23についてのキャッシュ・メモリ25における予測ヒット率、選択手段43が第1のメッセージ・キュー用処理機構44を選択している場合に受付手段27が情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェント23のメッセージ・キュー39に挿入するまでの予測作業時間、選択手段43が第2のメッセージ・キュー用処理機構45を選択している場合に受付手段27が情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェント23のメッセージ・キュー39に挿入するまでの予測作業時間、キャッシュ・メモリ25内のエージェント23についてその使用を決定してから該決定したエージェント23が処理完了するまでの予測時間、及び/又はキャッシュ・メモリ25外のエージェント23についてその使用を決定してから該決定したエージェント23が処理完了するまでの予測時間に基づく。
【0039】
図7はメッセージ処理装置52の構成図である。メッセージ処理装置52における処理要求元検索情報21、処理要求元検索情報管理手段22、エージェント23、永続記憶装置24、キャッシュ・メモリ25、受付手段27及びメッセージ・キュー39は、前述のメッセージ処理装置20におけるそれらと同一であり、説明は省略する。処理要求元決定手段53は、エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元を処理要求元検索情報21に基づいて決定する。少なくとも1個のサブ処理優先度決定手段54a.54b.・・・は、各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する。複合処理優先度決定手段55は、サブ処理優先度決定手段54a.54b.・・・の総個数が2以上であるときは各サブ処理優先度決定手段54a.54b.・・・が各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定する。複合処理優先度決定手段55は、また、サブ処理優先度決定手段の総個数が1であるときは該唯一のサブ処理優先度決定手段(例えば54a)が各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する。エージェント用指示手段56は、各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント23同士では、キャッシュ・メモリ25に存在する方のエージェント23を、存在しない方のエージェント23より優先してその作動を指示する。
【0040】
価値基準には、メッセージの内容に係るもの及びメッセージが適用される処理要求元に係るものがある。メッセージの内容に係る所定の価値基準には、メッセージの処理の緊急性に係る価値基準が含まれる。メッセージが適用される処理要求元に係る価値基準には、処理要求元の格付けに係る価値基準が含まれる。処理要求元として、例えばゴールド処理要求元、シルバー処理要求元及びブロンズ処理要求元が存在する場合、処理要求元の格付けはゴールド処理要求元、シルバー処理要求元及びブロンズ処理要求元の順番になる。
【0041】
エージェント用指示手段46により処理を一旦、開始したエージェント23は、該エージェント23に係るメッセージ・キューが保持するメッセージが複数個あるとき、それら全部のメッセージについて、又は複合処理優先度が上位から所定番目までのメッセージについて連続処理する。
【0042】
図8は図7のサブ処理優先度決定手段54a,54b,・・・及び複合処理優先度決定手段55を構成要素として含むエージェント管理手段59の全体構成図である。エージェント管理手段59は、サブ処理優先度決定手段54a,54b,・・・及び複合処理優先度決定手段55を含む。エージェント管理手段59は、さらに、各エージェント23が永続記憶装置24に存在するか否かを検出する存在検出手段60、該存在検出手段60の判定結果及び各エージェント23の複合処理優先度に基づいてエージェント23をグループ化しグループ化情報を管理するグループ化情報管理手段61、及びグループ化情報管理手段61にグループ化情報の更新を指示する更新指示手段62を有している。エージェント用指示手段56は、エージェント管理手段59におけるグループ化情報に基づく順番でエージェント23にその作動を指示する。
【0043】
図9はメッセージ処理装置64の構成図である。メッセージ処理装置64における処理要求元検索情報21、処理要求元検索情報管理手段22、エージェント23、永続記憶装置24、キャッシュ・メモリ25、受付手段27及びメッセージ・キュー39は前述のメッセージ処理装置20におけるそれらと同一であり、説明は省略し、相違点を中心に述べる。受付順番情報管理手段65は、受付手段27が受付けたエージェント起動原因イベントについての受付順番情報を管理する。複数個のスレッド67a,67b,・・・は相互に並列動作可能である。これらスレッド67a,67b,・・・はエージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報21に基づいて検出し、かつ各検出処理要求元に係るメッセージ・キュー39にメッセージを挿入する。割当て手段66は、各スレッド67a,67b,・・・にそれが処理を担当するエージェント起動原因イベントを割当てる。進行状態情報管理手段70は、受付手段27が受付けた各エージェント起動原因イベントについてのスレッド67a,67b,・・・による処理の進行状態情報を管理する。判定手段72は、処理進行状態情報がスレッド67a,67b,・・・処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に受付手段27において受付けたエージェント起動原因イベントの中にまだスレッド67a,67b,・・・処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する。エージェント制御手段73は、判定手段72が「有る」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェント23による処理を抑制する。エージェント制御手段73は、また、判定手段72が「無い」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェント23による処理を許容する。
【0044】
判定手段72は、また、「無い」と判定したエージェント起動原因イベントに対して受付順番がその次のエージェント起動原因イベントが、「有る」との判定済みのものであるときは、判定結果を「有る」から「無い」へ変更する。図9のエージェント23は、判定手段27による判定結果が「無い」となっている複数個のエージェント起動原因イベントを生成起因とするメッセージが受付順番方向へ連続するメッセージ・キュー39についての処理を実行する場合は、それら連続する複数個のメッセージについての処理を連続的に行うように、仕組まれている。
【0045】
図10はメッセージ処理方法のフローチャートである。S100(処理要求元検索情報管理ステップ)では、エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報21を管理する。S104(受付ステップ)では、エージェント起動原因イベントを受付ける。S105(リスト情報作成ステップ)では、エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を処理要求元検索情報21に基づいて作成する。S101(エージェント設定ステップ)では、複数個のエージェント23を設定する。該設定では、各エージェント23は、各処理要求元に対応付けられており、永続記憶装置24に記憶され、永続記憶装置24からプログラム実行領域としてのキャッシュ・メモリ25へ読込み可能及びキャッシュ・メモリ25から破棄可能であり、各エージェント23はキャッシュ・メモリ25に存在しているときのみ作動して該エージェント23に対応のメッセージ・キュー内のメッセージについての処理を実施可能である。S106(挿入・読込みステップ)は、図11において口述する。S108(エージェント用指示ステップ)では、メッセージが挿入されているメッセージ・キュー39に係るエージェント23にその作動を指示する。S107(繰返し指示ステップ)では、リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェント23の処理終了を待ってS106(挿入・読込みステップ)の繰返しを指示する。
【0046】
図11は図10のフローチャートにおけるS106(挿入・読込みステップ)の詳細図である。S106はS110及びS111を含む。S110及びS111は、時間並列的に実行されてもよいし、時間直列的に実行されてもよい、時間直列的に実行される場合、S110及びS111の順番は任意である。S110では、リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し、該挿入・読込み対象処理要求元に係るメッセージ・キュー39に、メッセージを挿入する。S111では、挿入・読込み対象処理要求元に係るエージェント23を永続記憶装置24からキャッシュ・メモリ25へ読込む。
【0047】
図12は別のメッセージ処理方法のフローチャートである。S100,S101,S104及びS105は、図10のそれらと同一内容であり、それらの説明は省略する。S115(選択ステップ)では、S116(第1のメッセージ・キュー用処理ステップ)及びS117(第2のメッセージ・キュー用処理ステップ)のいずれかを選択する。S118(エージェント用指示ステップ)では、メッセージが挿入されているメッセージ・キュー39に係るエージェント23について該エージェント23がキャッシュ・メモリ25に有れば該エージェント23にその作動を直ちに指示し、また、該エージェント23がキャッシュ・メモリ25に無ければ該エージェント23を永続記憶装置24からキャッシュ・メモリ25へ読込んでから、該エージェント23にその作動を指示する。
【0048】
図13は図12のS116(第1のメッセージ・キュー用処理ステップ)の具体的な処理を示している。S116(第1のメッセージ・キュー用処理ステップ)は、リスト情報に含まれる全部の処理要求元に係るメッセージ・キュー39にメッセージを挿入するS119(挿入ステップ)を含む。
【0049】
図14は図12のS117(第2のメッセージ・キュー用処理ステップ)の具体的な処理を示している。S117はS106及びS107を含む。これらS106及びS107は、図10のS106及びS107と同一であるので、説明は省略する。
【0050】
図12に戻って、S115(選択ステップ)における選択はオペレータの指示に基づく。又は、S115(選択ステップ)における選択は、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の予測数、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に係るエージェント23についてのキャッシュ・メモリ25における予測ヒット率、S116(第1のメッセージ・キュー用処理ステップ)において処理を割当てられた場合にS104(受付ステップ)において情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェント23のメッセージ・キュー39に挿入するまでの予測作業時間、S117(第2のメッセージ・キュー用処理ステップ)において処理を割当てられた場合にS104(受付ステップ)において情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェント23のメッセージ・キュー39に挿入するまでの予測作業時間、キャッシュ・メモリ25内のエージェント23についてその使用を決定してから該決定したエージェント23が処理完了するまでの予測時間、及び/又はキャッシュ・メモリ25外のエージェント23についてその使用を決定してから該決定したエージェント23が処理完了するまでの予測時間に基づく。
【0051】
図15はさらに別のメッセージ処理方法のフローチャートである。S100、S101及びS104は、図10のそれらと同一であるので、説明は省略する。S125(処理要求元決定ステップ)では、エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元を処理要求元検索情報21に基づいて決定する。少なくとも1個のS128a,b,・・・(サブ処理優先度決定ステップ)では、各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する。S129(複合処理優先度決定ステップ)では、サブ処理優先度決定ステップの総個数が2以上であるときは各S128a,b,・・・において各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、サブ処理優先度決定ステップの総個数が1であるときは該唯一のサブ処理優先度決定ステップ(例:S128a)において各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する。S132(エージェント用指示ステップ)では、各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント23同士では、キャッシュ・メモリ25に存在する方のエージェント23を、存在しない方のエージェント23より優先してその作動を指示する。
【0052】
S128a,S128b,・・・(サブ処理優先度決定ステップ)において採用される価値基準には、メッセージの内容に係るもの及びメッセージが適用される処理要求元に係るものがある。さらに、メッセージの内容に係る所定の価値基準には、メッセージの処理の緊急性に係る価値基準が含まれる。メッセージが適用される処理要求元に係る価値基準には、処理要求元の格付けに係る価値基準が含まれる。
【0053】
S132(エージェント用指示ステップ)により処理を一旦、開始したエージェント23は、該エージェント23に係るメッセージ・キューが保持するメッセージが複数個あるとき、それら全部のメッセージについて、又は複合処理優先度が上位から所定番目までのメッセージについて連続処理する。
【0054】
図16は図15のS128a,S128b,・・・及びS129をサブステップとして含む上位ステップを備えるメッセージ処理方法部分のフローチャートである。S135(エージェント管理ステップ)は、S128a,S128b,・・・及びS129の他に、S137及びS138を含む。S137(存在検出ステップ)では、各エージェント23が永続記憶装置24に存在するか否かを検出する。S138(グループ化情報管理ステップ)では、該S137(存在検出ステップ)の判定結果及び各エージェント23の複合処理優先度に基づいてエージェント23をグループ化しグループ化情報を管理するとともに、該グループ化情報を適宜更新する。S132(エージェント用指示ステップ)は、エージェント管理ステップにおけるグループ化情報に基づく順番でエージェント23にその作動を指示する、
【0055】
図17はさらに別のメッセージ処理方法のメッセージ処理方法のフローチャートである。S100、S101及びS104は図10のそれらと同一であり、説明は省略する。S149(受付順番情報管理ステップ)では、S104(受付ステップ)において受付けたエージェント起動原因イベントについての受付順番情報を管理する。S150(スレッド設定ステップ)では、複数個のスレッド67a,67b,・・・を設定する。この設定により、各スレッド67a,67b,・・・は、相互に並列動作可能であり、エージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報21に基づいて検出し、かつ各検出処理要求元に係るメッセージ・キュー39にメッセージを挿入する。S152(割当てステップ)では、各スレッド67a,67b,・・・にそれが処理を担当するエージェント起動原因イベントを割当てる。こうして、割当てられたスレッドはS153において作動開始する。S153(進行状態情報管理ステップ)では、S104(受付ステップ)において受付けた各エージェント起動原因イベントについての各スレッド67a,67b,・・・による処理の進行状態情報を管理する。S156(判定ステップ)では、処理進行状態情報がスレッド67a,67b,・・・処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前にS104(受付ステップ)において受付けたエージェント起動原因イベントの中にまだスレッド67a,67b,・・・処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する。
【0056】
図18は図17のS157(エージェント制御ステップ)の配信処理制御の具体例を示す。S160では、S156の判定結果に基づきS161又はS162へ分岐する。すなわち、S156の判定結果が「有る」の場合は、S161へ進み、また、S156の判定結果が「無い」の場合は、S162へ進む。S161では、S156(判定ステップ)において「有る」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェント23による処理を抑制する。S162では、S156(判定ステップ)において「無い」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェント23による処理を許容する。
【0057】
好ましくは、判定ステップ156では、「無い」と判定されたエージェント起動原因イベントに対して受付順番がその次のエージェント起動原因イベントが、「有る」との判定済みのものであるときは、判定結果を「有る」から「無い」へ変更する。これにより、該次のエージェント起動原因イベントを起因とするメッセージは、エージェント23による処理を速やかに開始される。さらに、S101(エージェント設定ステップ)におけるエージェント23の設定では、好ましくは、S156(判定ステップ)による判定結果が「無い」となっている複数個のエージェント起動原因イベントを生成起因とするメッセージが受付順番方向へ連続するメッセージ・キュー39についての処理をエージェント23に実行させる場合、該エージェント23にはそれら連続する複数個のメッセージについての処理を連続的に行わせるように前記エージェントを設定する。
【0058】
【実施例】
以下の実施例は、本発明をメッセージ処理装置の具体例としてのメール配信装置に適用したものである。
【0059】
(実施例1)
実施例1の装置は、配信起因情報の受付に対して該配信起因情報に係る配信用メッセージを全配信先へ配信する際に、永続記憶装置からキャッシュ・メモリへのエージェントの読込みを能率的に行う方式として、KeyOnlyCollection(キー・オンリ・コレクション)配信機構又はSwapInCollection(スワップ・イン・コレクション)配信機構を装備する。該装置は、また、KeyOnlyCollection配信機構及びSwapInCollection配信機構の内、処理能率の良い方を状況に応じて選択する。実施例1の特徴を説明する。
【0060】
[メッセージ配信サービス]
インターネットでは、利用者の要求を受けて結果を返す要求−応答型のサービスだけでなく、利用者の嗜好や属性、要求情報をサーバに登録しておき、サーバ側で発生したイベントが発生すると、各利用者の情報を使って何らかの処理を行うイベント処理型のサービスが考えられる。例えば、株価情報の配信サービスでは、「IBMの株価が100ドル以上になったらメールで通知してくれ」というような要求が考えられる。このようなサービスでは、株の銘柄は、ある利用者では「IBM」であり、他の利用者では「Microsoft社」である。また、株価通知の閾値(具体的株価。例:$100,$150。)も利用者ごとに異なる。例えば、同じIBMの株価に興味のある人でも、別の利用者は株価が「90ドルを下回ったら通知してくれ」であるかもしれない。さらに、利用者によっては、「投資額の利益が1000ドル以上になったら通知してくれ」や「自分が前回購入した株価より10%値上がりしたら通知してくれ」ということもある。一方、インターネットの利用者数は数十万から数百万を超える場合がありえる。したがって、イベント処理型のサービスを提供するサイトでは、このような莫大な利用者に対してサービスを提供しなければならず、性能が非常に重要になる。
【0061】
このようなサービスを実現するためのフレームワークと実行環境としてエージェント・サーバがある。このフレームワークでは、各利用者のエージェントをサーバに生成する。エージェントとは、利用者のデータとメッセージを処理する機構を持つオブジェクトである。サーバであるイベント(前述したメッセージ起因情報に対応する。)が発生すると、それを表すメッセージを生成し、そのメッセージに対してそれぞれのエージェントが処理を実行する。このとき、すべてのエージェントのメッセージ処理を実行するのではなく、そのメッセージに関連するエージェントだけの処理を実行することが性能向上のキーとなる。そのために、あらかじめ各エージェントは興味のあるメッセージの条件を登録しておき、エージェント・サーバは、その登録条件を参照して、必要なエージェントのメッセージ処理を行う。
【0062】
1個のイベントが発生すると、そのメッセージを処理するために非常に多くのエージェントの処理を実行しなければならない。一方、このようなイベントが連続して発生する場合もある。したがって、エージェント・サーバは、イベント発生に伴う一連のエージェントの処理をなるべく効率よく実行することが大切である。
【0063】
[エージェント・サーバ概要]
図19はエージェント・サーバ200の概略構成図である。各符号が指している要素は下記の通りである。
201:メッセージ
204:メッセージ受信部
205:エージェント・スケジューラ
206:スレッド・プール
207:スレッド・プール206に配置される複数個のスレッド
210:メッセージ・キュー用キャッシュ
211:メッセージ・キュー用キャッシュ210に配置される複数個のメッセージ・キュー
215:永続記憶領域(Persistent Area。例えばハード・ディスク装置や磁気テープ内に確保される。)
216:複数個のエージェント
218:エージェント・キャッシュ
【0064】
図20はエージェント・サーバ200による種々の配信方法についての説明図である。各符号が指している要素は次の通りである。図19の符号と同一のものについては説明を省略する。
220:クライアント
221:メッセージ・ブローカ
224:メッセージング機構
225:サブスクライブ・テーブル
【0065】
図19において、メッセージ201は、メッセージ受信部204に受付けられ、配信先に対応するメッセージ・キュー211に挿入される。1個のメッセージ201に対する配信先の個数は典型的には何十万〜何百万である。エージェント・スケジューラ205は、メッセージ挿入済みのメッセージ・キュー211に係るエージェント216について、所定のスケジュールに従って作動させる。エージェント216は、その作動に先立って、エージェント・キャッシュ218に呼び出されていなければならない。エージェント・サーバ200全体の処理を効率化するために、全体の処理工程を複数個に分割し、各分割部分ごとにマルチ・スレッド方式の処理が利用される。
【0066】
図20において、クライアント220は、前述の図1の情報源クライアント15に相当し、株価等の情報源をもつコンピュータ内にアプリケーションとしてインストールされている。メッセージ・ブローカ221は、各クライアント220から各種の情報を受け取り、対応の情報をエージェント・サーバ200へ流す。なお、メッセージ・ブローカ221とクライアント220及びエージェント・サーバ200との間は、特に限定はしないが、インターネットを介して接続されている。メッセージング機構224は、メッセージ・ブローカ221より受信したメッセージとしての配信起因情報に対して、それに係る配信用メッセージについての全部の配信先を、サブスクライブ・テーブル225に基づいて検出する。1個の配信起因情報に対する配信先が1個である場合の配信を「ポイント・ツー・ポイント(Point-to-Point) 」、また、1個の配信起因情報に対する配信先が複数個である場合の配信を「ファンアウト(FanOut) 」と呼んでいる。
【0067】
[エージェント・サーバ概要]
エージェント・サーバ200は、個々のエージェントのデータを永続記憶領域215に保存し、そのデータから各エージェントをメモリ上に再構成する機構を持つ。永続記憶領域215にはディスクやデータベースなどが使われる。さらに、性能を向上させるために、エージェントをエージェント・サーバ200のメモリ上にキャッシュする機構を持つ(以降、このキャッシュを「エージェント・キャッシュ218」と呼ぶ。)。エージェント・サーバ200は、エージェント自体の管理と同時に、エージェントへのメッセージ201の配信も管理する。エージェント・サーバ200は、外部から送信されてくるメッセージ201を受信して、そのエージェント・サーバ200が管理するエージェントにそのメッセージ201を配信することを行う。
【0068】
典型的なメッセージ201の配信方法として、1個のメッセージ201を特定のエージェントに配信するポイント・ツー・ポイント(P2P)と1個のメッセージ201を複数のエージェントに配信するファンアウト(FanOut)がある。FanOutの場合は、各エージェントが事前に自分が受け取りたいメッセージ201の種類を登録しておき、エージェント・サーバ200がFanOutを行う時に、その登録情報を参照して、配信すべきエージェントを選定するという方法(以降「Pub/Sub」と呼ぶ。)や、無条件にすべてのエージェントに配信する方法(以降「Multicast」と呼ぶ。)などがある。エージェント・サーバ200はエージェントへのメッセージ201の配信を行うために、エージェントごとにメッセージ・キュー211を持っている。エージェント・サーバ200は外部から送信されてくるメッセージ201を受信すると、そのメッセージ201を配信すべきエージェントを特定し、該当するエージェントのメッセージ・キュー211に受信したメッセージ201を格納する。
【0069】
エージェント・サーバ200はメッセージ・キュー211にメッセージ201があるエージェント216の中から適当なものを選択し、それにスレッド・プール206にあるスレッドを割当てる。スレッドは、それが割当てられたエージェント216のメッセージ・ハンドラ・ルーチン(以降「メッセージ・ハンドラ」と記述する)を呼び出す。このとき、スレッド207を割当てられたエージェント216がエージェント・キャッシュ218にない場合、該エージェント216のデータを永続記憶領域215から読込み、エージェント216を再構成してエージェント・キャッシュ218に置く(このような処理を「スワップ・イン」と呼ぶ。)。エージェント・キャッシュ218が保持できるエージェント数には限界があるため、すでにエージェント・キャッシュ218がいっぱいの場合は、スレッド207が割当てられていないエージェント216をエージェント・キャッシュ218から破棄する(この処理を「スワップ・アウト」と呼ぶ。)。
エージェント216にスレッド207を割当てる時、どのエージェント216から先にスレッド207を割当てるかが性能に大きく影響する。これを行うのがエージェント・スケジューラ205である。エージェント・サーバ200の典型的なアプリケーションとして、「株損益通知サービス」等の「通知サービス」がある。このようなアプリケーションでは、株価が更新されると、更新された株価に興味のあるすべての利用者のエージェント216の処理を行わなければならない。一気に数万から数十万のエージェント216の処理を行う場合もある。性能を向上させるには、スワップ・イン及びスワップ・アウトの回数を減らすことが重要となる。なぜならば、スワップ・イン及びスワップ・アウトは永続記憶領域215へのアクセスを伴うものであり、通常のディスクやデータベースではこのコスト(時間上のコスト)は大変大きなものであるためである。エージェント・サーバ200は、性能向上するための重要な3つの特徴を持っている。第1は、エージェント216は非同期メッセージ201を受けて処理を行うということである。ここで、「非同期」とは即座に処理が行われる必要がないということである。同期処理の場合は、そのメッセージ201の処理結果を待つプログラムが存在するため、これを受けたシステムはなるべく早く処理を行い、結果を返す必要がある。しかし、非同期処理では、即座に処理結果を返す必要がない。つまり、エージェント・サーバ200はどのような順番でエージェント216の処理を行っても良いということである。第2は、エージェント・サーバ200は各エージェント216のメッセージ・キュー211を持つということである。エージェント216に送られるメッセージ201は、いったんそのエージェント216のメッセージ・キュー211に入れられる。これにより、エージェント・サーバ200は、どのエージェント216が処理待ち(メッセージ・キュー211にメッセージ201がある。)であり、どのエージェント216は処理を待っていないかを知ることができる。第3は、エージェント・サーバ200はエージェント・キャッシュ218を管理しているということである。つまり、どのエージェント216がメモリ中にあり、どのエージェント216がメモリ中にないかを知っているのである。
【0070】
[エージェント]
ここで言うエージェントとは、メッセージ処理を行うためのハンドラ・ルーチンを持ち、メッセージを受けると、そのエージェントが持つデータを用いて処理を遂行するオブジェクトである。エージェントは永続的であり、各エージェントが管理するデータはデータベース(データベースは永続記憶領域の概念に含まれる。)に保存されている。各エージェントには、それを識別するための「エージェント・キー」があり、エージェント・サーバは、エージェント・キーからエージェントを特定できる。
【0071】
[エージェント・サーバとその管理機構]
エージェント・サーバは1個のプログラムであり、数十万から数百万を超えるエージェントの実行を管理するプログラムである。このプログラムはスレッド・プール機構を持ち、限られた数のスレッドを適宜エージェントに割当て、エージェントのメッセージ・ハンドラを呼び出す。また、このプログラムは、各エージェントに作られるメッセージ・キューを管理し、エージェントに配信されるメッセージを、一時的にこのキューに入れ、スレッドを割当てるときに、このキューからメッセージを取出し、メッセージ・ハンドラの引数として渡す。
【0072】
エージェント・サーバは、エージェントをメモリ上に一時的に保持できるエージェント・キャッシュ機構を持つ。エージェント・サーバは、エージェントのメッセージ・ハンドラを呼び出す直前に、該当するエージェントのオブジェクトがキャッシュ上にある場合は、そのオブジェクトを利用する。しかし、キャッシュの大きさには限界があり、すべてのエージェントがキャッシュ上にあるとは限らない。エージェントのオブジェクトがキャッシュ上にない場合は、キャッシュ上にある他のエージェントのオブジェクトをキャッシュから破棄し(以降、この処理を「スワップ・アウト(Swap Out)」と呼ぶ。)、該当するエージェントのデータをデータベースからSQL(Structured Query Language)検索処理で読込み、キャッシュ上にエージェントのオブジェクトとして貼り付ける(以降、この処理を「スワップ・イン(Swap In)」と呼ぶ。)。
【0073】
エージェント・サーバは、なるべくデータベースのアクセス回数を減らすために、エージェント・キャッシュ上にあるエージェントから優先的にスレッドを割当てる。スワップ・アウトさせる場合は、メッセージ・キューが空のエージェントから優先的にスワップ・アウトさせる。
【0074】
[サブスクライブ]
エージェントは、自分が興味のあるメッセージの種類を示す情報をデータベースのテーブル(以降「サブスクライブ・テーブル」と呼ぶ。)に格納する。例えば、IBM株価が100ドルを超えたことを示すメッセージを受信したい場合は、自分のエージェントを識別するためのエージェント・キー、株銘柄として「IBM」、閾値として「100ドル」をデータベースのテーブルに格納する。或るメッセージがエージェント・サーバに到着すると、メッセージ配信機構は、そのメッセージの内容を参照し、サブスクライブ・テーブルからそのメッセージを配信すべきエージェントのキーのリストを取得し、それぞれのメッセージ・キューにメッセージを入れる。その後、エージェント・サーバは適切なスケジューリングにより、適宜エージェントのメッセージ・ハンドラを呼び出す。
【0075】
[エージェント検索機構]
エージェント・サーバは、データベースに対して、検索条件を指定して、その条件に合致するエージェント・キーのリストを返す機構を提供する。エージェントのデータはデータベースのテーブルに保管されている。このテーブルにはエージェント・キーも含まれている。したがって、そのテーブルに対してSQL検索を行うことで、条件にあうエージェント・キーのリストを取得できる。この検索の方式として、下記の(a)及び(b)の2方式を採用する。
【0076】
(a)KeyOnlyCollection配信機構:
検索に合致したすべてのエージェント・キーをエージェント・サーバ内に読込み、リスト・オブジェクトを生成して呼出プログラムに返す方法。読込み方には、すべてのエージェント・キーを一気に読込む方法と順次読込む方法がある。後者の場合、呼出プログラムに戻されたリスト・オブジェクトから順次エージェント・キーを取得すると同時に、取得しようとしたエージェント・キーがまだメモリ中にない場合に、次のエージェント・キーを含む一塊のエージェント・キーの集団をデータベースからメモリ中に読込む。この方法では該当するエージェントはスワップ・インされない。
(b)SwapInCollection配信機構:
検索に合致したエージェント・キーのリストを表すリスト・オブジェクトを呼出プログラムに返す。この方法では、エージェント・キーを読込むと同時に、エージェントのデータも読込み、エージェントのオブジェクトをエージェント・キャッシュにスワップ・インする。エージェント・キーの読込み方は、KeyOnlyCollection配信機構の順次読込む方法と同様に行う。また、エージェントのデータベースからの読込みは、あらたなSQL検索を行うのではなく、リストを取得したSQL検索処理で読込む。
【0077】
各方式(a)及び(b)の特徴及び利点は次の通りである。
(a)KeyOnlyCollection配信機構:
この方式は、エージェント・キャッシュになんら影響を与えない。エージェント・サーバでは、エージェント・キャッシュの情報を利用して、なるべくスワップ・イン/アウトを少なくするようにエージェントの処理順序のスケジュールを行う。したがって、この方式では、エージェント・キャッシュの情報を最大限に利用してエージェントの処理のスケジュールを行うことができる。また、エージェント・キーのリストの取得のオーバーヘッドが小さい。したがって、この方式は、エージェント・キャッシュが大きくキャッシュ・ヒット率が高い場合か、エージェント・キャッシュのサイズは小さくても、検索結果に偏りがあり、エージェント・キーのリストのほとんどがエージェント・キャッシュにある場合に効果がある。
【0078】
(b)SwapInCollection配信機構:
この方式では、エージェント・キーのリストから適当な数のエージェント・キーを読込み、それらのメッセージ・キューにメッセージを入れ、エージェントがそのメッセージの処理を完了したら、次の適当な数のエージェント・キーをリストから取得し、同様の処理を行っていく。このとき、SwapInCollectionを利用しているため、エージェント・キーのリストからの読込みと同時に、そのキーに対応したエージェントで、エージェント・キャッシュにないものがまとまってスワップ・インされる。この読込みは、1個のエージェントのスワップ・インのために1個のSQL検索処理を実行することを複数回繰り返す場合に比べ、非常に高速に複数のエージェントをスワップ・インすることができる。したがって、エージェント・キャッシュのサイズがエージェント・キーのリストの大きさに比べて小さく、キャッシュ・ヒット率が低い場合に効果がある。
【0079】
なお、各エージェントの作動開始は、KeyOnlyCollection配信機構やSwapInCollection配信機構とは別の機構としてのスケジューラが管理しており、スケジューラは、作動開始させようとするエージェントがもしエージェント・キャッシュになければ、該エージェントを永続記憶領域からエージェント・キャッシュに読込むことになる。SwapInCollection配信機構が作動しているときは、配信用メッセージが挿入されたメッセージ・キューに係るエージェントはキャッシュ・メモリに読込まれていることが保障されるので、スケジューラは、作動開始させようとするエージェントを永続記憶領域からエージェント・キャッシュに読込む手間を省略される。
【0080】
[メッセージの配信方法]
メッセージ配信機構は、メッセージをエージェント・キュー(=メッセージ・キュー)に入れた後、或るエージェントがそのメッセージの処理を完了したことを知ることができる。一例として、メッセージ・リスナを利用する方法がある。メッセージ配信機構は、メッセージに対してメッセージ・リスナ・オブジェクト(以降「メッセージ・リスナ」と呼ぶ。)を関連付けることができる。エージェント・サーバは、或るエージェントがメッセージ処理を完了すると、そのメッセージに関連ついているメッセージ・リスナがあれば、そのコールバック・ルーチンを呼び出す。これにより、メッセージ配信機構は、メッセージ処理の完了を知ることができる。また、1個のメッセージを複数のエージェントに配信する場合、そのメッセージのメッセージ・リスナにカウンタを設けることで、すべてのエージェントがそのメッセージの処理を完了したかどうかを知ることができる。
【0081】
この実装例として、WebSphere EJB+Programming Model Extensions(PME)を用いた場合を説明する。EJBではSQL文をツールに与えることで、検索を行うためのFinderメソッドを生成することができる。Finderメソッドは、その実装において与えられたSQL文を実行し、該当するレコードをラップしたEntityBeanインスタンスを示すプロキシであるEJBObjectインスタンスのCollectionを返す。このとき、PMEでは、Finderメソッドの戻り値のCollectionオブジェクトとしてKeyOnlyCollection配信機構とSwapInCollection配信機構のどちらにするかを、Finderメソッド生成時に指定することができる。
【0082】
ここで、MessengerクラスとMessageListenerクラスを以下のように定義する。なお行番号を各行の先頭に挿入している。また"//"は注釈行を意味する。
Messengerクラス:
10:public class Messenger {
11: javax.jms.Message msg;
12: MessageListener listener;
13: public Messenger(javax.jms.Message m, MessageListener lstnr) {14://13行目ではmsgとlistenerにメッセージとしてのmと、リスナーとしてのlstnrをセット
15: }
16: public void postTo(AgentKey key){17:
18://17行目には、 メッセージをKeyで指定されたエージェントのエージェント・キューに入れる処理を記述する。
19: }
20:}
【0083】
11行及び12行は、msg及びlistenerの変数宣言を行っている。13〜15行ではメソッドMessengerを定義し、16〜19行ではメソッドpostToを定義している。m、lstnr、keyは各メソッドの引数である。
【0084】
MessageListenerクラス:
30:public class MessageListener {
31: int count = 0;
32:public MessageListener(int c) {
33: //ここに、エージェント・キューにメッセージを入れた回数をセットする処理を記述する。
34: }
35: public void completed() {
36: synchronized(this) {
37: count--; // カウンタを1減らす38: if (count == 0) {
39: // もしすべてのエージェントがメッセージ処理を完了したら
40: // このMessageListenerオブジェクトでwaitしているスレッド
41: // を復帰させる。
42: }
43: }
44: }
45:}
【0085】
ここで、AgentKeyクラスはエージェントを特定するためのエージェント・キーのクラスであり、Finderメソッドの戻り値であるCollectionオブジェクトが持つEJBObjectインスタンスからAgentKeyインスタンスを取得できるとする。また、MessageListenerオブジェクトのcompletedメソッドは或るエージェントがメッセージの処理を完了するたびに呼び出される。もしMessengerオブジェクトのlistener変数がnullの場合は、エージェント・サーバの実行環境はcompletedメソッドの呼び出しを行わない。
【0086】
メッセージ配信機構は、上述のクラスを用いて以下のような処理を行う。KeyOnly配信機構では、今回の配信用メッセージを配信する全あて先リストに基づいて、各あて先に係る各メッセージ・キューに配信用メッセージが挿入される(67行)。また、SwapIn配信機構では、今回の配信用メッセージを配信する全あて先リストに基づいて、該リストから例えば20個ずつあて先を取出して(75〜80行)、それら取出したあて先に係るエージェントをエージェント・キャッシュに読込み(81〜82行)、それら取出した各あて先に係る各メッセージ・キューに配信用メッセージを挿入し(86〜89行)、その後、それら取出した全あて先に係る全エージェントがその処理を終了するのを待つ(90〜93行)。
【0087】
[KeyOnly配信機構]
60:javax.jms.Message msg = // JMS providerから受けたメッセージをセット
61:KeyOnlyCollection collection = // Finderメソッドで検索を行う。
62:Messenger msgr = new Messenger(msg, null);
63:Iterator it = collection.iterator();64:while(it.hasNext()) { // 要素があるまで繰り返す65: EJBObject obj = (EJBObject)it.next(); // EJBObjectを取出す
66: AgentKey key = // objからエージェント・キーを取得する。
67: msgr.postTo(key);
68:}
【0088】
[SwapIn配信機構]
70:javax.jms.Message msg = // JMS providerから受けたメッセージをセット
71:SwapInCollection collection = // Finderメソッドで検索を行う。
72:Iterator it = collection.iterator();
73:while(true) {
74:Vector list = new Vector();
75:for(int i=0;i<20;i++) { // 20要素ずつに処理を分割して実施
76: if (!it.hasNext()) break; //要素がなければ終了
77: EJBObject obj = (EJBObject)it.next(); // EJBObjectを取出す
78: AgentKey key = // objからエージェント・キーを取得する。
79: list.addElement(key);
80: }
81: // このときには、上記の20エージェントはエージェント・キャッシュに82:// 保持されている。
83: if (list.isEmpty()) break; //もしlistが空なら終了
84:MessageListener listener = new MessageListener(list.size());
85:Messenger msgr = new Messenger(msg, listener);86:for(int i=0;i<list.size();i++) { // listの処理を行う87: AgentKey key = (AgentKey)list.elementAt(i);
88: msgr.postTo(key);// メッセージをエージェント・キューに入れる。89: }
90: synchronized(listener) {
91: // postToを行ったすべてのエージェントの処理が終了するまで待つ。
92: if (listener.count > 0) listener.wait();
93: }
94:}
【0089】
実施例1では、KeyOnlyCollection配信機構とSwapIn配信機構とを管理者が手動で適宜、切り替えることができるようにする。管理者が手動で切り替えることに代えて、自動切替方式を採用することもできる。自動切替機能を装備する「配信方式決定機構」について説明する。この機構は、下記に示す8つの情報(それらの一部の場合も含める)を利用して、受信したメッセージを配信するための機構として、KeyOnly配信機構を利用するかSwapIn配信機構を利用するかを決定する。どちらの機構を選択するかは、下記3から8の予測値をもとに両方の方式それぞれに対してのコストを計算し、その値から決定する。
【0090】
ここで下記8つの情報をどのような方法で取得するか、これらの情報からどのようにコストを計算するかは任意である。
(1)メッセージの属性情報(例えばメッセージのタイプを表す属性、「株価通知」など)
(2)配信すべきエージェントのタイプ
(3)メッセージを配信すべきエージェントの数の予測値(以降「N」で参照)
(4)メッセージを処理すべきエージェントを呼び出す場合のキャッシュ・ヒット率の予測値(以降「R」で参照)
(5)KeyOnly配信機構において、メッセージを受信してから、配信すべきエージェントのキー情報のリストを取得し、取得したキー情報に対応するすべてのエージェントのメッセージ・キューにメッセージを入れるのに要する時間の予測値(以降「Tk」で参照)。エージェントがメッセージを処理する時間は含まない
(6)SwapIn配信機構において、メッセージを受信してから、配信すべきエージェントのキー情報のリストを取得し、取得したキー情報に対応するすべてのエージェントのメッセージ・キューにメッセージを入れるのに要する時間の予測値(以降「Ts」で参照)。エージェントがメッセージを処理する時間は含まない
(7)キャッシュ内のエージェントに対して、メッセージの処理を実行することを決定してからそのエージェントが処理を完了するまでの処理時間の予測値(以降「tin」で参照)
(8)キャッシュに読込まれていないエージェントに対して、メッセージの処理を実行することを決定してから、そのエージェントのデータをDBから読込み、そのエージェントが処理を完了するまでの処理時間の予測値(以降「tout」で参照)
【0091】
エージェント・サーバにおけるメッセージ配信機構は、メッセージを受信すると、はじめに、そのメッセージを配信すべきエージェントのタイプを決定する。その次に、配信すべきエージェントをエージェントのサブスクライブ情報を参照して決定する。このステップで、メッセージ配信機構は、エージェントのキー情報のリストを取得するが、このときに、エージェントのキー情報のリストを取得する直前に、メッセージ配信機構は、配信方式決定機構を呼び出す。呼び出された配信方式決定機構は、受信したメッセージの属性情報と配信すべきエージェントのタイプ情報を参照して、上記(3)から(8)の情報を取得し、KeyOnly配信方式かSwapIn配信方式両方のコスト計算を行い、得られたコスト値からどちらかの方式を選択する。
【0092】
実装例における上記8つの情報の取得方法、並びにKeyOnly配信機構及びSwapIn配信機構のコスト計算を説明する。はじめに、上記(1)から(8)に示した情報の取得方法の例を示す。
(a1)メッセージの属性情報:あらかじめシステム設計者や管理者が、配信方式決定に際して、メッセージのどの属性方法を参照するかを設定しておく
(a2)配信すべきエージェントのタイプ:メッセージを配信するときに、アプリケーションプログラムが指定する。
(a3)前回の値を記録しておき、その値を予測値として利用
(a4)前回の値を記録しておき、その値を予測値として利用
(a5)Tkシステム運用開始前に計測した値からNを変数とする一次方程式を求めておき、Nの予測値をその一次方程式に代入して得る。
(a6)Ts :システム運用開始前に計測した値からNを変数とする一次方程式を求めておき、Nの予測値をその一次方程式に代入して得る。
(a7)tin :システム運用開始前に計測した値を予測値として利用
(a8)tout :システム運用開始前に計測した値を予測値として利用
【0093】
ここで、(a3)から(a8)の値は、(a1)で設定されたメッセージの属性情報と(a2)で使用されるエージェントのタイプ情報の組ごとに保管される。
また、N、Rの値は前回の値を利用するため、最初の一回目は予測値が存在しない。このような場合、KeyOnly配信機構かSwapIn配信機構のどちらかをコスト計算せずに決定する。これはどちらでも構わない。
【0094】
次に、KeyOnly配信機構、ならびに、SwapIn配信機構のコストの計算式の例を示す。
KeyOnly配信機構のコスト(以降「TKey」)
TKey = Tk + N×R×tin + N×(1-R)×tout
ただし、Tk = ak×N+bk
ak、bkはシステム運用開始前に計測した値から取得
【0095】
SwapIn配信機構のコスト(以降「TSwap」)
TSwap=Ts + N×tin
ただし、Ts = as×N+bs
as、bsはシステム運用開始前に計測した値から取得
【0096】
配信方式決定機構は、計算されたTKey、TSwapの値の小さい方の配信機構を選択する。
ここで、長期間システムを運用していると、ak、bk、as、bs、はシステム運用開始前に計測した値と大きく異なってくる場合がある。したがって、配信方式決定機構は、実行時にTk、Tsに対応した実測値を計測しておき、必要であればak、bk、as、bsの値を補正する。ただし、計測値には多少の誤差はつき物であるため、逐次補正するのではなく、予測値と計測値が常に大きくずれている場合(例えば50%以上など、この閾値は管理者が設定する)に補正を行う。また、計測値としては、他のメッセージ処理が並行して行われていない場合の値だけを使う。さもないと、計測して得られた値に他のメッセージの処理に要したCPU時間が含まれてしまうためである。メッセージ配信機構は、現在どのメッセージの配信処理を行っているかをすべて把握しているので、並行して複数のメッセージ処理が行われているかどうかを容易に判断できる。補正の行い方は、色々考えられるが、簡単な方法として、bk、bsの値は変化しないとして、ak、asの値を再計算する方法がある。
【0097】
(実施例2)
実施例2では、配信処理全体に要する時間の短縮を図るために、永続記憶装置からキャッシュ・メモリへのエージェントの読込み回数を減らしつつ、複数の配信起因情報の受付に対して、各配信起因情報に係る配信用メッセージが所定の配信優先度により配信されるようにする。実施例2の構成を具体的に説明する前に、実施例2の意義を理解するための背景について説明する。
【0098】
エージェント・サーバが対象としているアプリケーションでは、処理の優先度を必要とするものがある。メッセージ処理を行うシステムでは、メッセージに優先度を付与し、そのメッセージを蓄えるキューから処理すべきメッセージを取得する時に、高い優先度のメッセージから先に取得する方法が一般的である。エージェント・サーバでは、先述したように各エージェントにメッセージ・キューを割当てる。或るエージェントのメッセージ・キューの中でメッセージを優先度順に格納すると、そのエージェント単体では高い優先度のメッセージが先に処理されるが、エージェント・サーバ全体をみると、低い優先度のメッセージを持つエージェントにスレッドが先に割当てられる場合がある。エージェント・サーバの性能を向上させるために、エージェント・キャッシュにあるエージェントから先にスレッドを割当てようとする場合において、高い優先度のメッセージをメッセージ・キューに持つエージェントがエージェント・キャッシュになく、かつそれよりも低い優先度のメッセージをメッセージ・キューに持つエージェントがエージェント・キャッシュにあるとき、後者のエージェントから先にスレッドを割当ててしまう。
【0099】
さらに、別の優先度に関わる問題として、エージェント・サーバならではの問題がある。ここで、株価通知サービスを行うアプリケーションで、ゴールド会員と一般会員をサポートするシステムを考えてみる。株価が更新されると、エージェント・サーバでは、メッセージのFanOutを行う。これは1個のメッセージを複数のエージェントに配信することである。ここでゴールド会員に優先的に株価通知を行いたいと考えることは珍しいことではない。しかし、既存のエージェント・サーバでは、このようなことを実現できない。既存のエージェント・サーバでは、エージェント・キャッシュの状態だけをみてエージェントのスレッド割当ての順番を決定してしまう。したがって、たまたま一般会員がエージェント・キャッシュ上にある場合、一般会員の処理が先に行われてしまい、先に通知されることになる。この問題は、単にメッセージに優先度が付与されるだけでは不十分である。なぜならば、FanOutの場合は1個のメッセージが多くのエージェントに配信されるためである。したがって、エージェントそのものにも優先度を付与し、それを考慮したスケジューリングが必要である。
【0100】
これに対する実施例2の解決策は次の通りである。
エージェントにどのように優先度を付与するかについては任意であるが、実施例2では、エージェントに付与する優先度をエージェントのタイプに対して付与(以降「エージェント・タイプ優先度」呼ぶ。)し、そのタイプに属するエージェントはすべてその優先度が与えられる方法とする。メッセージの優先度とエージェントの優先度から、どのような順番でエージェントにスレッドを割当てるか、つまり、エージェントの実行時の優先度のつけ方は、自由である。そこで、実施例2では、エージェントの実行時の優先度(以降「エージェント実行優先度」と呼ぶ。)は、メッセージ・キュー内にあるメッセージで最大の優先度値とエージェント・タイプ優先度の単純な加算値とする。メッセージの優先度は2,1,0(2が最高)とし、エージェント・タイプ優先度は1,0(1が最高)とする。したがって、エージェント実行優先度は、3,2,1,0の4段階となる。エージェント実行優先度は、到着するメッセージの優先度に応じて動的に変化する値である。
【0101】
実施例2のメッセージ優先度(該メッセージ優先度は配信用メッセージの内容自体に係る優先度に相当する。)及びエージェント・タイプ優先度(該エージェント・タイプ優先度は配信元における配信先の格付けに相当する。)とは別の例として、メッセージの優先度は5.4,0(5が最高)とし、エージェント・タイプ優先度は10,0(10が最高)としてもよく、メッセージ優先度間、エージェント・タイプ優先度間、及びメッセージ優先度とエージェント・タイプ優先度との間の格差は任意に設定可能である。
【0102】
実施例2では、或るエージェントにいったんスレッドが割り振られると、そのエージェントのメッセージ・キューにあるメッセージを連続して処理する。ただし、ある一定個数以上連続してメッセージを処理しても、まだ残りのメッセージがある場合は、他のエージェントにスレッドを割当てる。この方法では、メッセージの優先度を厳密に反映させたスケジューリングにならないが、或るエージェントを連続して処理することで、エージェントの切り替えにかかるコストを削減できるため、システム全体の性能を向上させることができる。
【0103】
[データ構造]
これを行うには、個々のエージェントの管理情報を保持しなければならない。ここでは、それを管理するオブジェクトとしてControlBlock(制御ブロック)を定義する。エージェント・キューもControlBlockが管理する。エージェントのキー情報を指定することで、そのエージェントのControlBlockを取得することができる。さらに、ControlBlockは、双方向リンク構造で連結可能とする。これは、エージェント・キャッシュ内でFirstInFirstOut(FIFO:フアースト・イン・ファースト・アウト)に基づき連結するためである。この構造によりエージェントのキーを指定すると、それに該当するControlBlockを特定でき、そのメッセージ・キューにメッセージを入れることができる。ControlBlockにはエージェント・タイプ名がある。さらにエージェント・タイプとエージェント・タイプ優先度を管理するデータがある。
【0104】
図21は制御ブロックのデータ構造を示している。第1の対象テーブル230は、エージェント・キー(AgentKey)と制御ブロック(ControlBlock)との1:1の対応関係が記録されている。エージェント・キーは、エージェントを識別するものであり、各配信先に対して1:1に対応している。図21の第1の対象テーブル230では、各エージェント・キーを人名(マイク(Mike)、トム(Tom)、エリック(Eric))により表している。第2の対象テーブル231は、エージェント・タイプ(AgentType)と優先度(Priority)との対応関係が記録される。この例では、エージェント・タイプには、ゴールド(Gold)と一般(Normal)との2個があり、ゴールド及び一般にそれぞれ優先度(Priority)の1,0が設定されている。前述したように、ゴールド会員及び一般会員の優先度をそれぞれ例えば5,0と設定して、格差を広げることもできる。各制御ブロック232は、それが対応付けられているメッセージ・キューについてのデータ(MessageQueue queue)、それが連結される前側の制御ブロック232についてのデータ(ControlBlock prev)、それが連結される後ろ側の制御ブロック232についてのデータ(ControlBlock next)、それが今ある状態を表すデータ(byte state。後述のIN_FILLEDやIN_EMPTY等)、及びストリング・タイプのデータ(String type)を含む。
【0105】
ControlBlockにはエージェントの状態を表す変数がある。該変数の値には、RUNNING(ランニング)、IN_FILLED(イン・フィルド)、IN_EMPTY(イン・エンプティ)、OUT_FILLED(アウト・フィルド)、及びOUT_EMPTY(アウト・エンプティ)がある。図22は制御ブロックの各変数値の意味を示している表である。また、図23は制御ブロックの状態遷移図である。
【0106】
ControlBlockはエージェント実行優先度ごとにグループ化される。さらに、各グループ内では、エージェントの状態に基づいてグループ化される。このグループ化は、先に述べたリンク構造を用いて、同じグループのControlBlockをFIFOに基づいて連結することで実現される。ただし、RUNNING状態のControlBlockはこれらのグループとは別のリンクとして連結される。図24はエージェントをその実行優先度ごとのグループ化した状態を示している。
【0107】
或るControlBlockのメッセージ・キューにメッセージを入れるときは次の手順で行う。
・ControlBlockにメッセージの優先度が高い順に並ぶように入れる。同じ優先度のメッセージがある場合は、そのメッセージよりも後ろに入れる。
・挿入したメッセージがメッセージ・キューの先頭でない場合は終了。
・図23の状態遷移図に基づいてエージェントの状態を更新する。
・エージェントのエージェント・タイプ優先度とメッセージ優先度を加算してエージェント実行優先度を求め、その値とエージェントの状態に応じたリストの最後尾にControlBlockを連結する。
・待ち状態のスレッドがある場合は、そのスレッドを再始動させる。
【0108】
スレッド割当てのスケジュールは次の通りである。図24に示すデータ構造を用いて、スレッドを割当てるエージェントのControlBlockを決定する処理getNextControlBlock関数を示す。なお、関数とはC言語の用語であるが、処理はJava(登録商標)等のOOP言語を使用して記述することもできる。
【0109】
ControlBlock getNextControlBlock() {
ステップ1: 処理対象グループにエージェント実行優先度3のグループをセットする。
ステップ2: IN_FILLEDのリストが空でなければ、その先頭のControlBlockを取得して戻る。空の場合はステップ3へ。
ステップ3: OUT_FILLEDのリストが空でなければ、その先頭のControlBlockを取得して戻る。空の場合はステップ4へ。
ステップ4: 処理対象グループがエージェント実行優先度0のグループの場合はNULLで戻る。そうでない場合は、処理対象グループに1個低いエージェント実行優先度をセットしてステップ2へ。
}
【0110】
スレッドは、いったん割当てられたエージェントのメッセージ・キューから連続してメッセージを取出し、同じエージェントの処理を行う。この連続処理はメッセージ・キューが空になるか、または、連続して処理するメッセージの個数がある制限値を超える場合、そのエージェントの処理を完了とみなし、他のエージェントの処理を行う。
【0111】
エージェントのControlBlockの完了処理と次に処理すべきエージェントのControlBlockの取得処理は下記の手順で行われる。
ステップ1:処理が終了したエージェントのControlBlockの状態を図23の状態遷移図に基づいて更新する。
ステップ2:メッセージ・キューの先頭のメッセージの優先度(空の場合は0とする)とそのエージェントのエージェント・タイプ優先度を加算してエージェント実行優先度を求め、その値とエージェントの状態を基に、そのControlBlockを対応するリストの最後尾に連結する。
ステップ3:getNextControlBlock関数を呼び、次のControlBlockを取得する。もし、戻り値がNULLの場合は、スレッドを待ち状態にする。
ステップ4:取得したControlBlockの状態をRUNNINGにし、対応するリストの最後尾に連結する。
ステップ5:もし、該当するエージェントがエージェント・キャッシュにない場合は、該当するエージェントのControlBlockを引数としてloadAgent関数を呼び、読込まれたエージェントをエージェント・キャッシュに置く。
ステップ6:メッセージ・キューの先頭のメッセージを取得して、エージェントのメッセージ・ハンドラを呼ぶ。
【0112】
また、メッセージ・キューへのメッセージの挿入処理のために待ち状態となっているスレッドが再始動された場合は、上記処理のステップ1,2を飛ばし、ステップ3,4の処理を行う。
【0113】
エージェント・キャッシュからのエージェントの破棄について説明する。或るエージェントをエージェント・キャッシュに読込むとき、それと同時にエージェント・キャッシュ内の或るエージェントを破棄する必要がある。破棄すべきエージェントを決定する関数getEvictedAgentの手順を以下に示す。
【0114】
ControlBlock getEvictedAgent() {
ステップ1:エージェント実行優先度0のグループから開始
ステップ2:IN_EMPTYのリストが空でなければ、その先頭のControlBlockの状態を図23の状態遷移図に基づいて更新し、そのControlBlockを返す。
ステップ3:エージェント実行優先度が3の場合はステップ4へ。そうでない場合は、エージェント優先度を1個高くしてステップ2へ。
ステップ4:エージェント実行優先度0のグループから開始
ステップ5:IN_FILLEDのリストが空でなければ、その最後尾のControlBlockの状態を図23の状態遷移図に基づいて更新し、そのControlBlockを返す。
ステップ6:エージェント優先度が3の場合はステップ7へ。そうでない場合は、エージェント実行優先度を1個高くしてステップ5へ。
ステップ7:NULLを返す。

【0115】
エージェントをエージェント・キャッシュに読込む処理であるloadAgent関数の処理手順を以下に示す。
void loadAgent(Object pkey) {
ステップ1 :エージェント・キャッシュに余裕がある場合は、pkeyで指定される対象エージェントを読込み、エージェント・キャッシュに登録し、図23の状態遷移図に基づいてControlBlockの状態を更新して終了。
ステップ2 :getEvictedAgent関数を呼び、スワップ・アウトすべきエージェントのControlBlockを取得する。
ステップ3 :getEvictedAgent関数の戻り値がNULLの場合は、システム・エラーとして終了。
ステップ4 :getEvictedAgent関数の戻り値のControlBlockをその状態に対応するリストの最後尾に連結する。
ステップ5 :getEvictedAgent関数の戻り値のControlBlockに対応するエージェントをエージェント・キャッシュから破棄する。
ステップ6 :対象エージェントを読込み、エージェント・キャッシュに登録し、図23の状態遷移図に基づいてControlBlockの状態を更新して終了。
}
ステップ3において、1個もエージェント・キャッシュから破棄できないということは、エージェント・キャッシュ内のすべてのエージェントにスレッドが割当てられてRUNNING状態であることを示す。エージェント・サーバでは、スレッド数よりもエージェント・キャッシュのサイズの方がはるかに大きく構成される。したがって、システム・エラーとして扱っても問題はない。
【0116】
(実施例3)
実施例3の構成を具体的に説明する前に、実施例3の意義を理解するための背景について説明する。
【0117】
エージェント・サーバには、外部からメッセージが配信されてくる。例えば、クライアント・プログラムはMQSeriesやJMSのキューにメッセージを入れる。エージェント・サーバはこれらのキューからメッセージを受けて、あて先となるべきエージェントを特定し、そのメッセージ・キューに入れる。外部から送られてくるメッセージは連続的に送られてくることもある。これらのメッセージでは、順番が大変重要な意味を持つ場合がある。例えば、最新の株価を持つメッセージを想定してみる。あるときIBMの株価が$100であり、次の瞬間に$110に上昇したとする。ここで、これらを通知するメッセージが逆転してエージェントに到着すると、株価が$110から$100に下落したことになってしまう。したがって、エージェント・サーバに到着した順番通りに、各エージェントにメッセージ処理を行わせることは重要である。
【0118】
エージェント・サーバでは、各エージェントはあらかじめ自分が受け取りたいメッセージの条件をデータベースのテーブル(サブスクライブ・テーブル)に登録する。メッセージ配信機構は、このサブスクライブ・テーブルに対しSQLを発行してあて先エージェントのリストを取得して、メッセージを該当エージェントのメッセージ・キューに入れる。その後、適当なタイミングでエージェント・サーバの実行環境がエージェントにスレッドを割当て、メッセージ処理を行わせる。
【0119】
ここで、エージェントにメッセージの到着順序通りにメッセージ処理を行わせる最も簡単な方法は、外部からのメッセージの受信とエージェントへのメッセージの配信を行うスレッドを1個だけにすることである。こうすれば、必ず受信した順番にメッセージを各エージェントのメッセージ・キューに入れることができる。しかし、この方法では、並行処理が行えず、結果としてメッセージ配信処理のスループットが低下する。メッセージ配信機構は、データベースにアクセスする。データベースから結果が戻るまで、エージェント・サーバのメッセージ配信機構は完全に停止してしまうのである。
【0120】
そこで、メッセージ配信機構に複数のスレッドを割当て、それぞれのスレッドでメッセージの受信処理とメッセージ配信処理を行わせれば、複数のメッセージのメッセージ配信処理を同時並行して行うことができる。データベースにも並行してアクセスでき、スループットの向上が期待できる。しかし、この方法では、最初に受信したメッセージの処理を行うスレッドと、その次に受信したメッセージの処理を行うスレッドのどちらが先にメッセージをエージェントのメッセージ・キューに入れるかが分からなくなる。メッセージは、そのメッセージが持つ情報とサブスクライブ・テーブルの検索結果から決定される。そのため、メッセージごとにあて先となるエージェントは異なり、或るメッセージのあて先エージェント数が10万で、その直後のメッセージのあて先エージェント数は100である場合もある。このような状況では、或るエージェントのメッセージ・キューに入るメッセージの順番の逆転は容易に起こりうる。
【0121】
実施例3では、配信起因情報に係る配信用メッセージを、配信先へ配信起因情報の受付け順に配信することを保障する。図25は配信起因情報に係る配信用メッセージを、配信先へ配信起因情報の受付け順に配信することを保障するエージェント・サーバの構成図である。各符号が指している要素は次の通りである。
250:実施例3に係るエージェント・サーバ
251:キュー・マネージャ(QueueManager)
252:メッセージ受信部(MessageReceiver)
253:メッセージ受信部252が使用するスレッド
254:メッセンジャ
255:メッセージ順番記録器(MessageOrderRecorder)
258:メッセージ・リゾルバ
259:メッセージ・リゾルバ258が使用するスレッド
263:スクライブ・テーブル
264:エージェント・メッセージ・キュー
268:エージェント・ビーン
269:エージェント・スケジューラ
270:エージェント・スケジューラ269が使用するスレッド
【0122】
QueueManagerは、エージェント・サーバ外部にあるメッセージを蓄え、エージェント・サーバに配信する機構である。QueueManagerから配信されるメッセージを受信するコンポーネントがMessageReceiverである。これは1個のスレッドで動いており、メッセージを受信するとMessengerオブジェクトを生成し、そのオブジェクトに受信したメッセージをセットする。さらに、通番をセットする。その後にMessageOrderRecorderにMessengerオブジェクトを渡す。
【0123】
ここで、Messengerオブジェクトとは、外部からのメッセージのオブジェクトを保持すると同時に、図26の表にある状態を保持するオブジェクトであり、エージェントのメッセージ・キューにはMessengerオブジェクトが入れられる。図26はメッセンジャ・オブジェクトの各処理状態を説明した表である。
【0124】
MessageOrderRecorderはMessengerオブジェクトを順番通りに記録するコンポーネントである。MessageOrderRecorderは、その状態を"NotProcessed"にして通番の小さい順にソートして記録する。
MessageReceiverはMessengerオブジェクトをMessageOrderRecorderにセットした後、MessageResolverを呼び出し、Messengerオブジェクトの処理を依頼する。
【0125】
この依頼を受けたMessageResolverは、自分が管理するスレッド群の中からアイドル中のスレッドを取得し、それを起こす(wake)。このとき、もしアイドル中のスレッドがなければ(つまりすべてのスレッドが処理中である状況)、何もしない。MessageResolverのスレッドはMessageOrderRecorderから未処理のMessengerオブジェクトを取得する。このとき、MessageOrderRecorderはMessengerオブジェクトの状態が"NotProcessed"のもので、通番がもっとも小さいMessengerオブジェクトを選択し、そのMessengerオブジェクトに処理中を意味する"Distributing"状態をセットする。MessageOrderRecorderはこれらの処理を同時並行的に処理が行われないようにしなければならない。このスレッドはMessageResolverを呼び出し、取得したMessengerオブジェクトの処理を行うように依頼する。
【0126】
呼び出されたMessageResolverは、データベースにあるサブスクライブ・テーブルに対し検索処理を行い、メッセージを渡すべきエージェントのエージェント・キーの集合を取得する。次に、エージェント・キーに対応するエージェントのメッセージ・キューにMessengerオブジェクトを入れる。すべてのあて先エージェントのメッセージ・キューにMessengerオブジェクトの挿入が終了すると、MessageOrderRecorderを呼び出し、Messengerオブジェクトの挿入処理が完了したことを知らせる。Messengerオブジェクトをメッセージ・キューに入れるとき、そのメッセージ・キューにすでにあるMessengerオブジェクトの通番を参照して、その値が小さい順にソートされるように入れる。
【0127】
MessageOrderRecorderは、そのMessengerオブジェクトの通番を参照して、それより小さい番号のMessengerオブジェクトがある場合は、Messengerオブジェクトの状態を"Distributed"にする。このようなMessengerオブジェクトがない場合は、そのMessengerオブジェクトの状態を"Ready"にし、同時にMessageOrderRecorderからそのMessengerオブジェクトの記録を消去する。さらに、このMessengerオブジェクトの通番+1の通番を持つMessengerオブジェクトの状態を参照し、それが"Distributed"である場合は、そのMessengerオブジェクトの状態を"Ready"にし、同時にMessageOrderRecorderからそのMessengerオブジェクトの記録を消去する。同様の処理をMessengerオブジェクトの状態が"Distributing"であるものに出会うまで繰り返す。最終的に、"Distributing"状態であるMessengerオブジェクトに出会ったら、そのMessengerオブジェクトの状態を"Ready"にする。MessageOrderRecorderはこれらの処理を同時並行的に処理が行われないようにしなければならない。
【0128】
一方、AgentSchedulerは各エージェントのメッセージ・キューの状況をみてスレッドを割当てる。AgentSchedulerは、メッセージ・キューの先頭にあるMessengerオブジェクトの状態が"Ready"であれば、そのメッセージ・キューに対応したエージェントにスレッドを割当てる。そうでない場合は、他のエージェントを確認する。各コンポーネントの処理手順を以下に示す。
【0129】
[MessageReceiverの受信処理]
1: メッセージを受信する。
2: Messengerオブジェクトを生成し、メッセージをセットする。
3: Messengerオブジェクトに通番をセットする。
4: Messengerオブジェクトを引数としてMessageOrderRecorderの記録処理を呼び出す
5: MessageResolver用のスレッド群にもしアイドル中のスレッドがあれば、それを再起動させる。
【0130】
[MessageOrderRecorderの記録処理]
1: 受け取ったMessengerオブジェクトの状態を"NotProcessed"にして通番の小さい順にソートして記録する。
【0131】
[MessageOrderRecorderの取得処理]
1: 記録にあるMessengerオブジェクトで、状態が"NotProcessed"のもののうち最も通番の小さいMessengerオブジェクトを取得する。
2: そのオブジェクトが現在記録されているすべてのMessengerオブジェクトの中で通番が最小の場合、その状態を"Ready"にする。そうでない場合、その状態を"Distributing"にする。
3: そのMessengerオブジェクトを返す
【0132】
[MessageOrderRecorderの挿入完了処理]
1: 渡されたMessengerオブジェクトの通番より小さい通番を持つMessengerオブジェクトが記録されている場合、渡されたMessengerオブジェクトの状態を"Distributed"にして処理から抜ける。
2: 渡されたMessengerオブジェクトの状態を"Ready"にして記録から消去する。
3: 対象Messengerオブジェクトとして、渡されたMessengerオブジェクトの次に記録されているMessengerオブジェクトをセットする。
4: 対象Messengerオブジェクトの状態が"Distributing"であれば、処理を抜ける。
5: 対象Messengerオブジェクトが"Distributed"である場合、対象Messengerオブジェクトの状態を"Ready"にする。
6: 対象Messengerオブジェクトを記録から消去する。
7: 対象Messengerオブジェクトを現在の対象Messengerオブジェクトの次のものにセットして、ステップ4に戻る。
【0133】
[MessageResolverのメッセージ挿入処理]
1: MessageOrderRecorderの取得処理を呼び出し、処理すべきMessengerオブジェクトを取得する。もしなければ、この処理から抜ける。
2: 取得したMessengerオブジェクトのメッセージのデータを参照してサブスクライブ・テーブルに検索処理を行い、メッセージを渡すべきエージェントのエージェント・キーのリストを取得する。
3: 取得したリストのすべてのエージェント・キーに対して、その個々のエージェント・キーに対応するエージェントのメッセージ・キューにMessengerオブジェクトを挿入する。このとき、そのメッセージ・キューにMessengerオブジェクトがすでにある場合、その通番の小さい順にソートされるように挿入する。
4: Messengerオブジェクトを引数として、MessageOrderRecorderの挿入完了処理を呼ぶ
【0134】
[AgentSchedulerのスレッド割当て処理]
1: エージェント・サーバが管理するエージェントのリストから、メッセージ・キューが空でないエージェントを選択する。
2: このエージェントのメッセージ・キューの先頭のMessengerオブジェクトの状態が"Ready"であれば、先頭のMessengerオブジェクトからメッセージを取得し、そのエージェントのメッセージハンドラを呼ぶ。そうでない場合はステップ1に戻る。
3: ステップ2をそのメッセージ・キューが空になるか、"Ready"でないMessengerオブジェクトに出会うまで繰り返す
4: ステップ1に戻る。
【0135】
(実施例4)
パソコン関連商品を扱う電子モール・システムにおける本発明の実施例を示す。この実施例では、複数の商品の合計金額が利用者の設定した金額内に納まる場合に、利用者に情報を電子メールで配信しする。この実施例では、最終的には電子メールが利用者に配信されるが、その途中の過程では、エージェントは電子モールの配信を行わない処理を実行する。
【0136】
ある日、田中さんは、600MHz以上のCPUを搭載したパソコンを1台、128MBの拡張メモリを2個、カラー・プリンタを1台、合計10万円以内で購入しようとしたが、8万円のパソコンと1個につき1万円の128MBのメモリ、1万8千円のカラー・プリンタしか見つからず、予算額を超えるため、合計10万円以内になるような製品の組み合わせが見つかったら電子メールで通知してくれるようにシステムに入力した。2日後、この電子モールでは7万円の600MHzのCPUを持つベータ社のパソコンB−600が登録され、その翌日、1万円のエジソン社のカラー・プリンタが登録された。するとベータ社パソコンB−600+エジソン社カラー・プリンタ+1万円の128MBメモリ×2で合計10万円になるので、田中さんに「ベータ社のパソコンB−600と128MBメモリ2つとエジソン社のカラー・プリンタで合計10万円」という文面の電子メールが送られた。
【0137】
このシステムの内部では次のような処理がなされる。田中さんは電子モール・システム内にいる田中さん用のエージェントに対して、「600MHz以上のパソコン+128MBメモリ2枚+カラー・プリンタで合計10万円以内になるような製品の組み合わせが見つかったら電子メールで通知してくれ」という主旨の条件をWebブラウザから入力する。するとこのエージェントは、商品情報DBからパソコン、メモリ、プリンタ情報を取得する。この場合では、田中さんのエージェントは「8万円のパソコン」、1つ「1万円の128MBのメモリ」、「1万8千円のカラー・プリンタ」の情報を取得し、その情報をエージェントがデータとして保持する。これと同時に、サブスクライブ情報として、「パソコン」、「メモリ」、「カラー・プリンタ」の情報を登録する。2日後、商品情報データベースに7万円のベータ社のパソコン情報が入力される。これと同時に、パソコン情報が更新されたことを通知するイベントがシステムに送られる。すると、このイベントはエージェント・サーバのメッセージ機構により、「7万円の600MHzのCPUを持つベータ社のパソコンB−600」の情報を持つ新着商品メッセージというメッセージに変換され、関連するエージェントすべてのメッセージキューに挿入される。田中さんエージェントはこのメッセージに関連するため、田中さんエージェントのメッセージキューにもこのメッセージが挿入される。その後、田中さんエージェントのメッセージハンドラが呼び出され、その引数としてこのメッセージが渡される。これを受けた田中さんエージェントは、そのエージェントが保持している「1万円の128MBのメモリ」、「1万8千円のカラー・プリンタ」との合計金額を計算する。しかし、合計金額は10万8千円であり、まだ10万円を超えているので、電子メールの送信は行わない。その代わり、田中さんエージェントが保持している商品データのリストに「7万円の600MHzのCPUを持つベータ社のパソコンB−600」を追加する。3日後、「1万円のエジソン社のカラー・プリンタ」情報のイベントが同様の方法でエージェントに送られる。この時、田中さんのエージェントのメッセージハンドラが呼び出され、引数として「1万円のエジソン社のカラー・プリンタ」情報のメッセージが渡される。ここで、「ベータ社パソコンB−600+エジソン社カラー・プリンタ+1万円の128MBメモリ×2」で合計額が10万円となるので田中さんエージェントは田中さんに「ベータ社のパソコンB−600と128MBメモリ2つとエジソン社のカラー・プリンタで合計10万円」という文面の通知メールを送信する。
【0138】
この実施例でのポイントは、田中さんエージェントが「7万円の600MHzのCPUを持つベータ社のパソコンB−600」のメッセージをメッセージハンドラで処理するときに、電子メールの送信は行わないということである。田中さんエージェントが実行する処理は次のものである。
1.:すでに保持しているメモリとプリンタとの合計金額を計算
2.:その合計金額と「10万円」という値と比較
3.:その結果電子メールを送信しないことを決定
4.:「7万円の600MHzのCPUを持つベータ社のパソコンB−600」
をデータに追加
【0139】
(実施例5)
実施例5では、処理要求元が、人や組織等の会員の概念に属しないものについて説明する。企業Aが複数の企業からパソコン部品の受注を受ける企業間ワークフローシステムを考える。このシステムは、発注元企業(下記の例での企業Bと企業C)の発注システムと企業Aの受注システムが連携されたシステムである。
【0140】
9月20日に企業Bが発注番号0012で「モデル番号1124のHDD(ハード・ディスク・ドライブ装置)100台を、納入希望期限を10月1日、納入最終期限を10月3日として発注」を依頼する処理を開始する。また、同日に企業Cが発注番号0013で「モデル番号1124のHDD200台を、納入希望期限を10月5日、納入最終期限を10月10日として発注」を依頼する処理を開始する。
【0141】
すると、企業Aのワークフローシステムでは、発注番号0012ワークフロー処理、発注番号0013ワークフロー処理が開始される。これと同時に、企業Aのエージェント・サーバにおいて、発注番号0012ワークフロー処理と発注番号0013ワークフローを監視するための監視エージェントである発注番号0012監視エージェントと発注番号0013監視エージェントが生成される。このエージェント・サーバは企業Aのワークフローシステムと連携されたものである。
ワークフローを監視する監視エージェントは、下記の監視を行う。
1.:発注ワークフロー処理がどこかの処理で遅延していないか
2.:何らかの理由でこのワークフロー処理が失敗したか
3.:何らかの理由でこのワークフロー処理を無効化しなければならないか
4.:依頼元である企業が発注処理のキャンセル処理を開始したか
【0142】
ここで、9月26日に「当初モデル番号1124のHDDは企業Aにその下請け企業又は系列企業等の関連企業から9月29日までに500台納入される予定であったが、モデル番号1124のHDDの生産が遅れ、企業Aに10月6日に500台納入」となったとする。この場合、この情報をあらわすイベントがエージェント・サーバに送られる。エージェント・サーバでは、このイベントを「当初モデル番号1124のHDDは企業Aに9月29日までに500台納入される予定であったが、モデル番号1124のHDDの生産が遅れ、企業Aに10月6日に500台納入」を示すメッセージに変換し、モデル番号1124HDDの発注ワークフローを監視している全ての監視エージェントに渡される。発注番号0012監視エージェントと発注番号0013監視エージェントにもこのメッセージが渡される。ここで、発注番号0012監視エージェントのメッセージハンドラでは、発注番号0012ワークフロー処理を無効化し、企業Bのシステムに「発注番号0012をキャンセルした」という通知メッセージを送る。発注番号0013監視エージェントでは、発注番号0013ワークフローはそのまま継続させるが、企業Cのシステムに「発注番号0013の納入期限が10月6日以降に変更」という通知メッセージを送る。
【0143】
実施例5では、エージェントは会員に対して生成されるものではなく、「ワークフロー処理」に対して生成される。また、エージェントのメッセージの通知先は「人」ではなく、コンピュータシステムである。この実施例で挙げた企業Aにおけるワークフロー処理システムでは、ワークフロー処理手続きは大量に発生する。一方、個々のワークフロー処理手続きでは、納入期限や扱う商品などがすべて異なる。そのため、「当初モデル番号1124のHDDは企業Aに9月29日までに500台納入される予定であったが、モデル番号1124のHDDの生産が遅れ、企業Aに10月6日に500台納入」のようなイベントが発生した場合、そのイベントに対して、どのような処理を行うべきかはワークフロー処理ごとに異なる。そのため、個々のワークフロー処理ごとに監視エージェントを生成する方法が考えられる。この場合、システムは大量の監視エージェントを扱う必要が生じる。また、先の例で示したように大量エージェントのメッセージ処理も必要になる。
【0144】
まとめとして本発明の構成に関して以下の事項を開示する。
(1):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成手段、
各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となる複数個のエージェント、
前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込み手段、
メッセージが挿入されているメッセージ・キューに係るエージェントにその作動を指示するエージェント用指示手段、及び
前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込み手段にその処理の繰返しを指示する繰返し指示手段、
を有していることを特徴とするメッセージ処理装置。
(2):各エージェントは、該エージェントに対応付けられているメッセージ・キューにおけるメッセージに対して、該エージェントに対応付けられた処理要求元への通知を実施するものであることを特徴とする(1)記載のメッセージ処理装置。
【0145】
(3):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成手段、
各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となる複数個のエージェント、
第1のメッセージ・キュー用処理機構、
第2のメッセージ・キュー用処理機構、
第1及び第2のメッセージ・キュー用処理機構のどちらかを選択する選択手段、及び
メッセージが挿入されているメッセージ・キューに係るエージェントについて該エージェントがキャッシュ・メモリに有れば該エージェントにその作動を直ちに指示しまた該エージェントがキャッシュ・メモリに無ければ該エージェントを前記永続記憶装置から前記キャッシュ・メモリへ読込んでから該エージェントにその作動を指示するエージェント用指示手段、
を有し、
第1のメッセージ・キュー用処理機構は、
前記リスト情報に含まれる全部の処理要求元に係るメッセージ・キューに前記メッセージを挿入する挿入手段、
を有し、
第2のメッセージ・キュー用処理機構は、
前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込み手段、及び
前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込み手段にその処理の繰返しを指示する繰返し指示手段、
を有している、
ことを特徴とするメッセージ処理装置。
【0146】
(4):前記選択手段の選択はオペレータの指示に基づくことを特徴とする(3)記載のメッセージ処理装置。
(5):前記選択手段の選択は、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の予測数、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に係るエージェントについてのキャッシュ・メモリにおける予測ヒット率、前記選択手段が第1のメッセージ・キュー用処理機構を選択している場合に前記受付手段が情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、前記選択手段が前記第2のメッセージ・キュー用処理機構を選択している場合に前記受付手段が情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、キャッシュ・メモリ内のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間、及び/又はキャッシュ・メモリ外のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間に基づくことを特徴とする(3)記載のメッセージ処理装置。
【0147】
(6):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元を前記処理要求元検索情報に基づいて決定する処理要求元決定手段、各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているとき作動可能となる複数個のエージェント、
各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する少なくとも1個のサブ処理優先度決定手段、
前記サブ処理優先度決定手段の総個数が2以上であるときは各サブ処理優先度決定手段が各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、前記サブ処理優先度決定手段の総個数が1であるときは該唯一のサブ処理優先度決定手段が各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する複合処理優先度決定手段、
各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント同士では、キャッシュ・メモリに存在する方のエージェントを、存在しない方のエージェントより優先してその作動を指示するエージェント用指示手段、
を有していることを特徴とするメッセージ処理装置。
【0148】
(7):前記価値基準には、メッセージの内容に係るもの及びメッセージが適用される処理要求元に係るものがあること特徴とする(6)記載のメッセージ処理装置。
(8):メッセージの内容に係る所定の価値基準には、メッセージの処理の緊急性に係る価値基準が含まれることを特徴とする(7)記載のメッセージ処理装置。
(9):メッセージが適用される処理要求元に係る価値基準には、処理要求元の格付けに係る価値基準が含まれることを特徴とする(7)記載のメッセージ処理装置。
(10):前記エージェント用指示手段により処理を一旦、開始したエージェントは、該エージェントに係るメッセージ・キューが保持するメッセージが複数個あるとき、それら全部のメッセージについて、又は複合処理優先度が上位から所定番目までのメッセージについて連続処理することを特徴とする(6)〜(9)のいずれかに記載のメッセージ処理装置。
(11):前記サブ処理優先度決定手段及び前記複合処理優先度決定手段を含むエージェント管理手段を有し、
前記エージェント管理手段は、各エージェントが永続記憶装置に存在するか否かを検出する存在検出手段、該存在検出手段の判定結果及び各エージェントの複合処理優先度に基づいてエージェントをグループ化しグループ化情報を管理するグループ化情報管理手段、及びグループ化情報管理手段にグループ化情報の更新を指示する更新指示手段を有し、
前記エージェント用指示手段は、前記エージェント管理手段におけるグループ化情報に基づく順番でエージェントにその作動を指示する、
ことを特徴とする(6)〜(10)のいずれかに記載のメッセージ処理装置。
【0149】
(12):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
エージェント起動原因イベントを受付ける受付手段、
前記受付手段が受付けたエージェント起動原因イベントについての受付順番情報を管理する受付順番情報管理手段、
各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となっている複数個のエージェント、
相互に並列動作可能である複数個のスレッドであって各スレッドはエージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づいて検出しかつ各検出処理要求元に係るメッセージ・キューに前記メッセージを挿入する複数個のスレッド、
各スレッドにそれが処理を担当するエージェント起動原因イベントを割当てる割当て手段、
前記受付手段が受付けた各エージェント起動原因イベントについてのスレッドによる処理の進行状態情報を管理する進行状態情報管理手段、
処理進行状態情報がスレッド処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に前記受付手段において受付けたエージェント起動原因イベントの中にまだスレッド処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する判定手段、及び前記判定手段が「有る」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を抑制するエージェント制御手段、
を有していることを特徴とするメッセージ処理装置。
【0150】
(13):前記判定手段が「無い」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を許容する前記エージェント制御手段、
を有していることを特徴とする(12)記載のメッセージ処理装置。
(14):「無い」と判定したエージェント起動原因イベントに対して受付順番がその次のエージェント起動原因イベントが、「有る」との判定済みのものであるときは、判定結果を「有る」から「無い」へ変更する前記判定手段、
を有していることを特徴とする(13)記載のメッセージ処理装置。
(15):前記判定手段による判定結果が「無い」となっている複数個のエージェント起動原因イベントを生成起因とするメッセージが受付順番方向へ連続するメッセージ・キューについての処理を実行する場合は、それら連続する複数個のメッセージについての処理を連続的に行う前記エージェント、
を有していることを特徴とする(14)記載のメッセージ処理装置。
【0151】
(16):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能であるエージェント設定ステップ、
前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込みステップ、
メッセージが挿入されているメッセージ・キューに係るエージェントにその作動を指示するエージェント用指示ステップ、及び
前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込みステップの繰返しを指示する繰返し指示ステップ、
を有していることを特徴とするメッセージ処理方法。
(17):各エージェントは、該エージェントに対応付けられているメッセージ・キューにおけるメッセージに対して、該エージェントに対応付けられた処理要求元への通知を実施するものであることを特徴とする(16)記載のメッセージ処理装置。
【0152】
(18):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能であるエージェント設定ステップ、
第1のメッセージ・キュー用処理ステップ、
第2のメッセージ・キュー用処理ステップ、
第1及び第2のメッセージ・キュー用処理ステップのどちらかを選択する選択ステップ、及び
メッセージが挿入されているメッセージ・キューに係るエージェントについて該エージェントがキャッシュ・メモリに有れば該エージェントにその作動を直ちに指示しまた該エージェントがキャッシュ・メモリに無ければ該エージェントを前記永続記憶装置から前記キャッシュ・メモリへ読込んでから該エージェントにその作動を指示するエージェント用指示ステップ、
を有し、
第1のメッセージ・キュー用処理ステップは、
前記リスト情報に含まれる全部の処理要求元に係るメッセージ・キューに前記メッセージを挿入する挿入ステップ、
を有し、
第2のメッセージ・キュー用処理ステップは、
前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込みステップ、及び
前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込みステップの繰返しを指示する繰返し指示ステップ、
を有している、
ことを特徴とするメッセージ処理方法。
【0153】
(19):前記選択ステップにおける選択はオペレータの指示に基づくことを特徴とする(18)記載のメッセージ処理方法。
(20):前記選択ステップにおける選択は、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の予測数、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に係るエージェントについてのキャッシュ・メモリにおける予測ヒット率、第1のメッセージ・キュー用処理ステップにおいて処理を割当てられた場合に前記受付ステップにおいて情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、第2のメッセージ・キュー用処理ステップにおいて処理を割当てられた場合に前記受付ステップにおいて情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、キャッシュ・メモリ内のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間、及び/又はキャッシュ・メモリ外のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間に基づくことを特徴とする(18)記載のメッセージ処理方法。
【0154】
(21):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元を前記処理要求元検索情報に基づいて決定する処理要求元決定ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され各エージェントは永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能でありかつ各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となっているように設定するエージェント設定ステップ、
各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する少なくとも1個のサブ処理優先度決定ステップ、
前記サブ処理優先度決定ステップの総個数が2以上であるときは各サブ処理優先度決定ステップにおいて各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、前記サブ処理優先度決定ステップの総個数が1であるときは該唯一のサブ処理優先度決定ステップにおいて各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する複合処理優先度決定ステップ、及び
各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント同士では、キャッシュ・メモリに存在する方のエージェントを、存在しない方のエージェントより優先してその作動を指示するエージェント用指示ステップ、
を有していることを特徴とするメッセージ処理方法。
【0155】
(22):前記価値基準には、メッセージの内容に係るもの及びメッセージが適用される処理要求元に係るものがあること特徴とする(21)記載のメッセージ処理方法。
(23):メッセージの内容に係る所定の価値基準には、メッセージの処理の緊急性に係る価値基準が含まれることを特徴とする(22)記載のメッセージ処理方法。
(24):メッセージが適用される処理要求元に係る価値基準には、処理要求元の格付けに係る価値基準が含まれることを特徴とする(22)記載のメッセージ処理方法。
(25):前記エージェント用指示ステップにより処理を一旦、開始したエージェントは、該エージェントに係るメッセージ・キューが保持するメッセージが複数個あるとき、それら全部のメッセージについて、又は複合処理優先度が上位から所定番目までのメッセージについて連続処理することを特徴とする(21)記載のメッセージ処理方法。
(26):前記サブ処理優先度決定ステップ及び前記複合処理優先度決定ステップを含むエージェント管理ステップを有し、
前記エージェント管理ステップは、各エージェントが永続記憶装置に存在するか否かを検出する存在検出ステップ、及び該存在検出ステップの判定結果及び各エージェントの複合処理優先度に基づいてエージェントをグループ化しグループ化情報を管理するとともに該グループ化情報を適宜更新するグループ化情報管理ステップを有し、
前記エージェント用指示ステップは、前記エージェント管理ステップにおけるグループ化情報に基づく順番でエージェントにその作動を指示する、
ことを特徴とする(21)〜(25)のいずれかに記載のメッセージ処理方法。
【0156】
(27):エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
エージェント起動原因イベントを受付ける受付ステップ、
前記受付ステップにおいて受付けたエージェント起動原因イベントについての受付順番情報を管理する受付順番情報管理ステップ、
複数個のエージェントを設定するエージェント設定ステップであって各エージェントは、各処理要求元に対応付けられており、永続記憶装置に記憶され、永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり、かつ各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となっているように設定するエージェント設定ステップ、
複数個のスレッドを設定するスレッド設定ステップであって各スレッドは、相互に並列動作可能であり、エージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づいて検出し、かつ各検出処理要求元に係るメッセージ・キューに前記メッセージを挿入するスレッド設定ステップ、
各スレッドにそれが処理を担当するエージェント起動原因イベントを割当てる割当てステップ、
前記受付ステップにおいて受付けた各エージェント起動原因イベントについての各スレッドによる処理の進行状態情報を管理する進行状態情報管理ステップ、
処理進行状態情報がスレッド処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に前記受付ステップにおいて受付けたエージェント起動原因イベントの中にまだスレッド処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する判定ステップ、及び
前記判定ステップにおいて「有る」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を抑制するエージェント制御ステップ、
を有していることを特徴とするメッセージ処理方法。
【0157】
(28):前記判定ステップにおいて「無い」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を許容する前記エージェント制御ステップ、
を有していることを特徴とする(27)記載のメッセージ処理方法。
(29):「無い」と判定されたエージェント起動原因イベントに対して受付順番がその次のエージェント起動原因イベントが、「有る」との判定済みのものであるときは、判定結果を「有る」から「無い」へ変更する前記判定ステップ、
を有していることを特徴とする(28)記載のメッセージ処理方法。
(30):前記判定ステップによる判定結果が「無い」となっている複数個のエージェント起動原因イベントを生成起因とするメッセージが受付順番方向へ連続するメッセージ・キューについての処理をエージェントに実行させる場合、該エージェントにはそれら連続する複数個のメッセージについての処理を連続的に行わせるように前記エージェントを設定する前記エージェント設定ステップ、
を有していることを特徴とする(29)記載のメッセージ処理方法。
(31):(16)〜(30)のいずれかのメッセージ処理方法における各ステップをコンピュータに実行させることを特徴とするメッセージ処理プログラム。
【0158】
【発明の効果】
本発明によれば、受付けたエージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づき割り出して、該当する各処理要求元に対応付けられたエージェントについて永続記憶装置からキャッシュ・メモリへの読込みを効果的に抑制し、処理時間の短縮を実現することができる。
【図面の簡単な説明】
【図1】メッセージ処理システムの概略図である。
【図2】メッセージ処理装置の構成図である。
【図3】エージェントの構成図である。
【図4】別のメッセージ処理装置の構成図である。
【図5】第1の配信制御機構の詳細図である。
【図6】第2の配信制御機構の詳細図である。
【図7】メッセージ処理装置の構成図である。
【図8】図7のサブ配信優先度決定手段及び複合配信優先度決定手段を構成要素として含むエージェント管理手段の全体構成図である。
【図9】メッセージ処理装置の構成図である。
【図10】メッセージ処理方法のフローチャートである。
【図11】図10のフローチャートにおける挿入・読込みステップの詳細図である。
【図12】別のメッセージ処理方法のフローチャートである。
【図13】図12の第1の配信制御ステップの具体的な処理を示す図である。
【図14】図12の第2の配信制御ステップの具体的な処理を示す図である。
【図15】さらに別のメッセージ処理方法のフローチャートである。
【図16】図15のサブ配信優先度決定ステップ等を含む上位ステップを備えるメッセージ処理方法部分のフローチャートである。
【図17】さらに別のメッセージ処理方法のメッセージ処理方法のフローチャートである。
【図18】図17のエージェント制御ステップの配信処理制御の具体例を示す図である。
【図19】エージェント・サーバの概略構成図である。
【図20】エージェント・サーバによる種々の配信方法についての説明図である。
【図21】制御ブロックのデータ構造を示す図である。
【図22】制御ブロックの各変数値の意味を示している表である。
【図23】制御ブロックの状態遷移図である。
【図24】エージェントをその実行優先度ごとのグループ化した状態を示す図である。
【図25】配信起因情報に係る配信用メッセージを、配信先へ配信起因情報の受付け順に配信することを保障するエージェント・サーバの構成図である。
【図26】メッセンジャ・オブジェクトの各処理状態を説明した表である。
【符号の説明】
10 メッセージ処理システム
12 ネットワーク
14 メッセージ処理サーバ
15 情報源クライアント
16 処理要求元コンピュータ
20 メッセージ処理装置
21 処理要求元検索情報
22 処理要求元検索情報管理手段
23 エージェント
24 永続記憶装置
25 キャッシュ・メモリ
27 受付手段
28 リスト情報作成手段
31 エージェント用指示手段
32 繰返し指示手段
34 メッセージ・ハンドラ
35 データ
38 挿入・読込み手段
39 メッセージ・キュー
42 メッセージ処理装置
43 選択手段
44 第1のメッセージ・キュー用処理機構
45 第2のメッセージ・キュー用処理機構
52 メッセージ処理装置
53 処理要求元決定手段
54 サブ処理優先度決定手段
55 複合処理優先度決定手段
56 エージェント用指示手段
59 エージェント管理手段
60 存在検出手段
61 グループ化情報管理手段
62 更新指示手段
65 受付順番情報管理手段
66 割当て手段
67 スレッド
70 進行状態情報管理手段
72 判定手段
73 エージェント制御手段

Claims (31)

  1. エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
    エージェント起動原因イベントを受付ける受付手段、
    前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成手段、
    各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となる複数個のエージェント、
    前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込み手段、
    メッセージが挿入されているメッセージ・キューに係るエージェントにその作動を指示するエージェント用指示手段、及び
    前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込み手段にその処理の繰返しを指示する繰返し指示手段、
    を有していることを特徴とするメッセージ処理装置。
  2. 各エージェントは、該エージェントに対応付けられているメッセージ・キューにおけるメッセージに対して、該エージェントに対応付けられた処理要求元への通知を実施するものであることを特徴とする請求項1記載のメッセージ処理装置。
  3. エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理手段、
    エージェント起動原因イベントを受付ける受付手段、
    前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成手段、
    各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能となっているエージェントであって各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能となる複数個のエージェント、
    第1のメッセージ・キュー用処理機構、
    第2のメッセージ・キュー用処理機構、
    第1及び第2のメッセージ・キュー用処理機構のどちらかを選択する選択手段、及び
    メッセージが挿入されているメッセージ・キューに係るエージェントについて該エージェントがキャッシュ・メモリに有れば該エージェントにその作動を直ちに指示しまた該エージェントがキャッシュ・メモリに無ければ該エージェントを前記永続記憶装置から前記キャッシュ・メモリへ読込んでから該エージェントにその作動を指示するエージェント用指示手段、
    を有し、
    第1のメッセージ・キュー用処理機構は、
    前記リスト情報に含まれる全部の処理要求元に係るメッセージ・キューに前記メッセージを挿入する挿入手段、
    を有し、
    第2のメッセージ・キュー用処理機構は、
    前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込み手段、及び
    前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込み手段にその処理の繰返しを指示する繰返し指示手段、
    を有している、
    ことを特徴とするメッセージ処理装置。
  4. 前記選択手段の選択はオペレータの指示に基づくことを特徴とする請求項3記載のメッセージ処理装置。
  5. 前記選択手段の選択は、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の予測数、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に係るエージェントについてのキャッシュ・メモリにおける予測ヒット率、前記選択手段が第1のメッセージ・キュー用処理機構を選択している場合に前記受付手段が情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、前記選択手段が前記第2のメッセージ・キュー用処理機構を選択している場合に前記受付手段が情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、キャッシュ・メモリ内のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間、及び/又はキャッシュ・メモリ外のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間に基づくことを特徴とする請求項3記載のメッセージ処理装置。
  6. さらに、
    各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する少なくとも1個のサブ処理優先度決定手段、及び
    前記サブ処理優先度決定手段の総個数が2以上であるときは各サブ処理優先度決定手段が各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、前記サブ処理優先度決定手段の総個数が1であるときは該唯一のサブ処理優先度決定手段が各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する複合処理優先度決定手段、
    を有し、
    前記エージェント用指示手段は、各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント同士では、キャッシュ・メモリに存在する方のエージェントを、存在しない方のエージェントより優先してその作動を指示することを特徴とする請求項1記載のメッセージ処理装置。
  7. 前記価値基準には、メッセージの内容に係るもの及びメッセージが適用される処理要求元に係るものがあること特徴とする請求項6記載のメッセージ処理装置。
  8. メッセージの内容に係る所定の価値基準には、メッセージの処理の緊急性に係る価値基準が含まれることを特徴とする請求項7記載のメッセージ処理装置。
  9. メッセージが適用される処理要求元に係る価値基準には、処理要求元の格付けに係る価値基準が含まれることを特徴とする請求項7記載のメッセージ処理装置。
  10. 前記エージェント用指示手段により処理を一旦、開始したエージェントは、該エージェントに係るメッセージ・キューが保持するメッセージが複数個あるとき、それら全部のメッセージについて、又は複合処理優先度が上位から所定番目までのメッセージについて連続処理することを特徴とする請求項6記載のメッセージ処理装置。
  11. 前記サブ処理優先度決定手段及び前記複合処理優先度決定手段を含むエージェント管理手段を有し、
    前記エージェント管理手段は、各エージェントが永続記憶装置に存在するか否かを検出する存在検出手段、該存在検出手段の判定結果及び各エージェントの複合処理優先度に基づいてエージェントをグループ化しグループ化情報を管理するグループ化情報管理手段、及びグループ化情報管理手段にグループ化情報の更新を指示する更新指示手段を有し、
    前記エージェント用指示手段は、前記エージェント管理手段におけるグループ化情報に基づく順番でエージェントにその作動を指示する、
    ことを特徴とする請求項6記載のメッセージ処理装置。
  12. さらに、
    前記受付手段が受付けたエージェント起動原因イベントについての受付順番情報を管理する受付順番情報管理手段、
    相互に並列動作可能である複数個のスレッドであって各スレッドはエージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づいて検出しかつ各検出処理要求元に係るメッセージ・キューに前記メッセージを挿入する複数個のスレッド、
    各スレッドにそれが処理を担当するエージェント起動原因イベントを割当てる割当て手段、
    前記受付手段が受付けた各エージェント起動原因イベントについてのスレッドによる処理の進行状態情報を管理する進行状態情報管理手段、及び
    処理進行状態情報がスレッド処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に前記受付手段において受付けたエージェント起動原因イベントの中にまだスレッド処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する判定手段、
    を有し、
    前記エージェント用指示手段は、
    前記判定手段が「有る」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を抑制するようにして、メッセージが挿入されているメッセージ・キューに係る各エージェントにその作動を指示することを特徴とする請求項1記載のメッセージ処理装置。
  13. 前記判定手段が「無い」と判定した被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を許容する前記エージェント制御手段、
    を有していることを特徴とする請求項12記載のメッセージ処理装置。
  14. 「無い」と判定したエージェント起動原因イベントに対して受付順番がその次のエージェント起動原因イベントが、「有る」との判定済みのものであるときは、判定結果を「有る」から「無い」へ変更する前記判定手段、
    を有していることを特徴とする請求項13記載のメッセージ処理装置。
  15. 前記判定手段による判定結果が「無い」となっている複数個のエージェント起動原因イベントを生成起因とするメッセージが受付順番方向へ連続するメッセージ・キューについての処理を実行する場合は、それら連続する複数個のメッセージについての処理を連続的に行う前記エージェント、
    を有していることを特徴とする請求項14記載のメッセージ処理装置。
  16. エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
    エージェント起動原因イベントを受付ける受付ステップ、
    前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成ステップ、
    複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能であるエージェント設定ステップ、
    前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込みステップ、
    メッセージが挿入されているメッセージ・キューに係るエージェントにその作動を指示するエージェント用指示ステップ、及び
    前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込みステップの繰返しを指示する繰返し指示ステップ、
    を有していることを特徴とするメッセージ処理方法。
  17. 各エージェントは、該エージェントに対応付けられているメッセージ・キューにおけるメッセージに対して、該エージェントに対応付けられた処理要求元への通知を実施するものであることを特徴とする請求項16記載のメッセージ処理装置。
  18. エージェント起動原因イベントに対して該当処理要求元を検索するための処理要求元検索情報を管理する処理要求元検索情報管理ステップ、
    エージェント起動原因イベントを受付ける受付ステップ、
    前記エージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元のリスト情報を前記処理要求元検索情報に基づいて作成するリスト情報作成ステップ、
    複数個のエージェントを設定するエージェント設定ステップであって各エージェントは各処理要求元に対応付けられており永続記憶装置に記憶され永続記憶装置からプログラム実行領域としてのキャッシュ・メモリへ読込み可能及びキャッシュ・メモリから破棄可能であり各エージェントはキャッシュ・メモリに存在しているときのみ作動して該エージェントに対応のメッセージ・キュー内のメッセージについての処理を実施可能であるエージェント設定ステップ、
    第1のメッセージ・キュー用処理ステップ、
    第2のメッセージ・キュー用処理ステップ、
    第1及び第2のメッセージ・キュー用処理ステップのどちらかを選択する選択ステップ、及び
    メッセージが挿入されているメッセージ・キューに係るエージェントについて該エージェントがキャッシュ・メモリに有れば該エージェントにその作動を直ちに指示しまた該エージェントがキャッシュ・メモリに無ければ該エージェントを前記永続記憶装置から前記キャッシュ・メモリへ読込んでから該エージェントにその作動を指示するエージェント用指示ステップ、
    を有し、
    第1のメッセージ・キュー用処理ステップは、
    前記リスト情報に含まれる全部の処理要求元に係るメッセージ・キューに前記メッセージを挿入する挿入ステップ、
    を有し、
    第2のメッセージ・キュー用処理ステップは、
    前記リスト情報に含まれる処理要求元の中から未選択の複数個を挿入・読込み対象処理要求元として選択し該挿入・読込み対象処理要求元に係るメッセージ・キューに、前記メッセージを挿入するとともに、前記挿入・読込み対象処理要求元に係るエージェントを永続記憶装置からキャッシュ・メモリへ読込む挿入・読込みステップ、及び
    前記リスト情報に含まれる処理要求元の中に未選択のものが残っている場合には、作動中の全部のエージェントの処理終了を待って前記挿入・読込みステップの繰返しを指示する繰返し指示ステップ、
    を有している、
    ことを特徴とするメッセージ処理方法。
  19. 前記選択ステップにおける選択はオペレータの指示に基づくことを特徴とする請求項18記載のメッセージ処理方法。
  20. 前記選択ステップにおける選択は、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元の予測数、今回のエージェント起動原因イベントを生成起因とするメッセージが適用される処理要求元に係るエージェントについてのキャッシュ・メモリにおける予測ヒット率、第1のメッセージ・キュー用処理ステップにおいて処理を割当てられた場合に前記受付ステップにおいて情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、第2のメッセージ・キュー用処理ステップにおいて処理を割当てられた場合に前記受付ステップにおいて情報を受け取ってからメッセージが適用される処理要求元のリスト情報を取得しかつメッセージを全部のエージェントのメッセージ・キューに挿入するまでの予測作業時間、キャッシュ・メモリ内のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間、及び/又はキャッシュ・メモリ外のエージェントについてその使用を決定してから該決定したエージェントが処理完了するまでの予測時間に基づくことを特徴とする請求項18記載のメッセージ処理方法。
  21. さらに、
    各メッセージについての処理優先度を単一の価値基準に基づいてサブ処理優先度として決定する少なくとも1個のサブ処理優先度決定ステップ、及び
    前記サブ処理優先度決定ステップの総個数が2以上であるときは各サブ処理優先度決定ステップにおいて各メッセージについて個々に決定したサブ処理優先度に基づいて各メッセージについての複合処理優先度を決定し、また、前記サブ処理優先度決定ステップの総個数が1であるときは該唯一のサブ処理優先度決定ステップにおいて各メッセージについて決定したサブ処理優先度を複合処理優先度として決定する複合処理優先度決定ステップ、
    を有し、
    前記エージェント用指示ステップでは、
    各メッセージ・キューが保持しているメッセージの中で最高複合処理優先度のメッセージを最優先メッセージとし該最優先メッセージの複合処理優先度が同一であるメッセージ・キューに係るエージェント同士では、キャッシュ・メモリに存在する方のエージェントを、存在しない方のエージェントより優先してその作動を指示することを特徴とする請求項16記載のメッセージ処理方法。
  22. 前記価値基準には、メッセージの内容に係るもの及びメッセージが適用される処理要求元に係るものがあること特徴とする請求項21記載のメッセージ処理方法。
  23. メッセージの内容に係る所定の価値基準には、メッセージの処理の緊急性に係る価値基準が含まれることを特徴とする請求項22記載のメッセージ処理方法。
  24. メッセージが適用される処理要求元に係る価値基準には、処理要求元の格付けに係る価値基準が含まれることを特徴とする請求項22記載のメッセージ処理方法。
  25. 前記エージェント用指示ステップにより処理を一旦、開始したエージェントは、該エージェントに係るメッセージ・キューが保持するメッセージが複数個あるとき、それら全部のメッセージについて、又は複合処理優先度が上位から所定番目までのメッセージについて連続処理することを特徴とする請求項21記載のメッセージ処理方法。
  26. 前記サブ処理優先度決定ステップ及び前記複合処理優先度決定ステップを含むエージェント管理ステップを有し、
    前記エージェント管理ステップは、各エージェントが永続記憶装置に存在するか否かを検出する存在検出ステップ、及び該存在検出ステップの判定結果及び各エージェントの複合処理優先度に基づいてエージェントをグループ化しグループ化情報を管理するとともに該グループ化情報を適宜更新するグループ化情報管理ステップを有し、
    前記エージェント用指示ステップは、前記エージェント管理ステップにおけるグループ化情報に基づく順番でエージェントにその作動を指示する、
    ことを特徴とする請求項21記載のメッセージ処理方法。
  27. さらに、
    前記受付ステップにおいて受付けたエージェント起動原因イベントについての受付順番情報を管理する受付順番情報管理ステップ、
    複数個のスレッドを設定するスレッド設定ステップであって各スレッドは、相互に並列動作可能であり、エージェント起動原因イベントを起因とするメッセージが適用される処理要求元を処理要求元検索情報に基づいて検出し、かつ各検出処理要求元に係るメッセージ・キューに前記メッセージを挿入するスレッド設定ステップ、
    各スレッドにそれが処理を担当するエージェント起動原因イベントを割当てる割当てステップ、
    前記受付ステップにおいて受付けた各エージェント起動原因イベントについての各スレッドによる処理の進行状態情報を管理する進行状態情報管理ステップ、及び
    処理進行状態情報がスレッド処理終了に係る情報になっているエージェント起動原因イベント(以下、「被判定エージェント起動原因イベント」と言う。)について、該被判定エージェント起動原因イベントより前に前記受付ステップにおいて受付けたエージェント起動原因イベントの中にまだスレッド処理の未終了になっているエージェント起動原因イベントが有るか無いかを判定する判定ステップ、
    を有し、
    前記エージェント用指示ステップでは、
    前記判定ステップにおいて「有る」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を抑制するようにして、メッセージが挿入されているメッセージ・キューに係る各エージェントにその作動を指示することを特徴とする請求項16記載のメッセージ処理方法。
  28. 前記判定ステップにおいて「無い」と判定された被判定エージェント起動原因イベントを生成起因とするメッセージについてのエージェントによる処理を許容する前記エージェント制御ステップ、
    を有していることを特徴とする請求項27記載のメッセージ処理方法。
  29. 「無い」と判定されたエージェント起動原因イベントに対して受付順番がその次のエージェント起動原因イベントが、「有る」との判定済みのものであるときは、判定結果を「有る」から「無い」へ変更する前記判定ステップ、
    を有していることを特徴とする請求項27記載のメッセージ処理方法。
  30. 前記判定ステップによる判定結果が「無い」となっている複数個のエージェント起動原因イベントを生成起因とするメッセージが受付順番方向へ連続するメッセージ・キューについての処理をエージェントに実行させる場合、該エージェントにはそれら連続する複数個のメッセージについての処理を連続的に行わせるように前記エージェントを設定する前記エージェント設定ステップ、
    を有していることを特徴とする請求項29記載のメッセージ処理方法。
  31. 請求項16〜30のいずれかのメッセージ処理方法における各ステップをコンピュータに実行させることを特徴とするメッセージ処理プログラム。
JP2002355641A 2002-12-06 2002-12-06 メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム Expired - Fee Related JP3864251B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2002355641A JP3864251B2 (ja) 2002-12-06 2002-12-06 メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム
US10/729,057 US7478130B2 (en) 2002-12-06 2003-12-05 Message processing apparatus, method and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002355641A JP3864251B2 (ja) 2002-12-06 2002-12-06 メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム

Publications (2)

Publication Number Publication Date
JP2004192047A JP2004192047A (ja) 2004-07-08
JP3864251B2 true JP3864251B2 (ja) 2006-12-27

Family

ID=32756273

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002355641A Expired - Fee Related JP3864251B2 (ja) 2002-12-06 2002-12-06 メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム

Country Status (2)

Country Link
US (1) US7478130B2 (ja)
JP (1) JP3864251B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180144306A1 (en) * 2005-12-30 2018-05-24 Blackberry Limited Representing new messages on a communication device
US20220004694A1 (en) * 2018-11-13 2022-01-06 Illumy Inc. Methods, Systems, and Apparatus for Email to Persistent Messaging

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7712080B2 (en) * 2003-05-21 2010-05-04 The Regents Of The University Of California Systems and methods for parallel distributed programming
JP4667859B2 (ja) 2004-12-28 2011-04-13 インターナショナル・ビジネス・マシーンズ・コーポレーション エージェントの、メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム
US8938515B2 (en) * 2005-12-29 2015-01-20 Sap Se Master queue for messaging service
US7917656B2 (en) * 2005-12-29 2011-03-29 Sap Ag Statistics monitoring for messaging service
US7739699B2 (en) * 2005-12-29 2010-06-15 Sap Ag Automated creation/deletion of messaging resources during deployment/un-deployment of proxies for the messaging resources
US7877757B2 (en) * 2006-05-05 2011-01-25 Microsoft Corporation Work item event monitor for procession of queued events
US7844759B1 (en) * 2006-07-28 2010-11-30 Cowin Gregory L System, method, and computer readable medium for processing a message queue
US7814500B2 (en) * 2006-11-30 2010-10-12 Sap Ag Event correlation for decentralized message processing
US9009187B2 (en) * 2006-12-19 2015-04-14 Ianywhere Solutions, Inc. Assigning tasks to threads requiring limited resources using programmable queues
JP5181184B2 (ja) 2008-03-28 2013-04-10 インターナショナル・ビジネス・マシーンズ・コーポレーション エージェントを実行する装置及び方法
US8782147B2 (en) * 2010-09-09 2014-07-15 Red Hat, Inc. Concurrent delivery for messages from a same sender
US9164886B1 (en) * 2010-09-21 2015-10-20 Western Digital Technologies, Inc. System and method for multistage processing in a memory storage subsystem
US10275736B1 (en) * 2012-12-06 2019-04-30 Google Llc Updating information in a product database
US20140281930A1 (en) * 2013-03-15 2014-09-18 Fuji Xerox Co., Ltd. System and methods for creating printouts that may be manipulated by mfd
US10075345B2 (en) * 2016-04-06 2018-09-11 Wyse Technology L.L.C. Cloud based manual discovery of devices in a device management environment
CN107733945B (zh) * 2016-08-11 2019-03-12 北京百度网讯科技有限公司 用于机器人操作系统的信息传输方法及装置
CN107797902B (zh) * 2016-09-06 2021-07-30 北京百度网讯科技有限公司 用于监控机器人操作系统的消息传输频率的方法和装置
CN107656790A (zh) * 2017-09-29 2018-02-02 惠州Tcl移动通信有限公司 一种事件处理界面的切换方法、存储介质及移动终端
JP7353836B2 (ja) * 2019-07-16 2023-10-02 キヤノン株式会社 情報処理装置、方法およびプログラム
US11860788B2 (en) * 2021-09-08 2024-01-02 Red Hat, Inc. Prefetching data in a distributed storage system

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317738A (en) * 1992-02-18 1994-05-31 Ncr Corporation Process affinity scheduling method and apparatus
US6442585B1 (en) * 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6148324A (en) * 1998-01-05 2000-11-14 Lucent Technologies, Inc. Prioritized load balancing among non-communicating processes in a time-sharing system
JP3734206B2 (ja) * 1998-05-01 2006-01-11 インターナショナル・ビジネス・マシーンズ・コーポレーション エージェント対話管理方法、コンピュータ及び記憶媒体
US20020135611A1 (en) * 1999-03-04 2002-09-26 Trevor Deosaran Remote performance management to accelerate distributed processes
GB2348306B (en) * 1999-03-25 2003-07-30 Ibm Data processing systems and method for processing tasks in such systems
US6665699B1 (en) * 1999-09-23 2003-12-16 Bull Hn Information Systems Inc. Method and data processing system providing processor affinity dispatching
US6633954B1 (en) * 2000-03-31 2003-10-14 Emc Corporation Method for enhancing host application performance with a DASD using task priorities
US6604174B1 (en) * 2000-11-10 2003-08-05 International Business Machines Corporation Performance based system and method for dynamic allocation of a unified multiport cache
US7089555B2 (en) * 2001-06-27 2006-08-08 International Business Machines Corporation Ordered semaphore management subsystem
WO2003014927A2 (en) * 2001-08-08 2003-02-20 Trivium Systems Inc. Scalable messaging platform for the integration of business software components
US20030037091A1 (en) * 2001-08-09 2003-02-20 Kozo Nishimura Task scheduling device
US7103889B2 (en) * 2002-07-23 2006-09-05 Sun Microsystems, Inc. Method, system, and article of manufacture for agent processing
US7852865B2 (en) * 2002-11-26 2010-12-14 Broadcom Corporation System and method for preferred service flow of high priority messages

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180144306A1 (en) * 2005-12-30 2018-05-24 Blackberry Limited Representing new messages on a communication device
US11615378B2 (en) * 2005-12-30 2023-03-28 Blackberry Limited Representing new messages on a communication device
US20220004694A1 (en) * 2018-11-13 2022-01-06 Illumy Inc. Methods, Systems, and Apparatus for Email to Persistent Messaging
US11599704B2 (en) * 2018-11-13 2023-03-07 Illumy Inc. Methods, systems, and apparatus for email to persistent messaging
US11636250B2 (en) 2018-11-13 2023-04-25 Illumy Inc. Methods, systems, and apparatus for Text Message to persistent messaging
US11966684B2 (en) 2018-11-13 2024-04-23 Illumy Inc. Methods, systems, and apparatus for email to persistent messaging

Also Published As

Publication number Publication date
JP2004192047A (ja) 2004-07-08
US20040202165A1 (en) 2004-10-14
US7478130B2 (en) 2009-01-13

Similar Documents

Publication Publication Date Title
JP3864251B2 (ja) メッセージ処理装置、メッセージ処理方法、及びメッセージ処理プログラム
US9721219B2 (en) High-load business process scalability
US8484061B2 (en) Scheduling sessions of multi-speaker events
US7209916B1 (en) Expression and flexibility framework for providing notification(s)
Li et al. A distributed service-oriented architecture for business process execution
US6292825B1 (en) Service application with pull notification
US20060241996A1 (en) Method, system and program product for monitoring work items
US20040002988A1 (en) System and method for modeling subscriptions and subscribers as data
US20070112918A1 (en) Systems and methods for screening chat requests
US20040002972A1 (en) Programming model for subscription services
JP5713340B2 (ja) イベントの通知を送信する方法、並びにそのコンピュータ及びコンピュータ・プログラム
US20080183528A1 (en) Intelligent event adaptation mechanism for business performance monitoring
EP2665001A2 (en) Architectural pattern for persistent web application design
CN107944000B (zh) 航班运价更新方法、装置、电子设备、存储介质
WO2005098642A2 (en) Methods and systems for processing email messages
US10185605B2 (en) In-order message processing with message-dependency handling
US9741040B2 (en) High-load business process scalability
JP2004348680A (ja) 複合イベント通知システムおよび複合イベント通知プログラム
US8694462B2 (en) Scale-out system to acquire event data
US20060149819A1 (en) Responding to electronic mail messages
US12067529B2 (en) Bundling line item based events in an event-driven architecture
US20080148266A1 (en) Method and System for Reducing Difference In The Time of Retrieval of Data Retrieved From Different Sources
US20140173012A1 (en) System and method for managing email send jobs
US20130031186A1 (en) Systems and methods for secure message delivery to a transient recipient in a dynamically routed network
US10798208B2 (en) Availability data caching in meeting systems

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060201

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060424

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060427

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060522

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: 20060906

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20060906

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060912

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20091013

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20101013

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees