JP2004246789A - Program function expansion system, program function expansion method, program function expansion program and record medium - Google Patents

Program function expansion system, program function expansion method, program function expansion program and record medium Download PDF

Info

Publication number
JP2004246789A
JP2004246789A JP2003038316A JP2003038316A JP2004246789A JP 2004246789 A JP2004246789 A JP 2004246789A JP 2003038316 A JP2003038316 A JP 2003038316A JP 2003038316 A JP2003038316 A JP 2003038316A JP 2004246789 A JP2004246789 A JP 2004246789A
Authority
JP
Japan
Prior art keywords
api
function
old
alternative
program
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.)
Pending
Application number
JP2003038316A
Other languages
Japanese (ja)
Inventor
Keitaro Horikawa
桂太郎 堀川
Toru Nishimura
徹 西村
Hiroaki Fukazawa
広明 深澤
Toshiya Umezaki
利矢 梅崎
Ryuichi Hino
隆一 日野
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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2003038316A priority Critical patent/JP2004246789A/en
Publication of JP2004246789A publication Critical patent/JP2004246789A/en
Pending legal-status Critical Current

Links

Images

Abstract

<P>PROBLEM TO BE SOLVED: To avoid reduction in productivity caused by a change of an API, and to realize substantial function expansion without changing the API. <P>SOLUTION: When calling a method mounted with an old API by use of a reflection function of a program language processing execution system, control is transferred to a meta-level process (a processing system level, a level allowing execution of behavior of a meta-object such as a class or a method), execution of an old method is snatched in a meta-level, and a new method corresponding to an old method object is retrieved and is executed instead of the old method inside the meta-level process. Thereby, if a client only executes a code calling the old API as it is without changing the code, a process corresponding to a new API is substitutionally executed in the meta-level. <P>COPYRIGHT: (C)2004,JPO&NCIPI

Description

【0001】
【発明の属する技術分野】
本発明は、APIを介して協調動作するプログラムを連携・管理する機構に係り、特に互換性を維持しながら機能拡張するプログラム機能拡張システム、プログラム機能拡張方法、プログラム機能拡張プログラムおよび記録媒体に関する。
【0002】
【従来の技術】
インターネット上のサービス開発において生産性を向上し開発時間を短縮するための方法として、サービス連携、Webサービスといった技術領域がある。また、EAI(Enterprise Application Integration)技術等も既存システムを連携させてサービスを構築する方法である(例えば、非特許文献1、2参照)。
【0003】
連携サービス機構上では、複数のサービスが協調動作する。このような状況において、機能を提供するプログラムとそれを利用するプログラムとの間のインタフェースがAPI(Application Programming Interface)である。
【0004】
API提供プログラム(サーバ:Server)は、当該機能を実装し、APIとして公開する一方で、API利用側プログラム(クライアント:Client)は、自らのアプリケーションロジックを実装する中で当該APIに基づいて機能を呼び出すため、APIは、両者が遵守すべき規約(プロトコル)と見なすことができる。
【0005】
従来、CORBA技術やJ2EE(Java(登録商標)2 Enterprise Edition)におけるEJB(Enterprise JAVA(登録商標)Beans)技術では、ネーミングおよびディレクトリ機能を提供する機能を用いて、名前で間接的にインタフェースを参照する手法がとられていた(例えば、非特許文献3、4参照)。しかしながら、API利用側プログラム(クライアント)側は、新しい機能を呼び出す部分では、新しいインタフェースを意識する必要があった。すなわち、クライアント側の呼び出し部分でプログラムの修正が必須であった。また、インタフェース単位での機能の差し替えは可能であるが、オブジェクト・メソッド単位での機能の交換は想定していない。
【0006】
【非特許文献1】
日野隆一 外1名、「プラットフォーム連携によるAP開発手法の提案」,電子情報通信学会,2002年3月22日発行、電子情報通信学会技術研究報告KBSE2001−72,pp.57−64
【非特許文献2】
堀用桂太郎 外1名、「システム間の連携I/Fとその拡張による影響の考察」,電子情報通信学会,2002年12月12日発行、電子情報通信学会技術研究報告vo1.102、N0.503,pp.7−12
【非特許文献3】
オーファリ、ロバート他、「JAVA(登録商標)&CORBA C/S プログラミング」,日経BP社出版,1999年1月発行,pp.11、62,3353,359
【非特許文献4】
マイケルガードレー他、「J2EE&BEA WebLogic Server 開発者ガイド」、ピアソンエデスケーション、2001年11月発行、pp.26,173−208,236
【0007】
【発明が解決しようとする課題】
ところで、プログラムの開発プロセスでは、一般に、大小さまざまなレベルで仕様変更や機能拡張が発生する。既存システムを連携する開発環境においても同様に、構成要素である個々のシステムが独自に機能拡張する、全体として不足する機能を補う要求が発生するなどの理由から、API変更が避けられないケースが少なからず存在する。
【0008】
単純なバグの修正など、インタフェースを変えない範囲での修正については、影響範囲がインタフェースの外部に及ばないため、修正・テストのコストを抑えることが可能であるが、上述した通り、APIは、それを介して協調動作するプログラム間の規約であるため、当該APIの変更によってそれを遵守しているすべてのプログラムに影響が及ぶ。これは本質的に不可避な問題である。
【0009】
したがって、APIの変更に伴い、APIを提供するサーバおよびそれを利用する全てのクライアントにおける追加機能の実装および試験作業が必須となり、結果として開発コストが増加する。
【0010】
また、変更前のAPIで動作試験が済んだ定常状態の品質に対し、新たな機能追加を行うことは品質を低下する要因になりかねず、品質面でのリスクを高めることになる。
【0011】
さらに、API拡張によってインタフェースが変わることに対し、互換性を保証するための機能追加および試験コストも含めると、開発全体のコストをより一層増加させる問題が生じている。
【0012】
この発明は上述した事情に鑑みてなされたもので、APIを変更することに起因する生産性の低下を回避し、APIを変更せずに実質的な機能拡張を実現することができるプログラム機能拡張システム、プログラム機能拡張方法、プログラム機能拡張プログラムおよび記録媒体を提供することを目的とする。
【0013】
【課題を解決するための手段】
上述した問題点を解決するために、請求項1記載の発明では、APIを介して協調動作する複数プログラムの連携を管理し、プログラム間の規約であるAPIの変更に際し、API互換性を維持しながら旧API機能を新API機能へ拡張するプログラム機能拡張システムであって、旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除する代替処理管理手段と、旧API機能の起動・実行を制御するメタレベル処理において前記代替処理管理手段を用いて旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得する代替処理オブジェクト取得手段と、API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記代替処理オブジェクト取得手段で取得した代替処理オブジェクトを実行する代替処理オブジェクト実行手段と、前記代替処理オブジェクト実行手段の代替処理オブジェクト実行に際し、代替機能と旧API機能と融合した処理を実行する融合処理実行手段とを具備することを特徴とする。
【0014】
また、請求項2記載の発明では、請求項1記載のプログラム機能拡張システムにおいて、代替処理管理手段は、キーとして旧API処理オブジェクトと、新API処理オブジェクトとを対応付けて格納するハッシュテーブルで実現されることを特徴とする。
【0015】
また、請求項3記載の発明では、請求項2記載のプログラム機能拡張システムにおいて、前記代替処理管理手段は、旧API処理オブジェクトをキーに新API処理オブジェクトを検索した結果、キーに対応する値が空であれば、旧API処理をそのまま実行して結果を返す一方、キーに対応する値が空でなく新API処理オブジェクトが割り当てられている場合は、新API処理オブジェクトを取り出し、代替処理を実行するためのメッセージを発行することを特徴とする。
【0016】
また、請求項4記載の発明では、請求項2記載のプログラム機能拡張システムにおいて、前記代替処理管理手段は、Singletonデザインパターンに基づいて構成されていることを特徴とする。
【0017】
また、上述した問題点を解決するために、請求項5記載の発明では、APIを介して協調動作する複数プログラムの連携を管理し、プログラム間の規約であるAPIの変更に際し、API互換性を維持しながら旧API機能を新API機能へ拡張するプログラム機能拡張方法であって、旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除し、旧API機能の起動・実行を制御するメタレベル処理において旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得し、API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記取得された代替処理オブジェクトを実行し、前記代替処理オブジェクト実行において、代替機能と旧API機能と融合した処理を実行することを特徴とする。
【0018】
また、上述した問題点を解決するために、請求項6記載の発明では、APIを介して協調動作する複数プログラムの連携を管理し、プログラム間の規約であるAPIの変更に際し、API互換性を維持しながら旧API機能を新API機能へ拡張するプログラム機能拡張方法であって、プログラム言語処理実行系に備わるリフレクション機能を用いて、旧API機能を実装するメソッドの呼び出しに際して、メタレベルの処理に制御を移し、メタレベルにおいて旧メソッドの実行を横取りし、旧メソッドオブジェクトに対応する新メソッドを検索し、メタレベル処理内部で当該旧メソッドに代わって新メソッドを実行することを特徴とする。
【0019】
また、請求項7記載の発明では、請求項6記載のプログラム機能拡張方法において、旧APIに対応する機能を実現する旧API処理オブジェクトと、新APIに対応する機能を実現する新API処理オブジェクトとを対応づけて管理することを特徴とする。
【0020】
また、上述した問題点を解決するために、請求項8記載の発明では、旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除するステップと、旧API機能の起動・実行を制御するメタレベル処理において旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得するステップと、API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記取得された代替処理オブジェクトを実行するステップと、前記代替処理オブジェクト実行において、代替機能と旧API機能と融合した処理を実行するステップとをコンピュータに実行させることを特徴とする。
【0021】
また、上述した問題点を解決するために、請求項9記載の発明では、旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除するステップと、旧API機能の起動・実行を制御するメタレベル処理において旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得するステップと、API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記取得された代替処理オブジェクトを実行するステップと、前記代替処理オブジェクト実行において、代替機能と旧API機能と融合した処理を実行するステップとをコンピュータに実行させるプログラム機能拡張プログラムを記録したことを特徴とする。
【0022】
この発明では、プログラム言語処理実行系に備わるリフレクション機能を用いて、旧APIを実装するメソッドの呼び出しに際して、メタレベルの処理(処理系レベル、クラスやメソッドなどメタオブジェクトの振る舞いを実行するレベル)に制御を移し、メタレベルにおいて旧メソッドの実行を横取りし、旧メソッドオブジェクトに対応する新メソッドを検索し、メタレベル処理内部で当該旧メソッドに代わって実行する。したがって、API利用側は、旧APIを呼び出すコードを変更することなくそのまま実行するだけで、メタレベルにおいて新しいAPIに対応する処理が代替実行され、結果として、APIの互換性を保ったまま機能拡張が可能になる。
【0023】
【発明の実施の形態】
以下、図面を用いて本発明の実施の形態を説明する。
【0024】
図1は、本発明の実施形態によるプログラム機能拡張方法の作用および効果を示す概念図である。なお、本実施形態によるプログラム機能拡張方法は、JAVA(登録商標)言語、Python言語などリフレクション機能を有する言語処理系を利用する。図では、旧API機能を新API機能に拡張する状況で、新APIでは新たに1つ追加パラメタが必要になる事例を示している。サーバプログラム10において、APIを実装・公開しているオプジェクトをreceiverとする。また、クライアントプログラム20において、サーバのAPIを呼び出すオブジェクトをsenderとする。サーバプログラム10とクライアントプログラム20とは、同一の言語処理実行系(JAVA(登録商標)のVM相当)に含まれていてもよく、また、JAVA(登録商標) RMIなどの分散オブジェクト機構を介して連携していてもよい。
【0025】
旧API機能40は、入力として2つのオブジェクト(x,y)を与え,結果として「v」を出力する機能で、receiverオプジェクトのmethodメソッドで実現されているものとする。一方、新API機能50は、入力として3つのオブジェクト(x,y,z)を与え、結果として「φ(V)」を出力する機能であるが、予めreceiverオブジェクトのmethodメソッドで実現されていなくてもよい。
【0026】
クライアントプログラム20がサーバプログラム10に対して旧APIを呼び出すプロトコル30は、senderオブジェクトの実行スレッドにおいて、receiverオブジェクトに対して、「v=receiver.method(x,y)」というメソッドリクエストを発行する。
【0027】
ここで、本発明の特徴は、サーバプログラム10におけるreceiverオブジェクトの実装、クライアントプログラム20におけるsenderオブジェクトの実装、およびメソッドリクエスト呼び出しプロトコル30: v=receiver.method(x,y)のいずれも変えることなく、旧API機能40を新API機能50に改変することである。
【0028】
新API機能50の実装は、Executableインタフェースを実装するオブジェクトとして定義する。Executableインタフェースは、必須メソッドとして、「public Object Executable#execute(Object[] args)」なるメソッドを求める。
【0029】
Commandデザインパターンを適用し、Executableインタフェースを実装するオブジェクトを定義するか、「new Executable(){ public Object execute(Object[] args){/*新API機能のロジック*/}}」として無名クラスのオブジェクトとして実現する。
【0030】
新API機能の実装は、クライアントプログラム内でも、サーバプログラム内でも、第三者プログラム内でもいずれにおいて定義してよい。
【0031】
execute()メソッドの本体に、新API機能:入力として3つのオブジェクト(x,y,z)を与え、結果として「φ(V)」を出力する機能を定義する。この時、新API機能の実現のための情報として、receiverオブジェクト、senderオブジェクト、receiver#method()メソッドオブジェクト、実パラメタx,y、追加の実パラメタzおよび該zを取得するメソッドgetZ()などが必要となる場合には、これらの取得のための処理をexecute()メソッド内に定義する。
【0032】
例えば、execute()に対するパラメタ:Object[] argsに実体を格納して渡すこと、Executableインタフェースを実装するオブジェクトの生成時のパラメタとして渡すこと、sender,receiverオブジェクトヘのメソッドコールバックによって実行時に取得すること、外部ファイルやネットワークを通じて通信すること、などの手段によって任意の方法で必要な情報を取得できるため、execute()の定義に特に制約はない。
【0033】
また、状況に応じて多種類の異なる処理を実行したい場合には、Executableを実装するクラスを1つ設け、そのクラス内で、異なる処理毎に1つの内部クラスとして定義することで多様な処理を1つのクラス内に束ねて定義する。これにより、処理の追加削除は、内部クラスの追加・削除で実現できるため、多くの小さなクラスをバラバラに定義・作成することなく、整理された形で一連の処理集合を管理できる。
【0034】
Commandデザインパターンを適用することで、Executableを実装したオブジェクトは、統一的に外部からexecute()メソッドコールにて起動し、所望の処理を実施する。
【0035】
次に、図2は、本発明の実施形態によるプログラム機能拡張の実現手段を具体例とともに示す概念図である。図2において、代替処理管理部100は、新API機能を実現したExecutable実装オブジェクト(新API処理オブジェクト)200を、代替したい旧API機能を実装したMethodオブジェクト(旧API処理オブジェクト)R#method(x,y)と対応付けて管理する。代替処理管理部100は、ハッシュテーブルを持つか、ハッシュテーブル機能を継承して実現する。
【0036】
旧API機能を実装したreceiverオブジェクトのMethodオブジェクトは、「receiver.getClass().getDeclaredMethod(“method”,new Class[]{x.class,y.class})」により取得し、これをハッシュテーブルのキーに、対応する値として新API機能を実装したExecutable実装オブジェクトを管理に加える。
【0037】
当該ハッシュテーブルにキー・値のペアが登録されているMethodオブジェクトは、その代替処理が定義されていることを意味し、キーもしくは値が登録されていないものは代替処理がない、つまり元の処理を実行することを意味する。
【0038】
したがって、キーとなるMethodに対して、値となるExecutable実装オブジェクトを割り当てる(register)ことで代替処理の付与、削除する(remove)ことで代替処理の削除=元の処理に戻す、別のExecutable実装オブジェクトを割り当てる(update)ことで代替処理の変更、という3種類の操作が可能となる。
【0039】
Method起動ハンドラ部500は、旧APIを提供するオブジェクトに対して旧APIメソッド呼び出し時にフックされ、代理オブジェクト、当該メソッドオブジェクト、呼び出し時の実パラメタをオブジェクトとして取得できる機構である。
【0040】
java.lang.reneet.InvocationHandlerインタフェースの「public Object invoke(Object proxy,Method m,Object[] args)」を実装定義したメソッドの中で、代理処理管理部100の機能を呼び出し、当該メソッドオブジェクトに対応する代替処理オブジェクトを検索・実行する。
【0041】
以下に、詳細に説明する。本実施形態では、APIの拡張に際し、API提供側(サーバ)もAPI利用側(クライアント)もプログラムコードを修正することなく、APIおよび当該機能を拡張する。
【0042】
具体的には、プログラム言語処理実行系に備わるリフレクション機能を用いて、旧APIを実装するメソッドの呼び出しに際して、メタレベルの処理(処理系レベル、クラスやメソッドなどメタオブジェクトの振る舞いを実行するレベル)に制御を移し、メタレベルにおいて旧メソッドの実行を横取りし、旧メソッドオブジェクトに対応する新メソッドを検索し、メタレベル処理内部で当該旧メソッドに代わって実行することを実現する。
【0043】
これにより、クライアントは、旧APIを呼び出すコードを変更することなくそのまま実行するだけで、メタレベルにおいて新しいAPIに対応する処理が代替実行され、結果として、APIの互換性を保ったまま機能拡張が可能になる。
【0044】
旧API処理オブジェクトは、Methodオブジェクト(JAVA(登録商標) APIではjava.lang.reflect.Methodクラスのインスタンス)で取得でき、新API処理オブジェクトは代替となるMethodオブジェクトもしくはCommandデザインパターンにより処理を具現化したオブジェクトで与える。
【0045】
Commandデザインパターンで処理を具現化したオブジェクトとは、Interfaceで規定した必須メソッド(例えば,Executable#execute(Object[]args)など)を1つ以上伴うオブジェクトであり、処理に必要な0個以上のオブジェクトの参照を束ねてインスタンス化し、interfaceで規定したメソッドを呼び出すことで任意の処理を定義するものである。
【0046】
代替処理管理部100は、ハッシュテーブル(JAVA(登録商標) APIでは、java.util.Hashtableクラスのインスタンス)で実現し、キーとして旧API処理オブジェクト、対応する値として新API処理オブジェクトを格納する。
【0047】
当該代替処理管理部100に対して旧API処理オブジェクトをキーに新API処理オブジェクトを検索した結果、キーに対応する値が空(null)であれば、旧API処理をそのまま実行して結果を返す。一方、キーに対応する値が空でなく、新API処理オブジェクトが割り当てられている場合には、新API処理オブジェクトを取り出し、代替処理を実行するためにexecute()メッセージを発行する。
【0048】
その際、旧APIの処理結果を利用する必要があれば、旧API処理オブジェクトを新API処理オブジェクトに渡して、処理を融合できる。例えば、旧APIのメソッド呼び出し直後・復帰直前でデバッグログを出力する、あるいは、メソッド本体の処理に要する時間を計時し性能測定に利用する処理も、代替処理オブジェクトの中で、旧APIメソッドと付加機能の融合を行えばよく、本方法によって統一的に実現できる。
【0049】
代替処理管理部100は、Singletonデザインパターンに基づき設計・実装する。これにより、同一の処理系(Java(登録商標)であればJAVA(登録商標) VM)中には唯一の存在であることを保証するとともに、特定のオブジェクトが代替処理管理クラスを参照するために(インスタンス変数で保有するなど)密結合することなく、(代替処理管理クラス#getInstance()により)任意のメソッド中から適切に参照できるようにする。
【0050】
したがって、旧API処理の起動時に、メソッド起動を実行するメタレベル処理のメソッド内でも当該代替処理管理クラスを参照することが可能となり、旧APIメソッドの実行契機に、対応する新API処理オブジェクトを検索し実行できる。
【0051】
サーバ開発者、クライアント開発者、あるいはその両者以外の第三者により、新API処理オブジェクトが用意され、旧APIとの対応関係を動的に結びつけることができる。つまり、旧APIを介して協調動作する複数プログラムの実行中に、旧APIに対応した代替処理を追加・変更・削除することが可能となり、機能拡張・旧機能への回帰以外にも、実行時に動的に振る舞いを変更することができる。
【0052】
旧APIのメソッド起動処理のメタレベル処理にアクセスするために、旧APIメソッド実行時のコンテキスト、すなわち実行しようとする{インスタンス、メソッド、実パラメタ}のすべてを取得し、メタレベルにおいてユーザが定義した処理と動的に結びつける。例えば、利用言語がJava(登録商標)であれば、Java(登録商標)リフレクション機能のダイナミックプロキシを利用する。すなわち、java.lang.ProxyクラスとAPI呼び出しハンドラjava.lang.InvocationHandler#invoke()を用いることで上記動作を行うことができる。
【0053】
前出の動的に処理を結びつける中で、代替処理管理クラスにアクセスし、旧APIメソッドオブジェクトに対応する代替処理を実行する。これにより、API呼び出しインクフェースを変更せず、実質的なAPIの機能拡張が実現でき、サーバとクライアント双方のプログラムに修正が加わらないため、互換性を維持しながら機能拡張を行うことが容易に実現される。また、試験プログラムも変更する必要がないため試験作業も簡易になる。
【0054】
図3は、本発明の実施形態によるプログラム機能拡張を実現するための機能構成を示すブロック図である。代替処理管理部100は、代替処理検索部110、代替処理登録部111、代替処理更新部112、代替処理削除部113、代替処理検索・実行部114、代替処理合成・実行部115から構成される。代替処理検索部110は、旧APIのメソッドをキーに代替処理を検索する機能を有するもので、前述したようにハッシュテーブルの検索機構を用いて実現できる。代替処理登録部111は、旧APIのメソッドをキーに代替処理を登録する機能を有するもので、前述したようにハッシュテーブルへの追加機能を用いて実現できる。
【0055】
代替処理更新部112は、旧APIのメソッドをキーに代替処理を更新する機能を有するもので、前述したようにハッシュテーブルへの追加機能を用いて実現できる。代替処理削除部113は、旧APIのメソッドをキーの代替処理を削除し、本来の機能に戻すもので、前述したようにハッシュテーブルからの値の削除機能を用いて実現できる。代替処理検索・実行部114は、旧APIのメソッドをキーに代替処理を検索すると同時に、自動的に代替処理を実行する機能を有するもので、代替処理検索機能とExecutableオブジェクトヘのexecute()メッセージの発行で実現できる。代替処理合成・実行部115は、旧APIのメソッドをキーに代替処理を検索すると同時に、自動的に旧APIメソッドの実行と、代替処理を実行する機能を有するもので、代替処理検索機能と、旧APIメソッドの起動と、Executableオブジェクトヘのexecute()メッセージの発行で実現できる。
【0056】
代替処理オブジェクト定義部201は、代替処理管理部100へ登録するためのExecutable実装オブジェクトを定義する機能を有する。通常、JAVA(登録商標)のソースコードを編集・コンパイルし、生成されたclassファイルを外部からJAVA(登録商標) VMに見える位置に配置することで実現できる。
【0057】
Method起動ハンドラ部501は、代替処理管理部100に代替処理の登録有無を問合せ、代替処理の実行を依頼する機能を有する。旧APIメソッドの実行要否や、代替処理の前後で付加的な処理(ログ出力、プロファイル情報の出力、パフォーマンス情報の出力など)の追加要否、代替処理自体の登録・変更・削除など、代替処理の実行時の振る舞いに応じて、複数種類のMethod起動ハンドラ部が存在することが可能である。JAVA(登録商標)リフレクション機能のダイナミックプロキシクラスを用いて、メソッドの起動をフックした後に、代替処理管理部100を呼び出すことで実現できる。
【0058】
クライアントプログラム部301は、旧APIを呼び出し、結果を利用して高次のビジネスロジックを実行制御する部分である。ビジネスロジックの種類に応じて複数のクライアントプログラムが存在し得る。サーバプログラム部401は、旧APIを実現する機能を具備し、旧APIを公開し、APIへのリクエストを実行し結果を返すプログラムを実行制御する部分である。APIの種類や提供プログラムに応じて、複数のサーバプログラムが存在し得る。
【0059】
言語処理実行系1000は、代替処理管理部100、代替処理オブジェクト定義部201、クライアントプログラム部301、サーバプログラム部401,Method起動ハンドラ部501をそれぞれ実行制御する言語処理実行系である。JAVA(登録商標)言語の場合、JAVA(登録商標) VMに相当する。必ずしも唯一の存在である必要はなく、JAVA(登録商標) RMI技術を利用することでオブジェクトの一意性を保証する範囲で、分散したJAVA(登録商標) VM構成でも構わない。
【0060】
次に、本発明の実施形態によるプログラム機能拡張を実現するための具体例について説明する。ここで、図4ないし図8は、具体的なプログラム例を示す概念図である。図4は、サーバプログラム中のreceiverオブジェクトの一実装例を示したものである。Receiverインタフェースは、oldAPI(String,String)とnewAPI(String,String,String)の2つのAPIを公開している。前者は旧APIを、後者は新APIを表すとする。後者は必ずしも予めサーバプログラム中に定義してある必要はない。これは、説明を簡明にするためにReceiverインタフェースに敢えて予め用意したものである。ReceiverImplクラスは、上記Receiverインタフェースを実装した具象クラスである。oldAPI(),newAPI()ともにパラメタで与えられた文字列を合成して返す機能を実現している。
【0061】
本発明を適用することにより、旧APIを利用しているクライアント側プログラムは、2つの文字列を伴ってoldAPI(String,String)を呼び出すロジックを変えることなく(つまり互換性を保ちながら)、API拡張の後に、拡張API機能の実装であるnewAPI(String,String,String)を自動的に呼び出す。
【0062】
次に、図5は、クライアントプログラム中のSenderオブジェクトの一実装例を示したものである。Senderインクフェースは、callOldAPI(String,String)とcallNewAPI(String,String,String)の2つのAPIを公開している。前者は旧APIを、後者は新APIを表す。後者は必ずしも予めクライアントプログラム中に定義してある必要はない。これは、説明を簡明にするためにSenderインタフェースに敢えて用意したものである。
【0063】
SenderImplクラスは、上記Senderインタフェースを実装した具象クラスである。インスタンス変数としてReceiverインタフェースを実装したオブジェクトreceiverを有し、これに対しAPI呼び出しを発行する。callOldAPI(),callNewAPI()ともにパラメタで与えられた文字列をそれぞれ、receiver#oldAPI(),receiver#newAPI()に渡してAPIを呼び出し、結果として返ってくる合成された文字列を標準出力する。
【0064】
本発明を用いると、callOldAPI()を利用しているクライアント側プログラムは、2つの文字列を伴ってreceiver.oldAPI(String,String)を呼び出すロジックを変えることなく(つまり互換性を保ちながら)、API拡張の後に、receiver,newAPI(String,String,String)を呼び出すように自動的に機能拡張に対応する。
【0065】
SenderImplクラスのchangeAPI()メソッドは、旧APIに対して代替処理を定義して登録する機能を持っている。このメソッドは、必ずしもクライアントプログラム中に定義してある必要はない。ここでは、説明を簡単にするためにSenderImpl中に定義しているが、Executable実装オブジェクトの定義方法を変えれば、第三者のプログラム中に実装することも可能である。
【0066】
この例では、“Sender”クラスの“callOldAPI”というメソッドに対して、「代替処理管理部に対して、Receiver#oldAPI()の代替処理Xを登録する」という代替処理を定義し登録している。それと同時に前述の“Receiver”クラスの“oldAPI”メソッドに対する代替処理Xとして、「callNewAPI(String,String,String)メソッドを呼び出す」という代替処理を定義し登録している。
【0067】
SenderImplクラスのmain()メソッドが、本発明の利用方法を示す例である。まずメソッド呼び出しをフックするために代理クラスとしてオブジェクトを生成する。次に、旧APIを変更する前の処理としてsender.callOldAPI()とsender.callNewAPI()を呼び出す。それぞれ与えられたパラメタの文字列を連結して出力する。その後、上述したSenderImpl#changeAPI()を呼び出すことで、sender.callOldAPI()と、その中で呼ばれているreceiver.oldAPI()の2つの旧APIの代替処理を作成・登録する。
【0068】
このAPI変更後に、全く同じ呼び出し形式でsender.callOldAPI()とsender.callNewAPI()を呼び出す。その動作は、次のようなシーケンスとなる。
【0069】
sender.callOldAPI()の実行は、メソッド起動ハンドラにフックされ、代替処理に置き換わって実行されるため、前述した「代替処理管理部に対して、Receiver#oldAPI()の代替処理Xを登録する」が実行される。
【0070】
それとともに、sender.callOldAPI()の本来の処理であるreceiver.oldAPI()処理が実行されるが、この処理も前述した代替処理X:「callNewAPI(String,String,String)メソッドを呼び出す」に置き換わって実行されるため、結果としてsender.callNewAPI()を実行したことになる。
【0071】
この時、sender.callOldAPI()では2つのパラメタを渡しているが、代替処理として呼ばれるsender.callNewAPI()の第3番目のパラメタは、ServerImpl.this.getZ()という処理で捕完される。これは、ServerImpl#changeAPI()中で定義したExecutable実装オブジェクトの定義で与えた動作である。
【0072】
最終的に、旧APIの変更後に呼ばれるsender.callOldAPI()の処理は、その呼出形式を全く変えることなく、sender.callNewAPI()に置き換わって実行されるため、3つの文字列の合成という効果を得る。それとともに、元々のsender.callOldAPI()自体の処理結果と合成された文字列出力が得られることとなる。
【0073】
一方、sender.callNewAPI()とreceiver.newAPI()とには、代替処理を定義しないため、これらの起動はそのまま実行される。
【0074】
次に、図6は、Executableインタフェースの一定義例を示す概念図である。唯一必須のメソッドとして、public Object execute(Object[] args)throws Exception;の実装を必須とするもので、代替処理の定義に利用する。後述の代替処理管理クラスの中で検索され、execute()メソッドの発行により起動される。
【0075】
Commandデザインパターンを適用し、Executableインタフェースを実装するオブジェクトを定義するか、new Executable(){ public Object execute(Object[]args){/*新API機能のロジック*/}}として無名クラスのオブジェクトとして代替処理を実現する。
【0076】
次に、図7は、代替処理管理クラスの一実装例を示したものである。また、図8は、メソッド起動ハンドラの一実装例を示したものである。
【0077】
上述した実施形態によれば、クライアントは、旧APIを呼び出すコードを変更することなくそのまま実行するだけで、メタレベルにおいて新しいAPIに対応する処理が代替実行され、結果として、APIの互換性を保ったまま機能拡張が可能になる。
【0078】
また、サーバ10の機能、あるいはクライアント20の機能は、図示しない記憶部に記憶されたプログラムを実行することで実現するようになっている。記憶部は、ハードディスク装置や光磁気ディスク装置、フラッシュメモリ等の不揮発性メモリやRAM(Random Access Memory)のような揮発性のメモリ、あるいはこれらの組み合わせにより構成されるものとする。また、上記記憶部とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含む。
【0079】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワークや電話回線等の通信回線のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、上述した処理の一部を実現するためのものであってもよい。さらに、上述した処理をサーバ10あるいはクライアント20に既に記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【0080】
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成は、上記実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【0081】
【発明の効果】
以上説明したように、本発明によれば、旧APIを利用するサーバとクライアント双方のプログラムに修正が加わらないため、互換性を維持しながら機能拡張を行うことが容易かつ柔軟に実現することができるという利点が得られる。また、試験プログラムも変更しないため試験作業も簡易になる。また、旧APIを介して協調動作する複数プログラムの実行中に、旧APIに対応した代替処理を追加・変更・削除することが可能となり、機能拡張・旧機能への回帰以外にも、実行時に動的に振る舞いを変更することができる。その結果として、協調動作するプログラム自体への修正を最小限にとどめ、機能拡張の実施・試験が容易になるため、プログラムの開発効率および生産性を向上することに寄与することができるという利点が得られる。
【図面の簡単な説明】
【図1】本発明の実施形態によるプログラム機能拡張の作用および効果を示す概念図である。
【図2】本実施形態によるプログラム機能拡張の実現手段を具体例とともに示す概念図である。
【図3】本実施形態によるプログラム機能拡張を実現するための機能構成を示すブロック図である。
【図4】サーバプログラム中のreceiverオブジェクトの一実装例を示したものである。
【図5】クライアントプログラム中のSenderオブジェクトの一実装例を示す概念図である。
【図6】クライアントプログラム中のSenderオブジェクトの一実装例を示す概念図である。
【図7】Executableインタフェースの一定義例を示す概念図である。
【図8】代替処理管理部の一実装例を示す概念図である。
【図9】メソッド起動ハンドラの一実装例を示す概念図である。
【符号の説明】
10 サーバプログラム
20 クライアントプログラム
30 旧API呼び出しプロトコル
40 旧API機能
50 新API機能
100 代替処理管理部
110 代替処理検索部
111 代替処理登録部
112 代替処理更新部
113 代替処理削除部
114 代替処理検索・実行部
115 代替処理合成・実行部
200 代替処理オブジェクト定義部
300 クライアントプログラム
400 サーバプログラム
500 Method起動ハンドラ部
201 代替処理オブジェクト定義部
301 クライアントプログラム部
401 サーバプログラム部
501 Method起動ハンドラ部
1000 言語処理実行系
[0001]
TECHNICAL FIELD OF THE INVENTION
The present invention relates to a mechanism for coordinating and managing programs that cooperate via an API, and more particularly to a program function expansion system, a function expansion method, a program function expansion program, and a recording medium for expanding functions while maintaining compatibility.
[0002]
[Prior art]
Methods for improving productivity and reducing development time in service development on the Internet include technical fields such as service cooperation and Web services. In addition, EAI (Enterprise Application Integration) technology and the like are also methods of constructing services by linking existing systems (for example, see Non-Patent Documents 1 and 2).
[0003]
A plurality of services cooperate on the cooperative service mechanism. In such a situation, an interface between a program that provides a function and a program that uses the function is an API (Application Programming Interface).
[0004]
The API providing program (server: Server) implements the function and publishes it as an API, while the API using program (client: Client) implements the function based on the API while implementing its own application logic. To invoke, the API can be viewed as a protocol that both parties must adhere to.
[0005]
Conventionally, in CORBA technology and EJB (Enterprise JAVA (registered trademark) Beans) technology in J2EE (Java (registered trademark) 2 Enterprise Edition), an interface is indirectly referred to by a name using a function that provides a naming and directory function. (For example, see Non-Patent Documents 3 and 4). However, the API use side program (client) needs to be aware of the new interface in the part where the new function is called. That is, it was necessary to modify the program in the calling part on the client side. In addition, functions can be replaced in units of interfaces, but functions are not replaced in units of object methods.
[0006]
[Non-patent document 1]
Ryuichi Hino and one other, "Proposal of AP Development Method by Platform Cooperation", IEICE, March 22, 2002, IEICE Technical Report KBSE 2001-72, pp. 57-64
[Non-patent document 2]
Keitaro Horiyo and one other, "Consideration of I / F between systems and the effects of expansion", IEICE, December 12, 2002, IEICE technical report vo1.102, N0. 503 pp. 7-12
[Non-Patent Document 3]
, "JAVA (registered trademark) & CORBA C / S Programming", published by Nikkei BP, January 1999, pp. 11, 62, 3353, 359
[Non-patent document 4]
Michael Gardley et al., "J2EE & BEA WebLogic Server Developer's Guide", Pearson Edescation, November 2001, pp. 26,173-208,236
[0007]
[Problems to be solved by the invention]
By the way, in the program development process, specification changes and function expansions generally occur at various levels, large and small. Similarly, in a development environment that links existing systems, API changes may be unavoidable due to reasons such as individual components that are constituent elements extending their own functions, and requests to compensate for the lack of functions as a whole. Not a few exist.
[0008]
For fixes that do not change the interface, such as simple bug fixes, the scope of influence does not extend outside the interface, so it is possible to reduce the cost of fixing and testing, but as described above, the API is Since this is a convention between programs that cooperate via it, changing the API affects all programs that comply with it. This is essentially an unavoidable problem.
[0009]
Therefore, with the change of the API, it becomes necessary to implement and test additional functions in the server that provides the API and all clients that use the API, and as a result, the development cost increases.
[0010]
Also, adding a new function to the quality in the steady state, which has been subjected to the operation test with the API before the change, may be a factor of lowering the quality, and increases the risk in quality.
[0011]
Furthermore, when the interface is changed by the API extension, if a function addition and a test cost for assuring compatibility are also included, there is a problem that the cost of the entire development is further increased.
[0012]
The present invention has been made in view of the above-described circumstances, and has a program function extension capable of avoiding a decrease in productivity caused by changing an API and realizing a substantial function extension without changing the API. It is an object to provide a system, a program function extension method, a program function extension program, and a recording medium.
[0013]
[Means for Solving the Problems]
In order to solve the above-mentioned problems, the invention according to claim 1 manages cooperation of a plurality of programs that cooperate via an API, and maintains API compatibility when changing an API that is a protocol between programs. A program function extension system for extending an old API function to a new API function while executing a plurality of programs that cooperate through the old API function while corresponding to a method object that implements the old API function Processing means for dynamically registering / changing / deleting an old API function; and a meta-level processing for controlling activation / execution of the old API function using the method object of the old API function as a key by using the method object of the old API function. From the alternative processing object acquisition means for searching and acquiring the API, and additional information and API accompanying the API extension An alternative processing object executing means for executing the alternative processing object acquired by the alternative processing object acquiring means instead of executing the old API function while maintaining consistency with the return information; and an alternative processing of the alternative processing object executing means In executing the object, a fusion process executing means for performing a process in which the alternative function and the old API function are fused is provided.
[0014]
According to a second aspect of the present invention, in the program function extension system according to the first aspect, the alternative processing management means is realized by a hash table that stores an old API processing object and a new API processing object in association with each other as keys. It is characterized by being performed.
[0015]
According to a third aspect of the present invention, in the program function extension system according to the second aspect, as a result of searching for a new API processing object using the old API processing object as a key, the value corresponding to the key is changed. If it is empty, the old API processing is executed as it is and the result is returned. If the value corresponding to the key is not empty and a new API processing object is assigned, the new API processing object is taken out and the alternative processing is executed. The message is issued to the user.
[0016]
According to a fourth aspect of the present invention, in the program function extension system according to the second aspect, the alternative processing management means is configured based on a Singleton design pattern.
[0017]
Further, in order to solve the above-mentioned problem, the invention according to claim 5 manages cooperation of a plurality of programs that cooperate via an API, and improves API compatibility when changing an API which is a protocol between programs. A program function extension method for extending an old API function to a new API function while maintaining a plurality of programs operating cooperatively via the old API function, the method corresponding to a method object that implements the old API function during execution. In meta-level processing for controlling the activation and execution of the old API function by dynamically registering / changing / deleting the processing object, search / acquire the alternative processing object using the method object of the old API function as a key, and add with the API extension Instead of executing the old API function while maintaining the consistency between the information and the return information from the API, the acquired Run the replacement process object, in the alternative process object execution, and executes the processes in fusion with the alternative function and the old API function.
[0018]
In order to solve the above-mentioned problem, the invention according to claim 6 manages cooperation of a plurality of programs that cooperate via an API, and improves API compatibility when changing an API that is a protocol between programs. A program function extension method for extending an old API function to a new API function while maintaining the same, using a reflection function provided in a program language processing execution system to control meta-level processing when a method for implementing the old API function is called. The execution of the old method is intercepted at the meta level, a new method corresponding to the old method object is searched, and the new method is executed instead of the old method within the meta level processing.
[0019]
According to a seventh aspect of the present invention, in the method of extending a program function according to the sixth aspect, an old API processing object for realizing a function corresponding to the old API and a new API processing object for realizing a function corresponding to the new API are provided. Are managed in association with each other.
[0020]
In order to solve the above-mentioned problem, in the invention according to claim 8, during execution of a plurality of programs that cooperate via the old API function, an alternative process corresponding to a method object that implements the old API function is executed. Dynamically registering / changing / deleting an object; searching / acquiring an alternative processing object using a method object of the old API function as a key in meta-level processing for controlling activation / execution of the old API function; Executing the acquired alternative processing object in place of executing the old API function while maintaining the consistency between the additional information accompanying the API and the return information from the API. Executing a process integrated with the old API function. To.
[0021]
In order to solve the above-mentioned problem, according to the ninth aspect of the present invention, during execution of a plurality of programs that cooperate via the old API function, an alternative process corresponding to a method object that implements the old API function is executed. Dynamically registering / changing / deleting an object; searching / acquiring an alternative processing object using a method object of the old API function as a key in meta-level processing for controlling activation / execution of the old API function; Executing the acquired alternative processing object in place of executing the old API function while maintaining the consistency between the additional information accompanying the API and the return information from the API. And a step of executing processing integrated with the old API function. And characterized by recording a function expansion program.
[0022]
According to the present invention, when a method for implementing the old API is called, a meta-level process (a level at which the behavior of a meta-object such as a class or a method is executed) is controlled by using a reflection function provided in the programming language processing execution system. Is transferred, the execution of the old method is intercepted at the meta level, a new method corresponding to the old method object is searched, and the old method is executed instead of the old method within the meta level processing. Therefore, the API user simply executes the code that calls the old API without any change, and the processing corresponding to the new API is executed at the meta level as an alternative. As a result, the function expansion can be performed while maintaining the compatibility of the API. Will be possible.
[0023]
BEST MODE FOR CARRYING OUT THE INVENTION
Hereinafter, embodiments of the present invention will be described with reference to the drawings.
[0024]
FIG. 1 is a conceptual diagram showing an operation and an effect of a program function expanding method according to an embodiment of the present invention. Note that the program function expansion method according to the present embodiment uses a language processing system having a reflection function such as a JAVA (registered trademark) language or a Python language. The figure shows a case in which an old API function is extended to a new API function, and the new API requires one additional parameter. In the server program 10, an object that implements and discloses an API is defined as a receiver. In the client program 20, an object that calls the API of the server is a sender. The server program 10 and the client program 20 may be included in the same language processing execution system (equivalent to a VM of JAVA (registered trademark)), or may be provided via a distributed object mechanism such as JAVA (registered trademark) RMI. They may be linked.
[0025]
The old API function 40 is a function of giving two objects (x, y) as inputs and outputting “v” as a result, and is assumed to be realized by the method method of the receiver object. On the other hand, the new API function 50 is a function that gives three objects (x, y, z) as inputs and outputs “φ (V)” as a result, but is not realized in advance by the method method of the receiver object. You may.
[0026]
The protocol 30 in which the client program 20 calls the old API to the server program 10 issues a method request “v = receiver.method (x, y)” to the receiver object in the execution thread of the sender object.
[0027]
Here, the features of the present invention include the implementation of the receiver object in the server program 10, the implementation of the sender object in the client program 20, and the method request calling protocol 30: v = receiver. That is, the old API function 40 is changed to the new API function 50 without changing any of the method (x, y).
[0028]
The implementation of the new API function 50 is defined as an object that implements the Executable interface. The Executable interface seeks a method "public Object Executeable # execute (Object [] args)" as an essential method.
[0029]
Apply the Command design pattern and define an object that implements the Executable interface, or define a new class of "New Executable () {public Object execute (Object [] args)} / * Logic of the new API function * / {" as an anonymous class. Implemented as an object.
[0030]
The implementation of the new API function may be defined in any of a client program, a server program, and a third-party program.
[0031]
A new API function: a function of giving three objects (x, y, z) as inputs to the body of the execute () method and outputting “φ (V)” as a result is defined. At this time, as information for realizing the new API function, a receiver object, a sender object, a receiver # method () method object, real parameters x and y, an additional real parameter z, and a method getZ () for acquiring the z are provided. Is required, a process for obtaining these is defined in the execute () method.
[0032]
For example, a parameter for execute (): Object [] args, storing and passing the entity, passing as a parameter at the time of generation of an object implementing the Executable interface, and acquiring at execution time by a method callback to the sender and receiver objects Necessary information can be obtained by an arbitrary method by means such as communication with an external file or a network, and the definition of execute () is not particularly limited.
[0033]
If it is desired to execute various types of different processes according to the situation, one class implementing Executable is provided, and within the class, various processes are defined as one internal class for each different process. Define by bundling in one class. As a result, addition and deletion of processing can be realized by adding and deleting internal classes. Therefore, a series of processing sets can be managed in an organized manner without defining and creating many small classes separately.
[0034]
By applying the Command design pattern, objects implementing Executeable are uniformly activated from the outside by an execute () method call from the outside to perform desired processing.
[0035]
Next, FIG. 2 is a conceptual diagram showing means for realizing a program function extension according to an embodiment of the present invention, together with a specific example. In FIG. 2, the substitution process management unit 100 replaces the Executable implementation object (new API processing object) 200 that realizes the new API function with the Method object (old API processing object) R # method (x , Y). The substitution process management unit 100 has a hash table or is realized by inheriting a hash table function.
[0036]
The Method object of the receiver object that implements the old API function is obtained by “receiver.getClass (). GetDeclaredMethod (“ method ”, newClass [] {x.class, y.class})”, and this is obtained from the hash table. An Executable implementation object that implements the new API function is added to the management as a value corresponding to the key.
[0037]
A Method object in which a key / value pair is registered in the hash table means that the alternative processing is defined, and an object in which no key or value is registered has no alternative processing. Means to execute.
[0038]
Therefore, another Executable implementation is provided in which an Executable implementation object serving as a value is assigned (register) to a method serving as a key, and an alternative process is added and deleted by removing (remove) the original process. By allocating (updating) the object, three types of operations, that is, changing the substitution process, can be performed.
[0039]
The Method activation handler unit 500 is a mechanism that is hooked when an old API method is called for an object that provides an old API, and can acquire a proxy object, the method object, and actual parameters at the time of the call as objects.
[0040]
java. lang. renet. In the method that implements and defines “public Object invoke (Object proxy, Methodm, Object [] args)” of the InvationHandler interface, calls the function of the proxy processing management unit 100 and searches for an alternative processing object corresponding to the method object. ·Execute.
[0041]
The details will be described below. In this embodiment, when the API is extended, both the API providing side (server) and the API using side (client) extend the API and the function without modifying the program code.
[0042]
Specifically, using the reflection function provided in the programming language processing execution system, when calling a method that implements the old API, the processing at the meta level (processing system level, level at which the behavior of the meta object such as class or method is executed) is performed. The control is transferred, the execution of the old method is intercepted at the meta level, a new method corresponding to the old method object is searched, and the old method is executed instead of the old method within the meta level processing.
[0043]
As a result, the client simply executes the code that calls the old API without changing it, and instead executes the processing corresponding to the new API at the meta level. As a result, the function can be extended while maintaining the compatibility of the API. become.
[0044]
The old API processing object can be obtained by a Method object (in the case of JAVA (registered trademark) API, an instance of the java.lang.reflect.Method class), and the new API processing object can be realized by an alternative Method object or Command design pattern. Give in the object.
[0045]
An object that embodies the processing by the command design pattern is an object accompanied by one or more indispensable methods (for example, Executable # execute (Object [] args) or the like) specified by Interface, and 0 or more objects required for the processing. An object process is defined by bundling and instantiating object references and invoking a method specified by interface.
[0046]
The alternative processing management unit 100 is realized by a hash table (in the case of JAVA (registered trademark) API, an instance of the java.util.Hashtable class), and stores an old API processing object as a key and a new API processing object as a corresponding value.
[0047]
As a result of searching for a new API processing object using the old API processing object as a key for the alternative processing management unit 100, if the value corresponding to the key is empty (null), the old API processing is executed as it is and the result is returned. . On the other hand, if the value corresponding to the key is not empty and a new API processing object is assigned, the new API processing object is extracted and an execute () message is issued to execute the substitute processing.
[0048]
At this time, if it is necessary to use the processing result of the old API, the old API processing object can be passed to the new API processing object to combine the processing. For example, the debug log is output immediately after the method call of the old API and immediately before the return, or the process that measures the time required for the processing of the method body and uses it for performance measurement is added to the old API method in the substitute processing object. It is only necessary to integrate the functions, and the method can be realized in a unified manner.
[0049]
The alternative process management unit 100 designs and implements based on the Singleton design pattern. This guarantees that there is only one in the same processing system (in the case of Java (registered trademark), JAVA (registered trademark) VM), and that a specific object refers to the alternative processing management class. It can be appropriately referenced from any method (by the alternative process management class #getInstance ()) without being tightly coupled (such as by holding it as an instance variable).
[0050]
Therefore, when the old API process is activated, it is possible to refer to the alternative process management class even in the method of the meta-level process for executing the method activation, and when the old API method is executed, the corresponding new API process object is searched. I can do it.
[0051]
A new API processing object is prepared by a third party other than the server developer, the client developer, or both, and the correspondence with the old API can be dynamically linked. In other words, during the execution of a plurality of programs that cooperate via the old API, it is possible to add, change, or delete an alternative process corresponding to the old API. Behavior can be changed dynamically.
[0052]
In order to access the meta-level processing of the method invocation processing of the old API, the context at the time of execution of the old API method, that is, all {instance, method, and actual parameters} to be executed are acquired, and the processing defined by the user at the meta-level Connect dynamically. For example, if the language used is Java (registered trademark), a dynamic proxy of the Java (registered trademark) reflection function is used. That is, java. lang. Proxy class and API call handler java. lang. The above operation can be performed by using InvocationHandler # invoke ().
[0053]
In the process of dynamically linking the above processes, the alternative process management class is accessed, and the alternative process corresponding to the old API method object is executed. As a result, the API function can be substantially extended without changing the API calling interface, and the program of both the server and the client is not modified. Therefore, it is easy to extend the function while maintaining compatibility. Is achieved. Also, since the test program does not need to be changed, the test operation is simplified.
[0054]
FIG. 3 is a block diagram showing a functional configuration for implementing a program function extension according to the embodiment of the present invention. The substitution process management unit 100 includes a substitution process search unit 110, a substitution process registration unit 111, a substitution process update unit 112, a substitution process deletion unit 113, a substitution process search / execution unit 114, and a substitution process synthesis / execution unit 115. . The replacement process search unit 110 has a function of searching for a replacement process using the method of the old API as a key, and can be realized using the hash table search mechanism as described above. The substitute process registration unit 111 has a function of registering a substitute process using the method of the old API as a key, and can be realized by using the function of adding to the hash table as described above.
[0055]
The replacement process update unit 112 has a function of updating the replacement process using the method of the old API as a key, and can be realized by using the function of adding to the hash table as described above. The substitution process deletion unit 113 deletes the method of the old API from the substitution process of the key and returns to the original function, and can be realized by using the function of deleting the value from the hash table as described above. The substitution process search / execution unit 114 has a function of searching for a substitution process using the method of the old API as a key and automatically executing the substitution process. The substitution process retrieval function and an execute () message to the Executable object Can be realized. The substitution process synthesis / execution unit 115 has a function of automatically executing the old API method and executing the substitution process at the same time as searching for the substitution process using the method of the old API as a key. This can be realized by invoking the old API method and issuing an execute () message to the Executable object.
[0056]
The substitution process object definition unit 201 has a function of defining an Executable implementation object to be registered in the substitution process management unit 100. Usually, it can be realized by editing and compiling the source code of JAVA (registered trademark), and arranging the generated class file at a position visible to JAVA (registered trademark) VM from outside.
[0057]
The Method activation handler unit 501 has a function of inquiring of the alternative process management unit 100 whether or not an alternative process is registered, and requesting execution of the alternative process. Alternative processing such as necessity of execution of the old API method, addition of additional processing (log output, output of profile information, output of performance information, etc.) before and after alternative processing, registration / change / deletion of alternative processing itself It is possible that there are a plurality of types of Method startup handler units depending on the behavior at the time of execution of the. The method can be realized by calling the alternative process management unit 100 after hooking the activation of the method using the dynamic proxy class of the JAVA (registered trademark) reflection function.
[0058]
The client program unit 301 is a part that calls the old API and controls execution of higher-order business logic using the result. There may be multiple client programs depending on the type of business logic. The server program unit 401 has a function of realizing the old API, publishes the old API, and executes and controls a program that executes a request to the API and returns a result. There may be a plurality of server programs depending on the type of API and the provided program.
[0059]
The language processing execution system 1000 is a language processing execution system that controls execution of the alternative processing management unit 100, the alternative processing object definition unit 201, the client program unit 301, the server program unit 401, and the method start handler unit 501. In the case of JAVA (registered trademark) language, it corresponds to JAVA (registered trademark) VM. It is not always necessary to be the only entity, and a distributed JAVA (registered trademark) VM configuration may be used as long as the uniqueness of the object is guaranteed by using the JAVA (registered trademark) RMI technology.
[0060]
Next, a specific example for realizing the program function extension according to the embodiment of the present invention will be described. Here, FIGS. 4 to 8 are conceptual diagrams showing specific program examples. FIG. 4 shows an implementation example of a receiver object in a server program. The Receiver interface exposes two APIs, an old API (String, String) and a new API (String, String, String). The former represents the old API, and the latter represents the new API. The latter need not necessarily be defined in advance in the server program. This is prepared in advance for the Receiver interface in order to simplify the explanation. The ReceiverImpl class is a concrete class that implements the Receiver interface. Both oldAPI () and newAPI () implement a function of combining and returning a character string given by a parameter.
[0061]
By applying the present invention, the client-side program using the old API can execute the API without changing the logic for calling the old API (String, String) with two character strings (that is, while maintaining compatibility). After the extension, a new API (String, String, String), which is an implementation of the extended API function, is automatically called.
[0062]
Next, FIG. 5 shows an implementation example of a Sender object in the client program. The Sender inkface discloses two APIs, a callOld API (String, String) and a callNew API (String, String, String). The former represents the old API, and the latter represents the new API. The latter need not necessarily be defined in the client program in advance. This is prepared for the Sender interface for the sake of simplicity.
[0063]
The SenderImpl class is a concrete class that implements the Sender interface. It has an object receiver implementing a receiver interface as an instance variable, and issues an API call to this. In both callOldAPI () and callNewAPI (), the character strings given as parameters are passed to receiver # oldAPI () and receiver # newAPI (), and the API is called, and the synthesized character string returned as a result is output as standard. .
[0064]
According to the present invention, a client-side program using the callOldAPI () receives a receiver. Without changing the logic for calling the old API (String, String) (that is, while maintaining compatibility), the function extension is automatically supported such that the receiver, new API (String, String, String) is called after the API extension.
[0065]
The changeAPI () method of the SenderImpl class has a function of defining and registering an alternative process for the old API. This method does not need to be defined in the client program. Here, it is defined in SenderImpl for simplicity of description, but it can be implemented in a third party program by changing the method of defining the Executable implementation object.
[0066]
In this example, for the method “callOldAPI” of the “Sender” class, an alternative process “register an alternative process X of Receiver # oldAPI () to the alternative process management unit” is defined and registered. . At the same time, as an alternative process X to the “oldAPI” method of the “Receiver” class, an alternative process of “call a callNewAPI (String, String, String) method” is defined and registered.
[0067]
The main () method of the SenderImpl class is an example showing how to use the present invention. First, create an object as a proxy class to hook the method call. Next, as a process before changing the old API, sender. callOldAPI () and sender. Calls callNewAPI (). Outputs the concatenation of the given parameter strings. Then, by calling the above-mentioned SenderImpl # changeAPI (), sender. callOldAPI () and the receiver. Create and register an alternative process for the two old APIs of oldAPI ().
[0068]
After this API change, sender. callOldAPI () and sender. Calls callNewAPI (). The operation is in the following sequence.
[0069]
sender. Since the execution of the callOldAPI () is hooked by the method invocation handler and executed instead of the alternative process, the above-described “register the alternative process X of the Receiver # oldAPI () with the alternative process management unit” is executed. Is done.
[0070]
At the same time, sender. receiver.call, which is the original process of callOldAPI (). The oldAPI () process is executed, and this process is also executed in place of the above-described alternative process X: “call the callNewAPI (String, String, String) method”, and as a result, sender. This means that the callNewAPI () has been executed.
[0071]
At this time, sender. In callOldAPI (), two parameters are passed, but sender. The third parameter of the callNewAPI () is ServerImpl. this. It is completed by a process called getZ (). This is the operation given by the definition of the Executable implementation object defined in ServerImpl # changeAPI ().
[0072]
Eventually, sender. The processing of callOldAPI () is performed without changing the calling format at all. Since it is executed in place of callNewAPI (), the effect of combining three character strings is obtained. At the same time, the original sender. As a result, a character string output combined with the processing result of callOldAPI () itself is obtained.
[0073]
On the other hand, sender. callNewAPI () and receiver. Since the new API () does not define an alternative process, these activations are executed as they are.
[0074]
Next, FIG. 6 is a conceptual diagram showing a definition example of the Executable interface. As the only essential method, it is necessary to implement public object execute (Object [] args) throws Exceptions; it is used for defining alternative processing. It is searched for in an alternative process management class described later, and is activated by issuing the execute () method.
[0075]
Apply the Command design pattern and define an object that implements the Executable interface, or use new Executable () {public Object execute (Object [] args)} / * as anonymous class object as logic of the new API function * / { Implement alternative processing.
[0076]
Next, FIG. 7 shows an implementation example of an alternative processing management class. FIG. 8 shows one implementation example of the method activation handler.
[0077]
According to the above-described embodiment, the client simply executes the code for calling the old API without any change, and instead, the process corresponding to the new API is executed at the meta level, and as a result, the compatibility of the API is maintained. Function expansion becomes possible as it is.
[0078]
Further, the function of the server 10 or the function of the client 20 is realized by executing a program stored in a storage unit (not shown). The storage unit is configured by a nonvolatile memory such as a hard disk device, a magneto-optical disk device, or a flash memory, a volatile memory such as a RAM (Random Access Memory), or a combination thereof. In addition, the above-mentioned storage unit is, for example, a volatile memory (RAM) in a computer system serving as a server or a client when a program is transmitted through a network such as the Internet or a communication line such as a telephone line, for a certain period of time. Including those holding programs.
[0079]
Further, the above program may be transmitted from a computer system storing the program in a storage device or the like to another computer system via a transmission medium or by a transmission wave in the transmission medium. Here, the “transmission medium” for transmitting a program refers to a medium having a function of transmitting information, such as a network such as the Internet or a communication line such as a telephone line. Further, the program may be for realizing a part of the processing described above. Further, what is called a difference file (difference program) that can realize the above-described processing in combination with a program already recorded in the server 10 or the client 20 may be used.
[0080]
As described above, the embodiment of the present invention has been described in detail with reference to the drawings. However, the specific configuration is not limited to the above embodiment, and includes a design and the like within a range not departing from the gist of the present invention. .
[0081]
【The invention's effect】
As described above, according to the present invention, since the program of both the server and the client using the old API is not modified, it is possible to easily and flexibly realize the function expansion while maintaining the compatibility. The advantage that it can be obtained is obtained. Also, the test work is simplified because the test program is not changed. In addition, during execution of a plurality of programs that cooperate via the old API, it is possible to add, change, or delete an alternative process corresponding to the old API. Behavior can be changed dynamically. As a result, the modification to the cooperating program itself is minimized, and it is easy to implement and test the function extension. This has the advantage of improving the program development efficiency and productivity. can get.
[Brief description of the drawings]
FIG. 1 is a conceptual diagram showing an operation and an effect of a program function extension according to an embodiment of the present invention.
FIG. 2 is a conceptual diagram showing a means for implementing a program function extension according to the present embodiment together with a specific example.
FIG. 3 is a block diagram showing a functional configuration for implementing a program function extension according to the embodiment;
FIG. 4 shows an implementation example of a receiver object in a server program.
FIG. 5 is a conceptual diagram showing one implementation example of a Sender object in a client program.
FIG. 6 is a conceptual diagram showing one implementation example of a Sender object in a client program.
FIG. 7 is a conceptual diagram illustrating a definition example of an Executable interface.
FIG. 8 is a conceptual diagram illustrating an implementation example of an alternative processing management unit.
FIG. 9 is a conceptual diagram showing an implementation example of a method activation handler.
[Explanation of symbols]
10. Server program
20 client programs
30 old API call protocol
40 Old API function
50 New API Function
100 Alternative processing management unit
110 Alternative processing search unit
111 Alternative processing registration unit
112 Alternative processing update unit
113 Alternative processing deletion unit
114 Alternative Processing Search / Execution Unit
115 Alternative Processing Synthesis / Execution Unit
200 Alternative processing object definition part
300 client program
400 server program
500 Method start handler part
201 Alternative processing object definition part
301 Client program section
401 server program section
501 Method start handler part
1000 language processing execution system

Claims (9)

APIを介して協調動作する複数プログラムの連携を管理し、プログラム間の規約であるAPIの変更に際し、API互換性を維持しながら旧API機能を新API機能へ拡張するプログラム機能拡張システムであって、
旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除する代替処理管理手段と、
旧API機能の起動・実行を制御するメタレベル処理において前記代替処理管理手段を用いて旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得する代替処理オブジェクト取得手段と、
API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記代替処理オブジェクト取得手段で取得した代替処理オブジェクトを実行する代替処理オブジェクト実行手段と、
前記代替処理オブジェクト実行手段の代替処理オブジェクト実行に際し、代替機能と旧API機能と融合した処理を実行する融合処理実行手段と
を具備することを特徴とするプログラム機能拡張システム。
A program function expansion system that manages the cooperation of a plurality of programs that cooperate via an API, and extends an old API function to a new API function while maintaining API compatibility when changing an API that is a protocol between programs. ,
An alternative processing management means for dynamically registering, changing, and deleting an alternative processing object corresponding to a method object implementing the old API function during execution of a plurality of programs that cooperate via the old API function;
An alternative processing object obtaining means for searching and obtaining an alternative processing object using the method object of the old API function as a key by using the alternative processing managing means in the meta-level processing for controlling activation and execution of the old API function;
An alternative processing object executing means for executing the alternative processing object acquired by the alternative processing object acquiring means instead of executing the old API function while maintaining consistency between the additional information accompanying the API extension and the return information from the API; and ,
A program function extension system, comprising: a fusion process execution unit that executes a process in which a substitution function and an old API function are merged when the substitution process object execution unit executes the substitution process object.
代替処理管理手段は、キーとして旧API処理オブジェクトと、新API処理オブジェクトとを対応付けて格納するハッシュテーブルで実現されることを特徴とする請求項1記載のプログラム機能拡張システム。2. The program function extension system according to claim 1, wherein the alternative processing management means is realized by a hash table that stores the old API processing object and the new API processing object in association with each other as keys. 前記代替処理管理手段は、旧API処理オブジェクトをキーに新API処理オブジェクトを検索した結果、キーに対応する値が空であれば、旧API処理をそのまま実行して結果を返す一方、キーに対応する値が空でなく新API処理オブジェクトが割り当てられている場合は、新API処理オブジェクトを取り出し、代替処理を実行するためのメッセージを発行することを特徴とする請求項2記載のプログラム機能拡張システム。The alternative processing management means searches the new API processing object using the old API processing object as a key, and if the value corresponding to the key is empty, executes the old API processing as it is and returns the result. 3. The program function extension system according to claim 2, wherein when the value to be executed is not empty and a new API processing object is assigned, the new API processing object is taken out and a message for executing an alternative process is issued. . 前記代替処理管理手段は、Singletonデザインパターンに基づいて構成されていることを特徴とする請求項2記載のプログラム機能拡張システム。3. The program function expansion system according to claim 2, wherein said alternative process management means is configured based on a Singleton design pattern. APIを介して協調動作する複数プログラムの連携を管理し、プログラム間の規約であるAPIの変更に際し、API互換性を維持しながら旧API機能を新API機能へ拡張するプログラム機能拡張方法であって、
旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除し、
旧API機能の起動・実行を制御するメタレベル処理において旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得し、
API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記取得された代替処理オブジェクトを実行し、
前記代替処理オブジェクト実行において、代替機能と旧API機能と融合した処理を実行することを特徴とするプログラム機能拡張方法。
A program function extension method for managing cooperation of a plurality of programs that cooperate via an API and extending an old API function to a new API function while maintaining API compatibility when changing an API that is a protocol between programs. ,
During execution of a plurality of programs that cooperate via the old API function, an alternative processing object corresponding to a method object implementing the old API function is dynamically registered / changed / deleted,
In meta-level processing for controlling activation and execution of the old API function, search and acquire an alternative processing object using the method object of the old API function as a key,
Executing the acquired alternative processing object in place of the execution of the old API function while maintaining the consistency between the additional information accompanying the API extension and the return information from the API,
A method of extending a program function, wherein, in the execution of the alternative process object, a process that combines an alternative function and an old API function is executed.
APIを介して協調動作する複数プログラムの連携を管理し、プログラム間の規約であるAPIの変更に際し、API互換性を維持しながら旧API機能を新API機能へ拡張するプログラム機能拡張方法であって、
プログラム言語処理実行系に備わるリフレクション機能を用いて、旧API機能を実装するメソッドの呼び出しに際して、メタレベルの処理に制御を移し、メタレベルにおいて旧メソッドの実行を横取りし、旧メソッドオブジェクトに対応する新メソッドを検索し、メタレベル処理内部で当該旧メソッドに代わって新メソッドを実行することを特徴とするプログラム機能拡張方法。
A program function extension method for managing cooperation of a plurality of programs that cooperate via an API and extending an old API function to a new API function while maintaining API compatibility when changing an API that is a protocol between programs. ,
Using the reflection function provided in the programming language processing execution system, when calling a method that implements the old API function, transfer control to the meta-level processing, intercept the execution of the old method at the meta-level, and create a new method corresponding to the old method object. And executing the new method in place of the old method in the meta level processing.
旧APIに対応する機能を実現する旧API処理オブジェクトと、新APIに対応する機能を実現する新API処理オブジェクトとを対応づけて管理することを特徴とする請求項6記載のプログラム機能拡張方法。7. The method according to claim 6, wherein an old API processing object that realizes a function corresponding to the old API and a new API processing object that realizes a function corresponding to the new API are managed in association with each other. 旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除するステップと、
旧API機能の起動・実行を制御するメタレベル処理において旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得するステップと、
API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記取得された代替処理オブジェクトを実行するステップと、
前記代替処理オブジェクト実行において、代替機能と旧API機能と融合した処理を実行するステップと
をコンピュータに実行させることを特徴とするプログラム機能拡張プログラム。
Dynamically registering / changing / deleting an alternative processing object corresponding to a method object implementing the old API function during execution of a plurality of programs that cooperate via the old API function;
Searching and acquiring an alternative processing object by using a method object of the old API function as a key in a meta-level process for controlling activation and execution of the old API function;
Executing the acquired alternative processing object instead of executing the old API function while maintaining consistency between additional information accompanying the API extension and return information from the API;
A program function expansion program for causing a computer to execute a step of executing a process combining an alternative function and an old API function in the execution of the alternative process object.
旧API機能を介して協調動作する複数のプログラムの実行中に、旧API機能を実装するメソッドオブジェクトに対応した代替処理オブジェクトを動的に登録・変更・削除するステップと、
旧API機能の起動・実行を制御するメタレベル処理において旧API機能のメソッドオブジェクトをキーに、代替処理オブジェクトを検索・取得するステップと、
API拡張に伴う追加情報とAPIからの返却情報との整合性を維持しながら旧API機能の実行に代わって、前記取得された代替処理オブジェクトを実行するステップと、
前記代替処理オブジェクト実行において、代替機能と旧API機能と融合した処理を実行するステップと
をコンピュータに実行させるプログラム機能拡張プログラムを記録したことを特徴とする記録媒体。
Dynamically registering / changing / deleting an alternative processing object corresponding to a method object implementing the old API function during execution of a plurality of programs that cooperate via the old API function;
Searching and acquiring an alternative processing object by using a method object of the old API function as a key in a meta-level process for controlling activation and execution of the old API function;
Executing the acquired alternative processing object instead of executing the old API function while maintaining consistency between additional information accompanying the API extension and return information from the API;
A recording medium characterized by recording a program function extension program for causing a computer to execute a step of executing a process combining an alternative function and an old API function in the execution of the alternative process object.
JP2003038316A 2003-02-17 2003-02-17 Program function expansion system, program function expansion method, program function expansion program and record medium Pending JP2004246789A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003038316A JP2004246789A (en) 2003-02-17 2003-02-17 Program function expansion system, program function expansion method, program function expansion program and record medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003038316A JP2004246789A (en) 2003-02-17 2003-02-17 Program function expansion system, program function expansion method, program function expansion program and record medium

Publications (1)

Publication Number Publication Date
JP2004246789A true JP2004246789A (en) 2004-09-02

Family

ID=33022874

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003038316A Pending JP2004246789A (en) 2003-02-17 2003-02-17 Program function expansion system, program function expansion method, program function expansion program and record medium

Country Status (1)

Country Link
JP (1) JP2004246789A (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007219857A (en) * 2006-02-16 2007-08-30 Fujitsu Broad Solution & Consulting Inc Api interface management program
JP2010117793A (en) * 2008-11-11 2010-05-27 Jfe Steel Corp Computer system and framework management device
JP2011048605A (en) * 2009-08-27 2011-03-10 Hitachi Ltd Program execution device and execution method for application program
JP7132531B2 (en) 2018-05-28 2022-09-07 日本電信電話株式会社 Transfer control device, transfer control method, service providing system and transfer control program

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007219857A (en) * 2006-02-16 2007-08-30 Fujitsu Broad Solution & Consulting Inc Api interface management program
JP2010117793A (en) * 2008-11-11 2010-05-27 Jfe Steel Corp Computer system and framework management device
JP2011048605A (en) * 2009-08-27 2011-03-10 Hitachi Ltd Program execution device and execution method for application program
JP7132531B2 (en) 2018-05-28 2022-09-07 日本電信電話株式会社 Transfer control device, transfer control method, service providing system and transfer control program

Similar Documents

Publication Publication Date Title
US7539985B2 (en) Systems and methods for dynamic component versioning
US8122427B2 (en) Decentralized system services
US9477727B2 (en) Abstracting data for use by a mobile device having occasional connectivity
WO2015101151A1 (en) Session processing method, device and system
JP3489123B2 (en) Application binding method
JP5006314B2 (en) Managed automatic programming model
US7895262B2 (en) Web service application protocol and SOAP processing model
US8473896B2 (en) Computer software development incorporating core and compound services
JP4583289B2 (en) Execution flow generation program, execution flow generation method, and execution flow generation apparatus
US20030105837A1 (en) Interception for optimal caching of distributed applications
US8560602B2 (en) Data sharing in a stream processing system
JP2004534304A (en) System and method for a software component plug-in framework
US20070136390A1 (en) Method and system for maintaining current data for wireless devices
JP2005259138A (en) Integration architecture for non-integrated tools
US20060101431A1 (en) Virtual types
US20030105780A1 (en) File system, control method, and program
US20100250860A1 (en) Method and System for Managing Cache Invalidation
JP2021128760A (en) Opc ua server, system processing using opc ua, and executing method of opc ua system
US7844978B2 (en) Artifact management for an extensible runtime environment
JP2004246789A (en) Program function expansion system, program function expansion method, program function expansion program and record medium
US8260850B2 (en) Thin-client and distributed development using data programming
CN114721711B (en) Tool and method for reducing software research and development configuration based on GraphQL
Fang et al. Exposing UDDI service descriptions and their metadata annotations as WS-resources
Siegel et al. The Cyc System: Notes on Architecture
US8756243B2 (en) Non-programmatic access to enterprise messaging administration