JP4489483B2 - 初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法 - Google Patents

初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法 Download PDF

Info

Publication number
JP4489483B2
JP4489483B2 JP2004093771A JP2004093771A JP4489483B2 JP 4489483 B2 JP4489483 B2 JP 4489483B2 JP 2004093771 A JP2004093771 A JP 2004093771A JP 2004093771 A JP2004093771 A JP 2004093771A JP 4489483 B2 JP4489483 B2 JP 4489483B2
Authority
JP
Japan
Prior art keywords
initial
type
intermediate representation
final
computer
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
JP2004093771A
Other languages
English (en)
Other versions
JP2004295897A (ja
JP2004295897A5 (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2004295897A publication Critical patent/JP2004295897A/ja
Publication of JP2004295897A5 publication Critical patent/JP2004295897A5/ja
Application granted granted Critical
Publication of JP4489483B2 publication Critical patent/JP4489483B2/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Diaphragms For Electromechanical Transducers (AREA)
  • Diaphragms And Bellows (AREA)
  • Electrical Discharge Machining, Electrochemical Machining, And Combined Machining (AREA)
  • Saccharide Compounds (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法に関する。より詳細には、オブジェクトの直列化に関連し、直列化エンジンのランタイム動作を改変する拡張ルーチンを介して、直列化エンジン内の他の既存ルーチンを置き換える必要なしに、あるタイプのオブジェクトを別のタイプのオブジェクトに変形するための、初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法に関する。
一般的な意味で、直列化(serialization)は、単一のまたはグラフの(ネストされた)メモリ内オブジェクトを、リモート位置に送信したりディスク上に永続させたりするのに適した線形のバイトシーケンスに変換することである。反対に非直列化(deserialization)は、線形のバイトシーケンスをとり、対応する単一のまたはグラフのメモリ内オブジェクトを生み出すものである。直列化も非直列化も共に、通常は元のオブジェクトの正確なクローンを生み出すことになる。
従来、直列化コードは、実装全体を置き換えることを除いてはカスタマイズの余地のない、モノリシック実装として記述されてきた。カスタマイズ性または拡張性がないことにより、柔軟性のない直列化機構が、開発者やその他の当事者を含めた市場に押し付けられてきた。モノリシック実装では、特定の問題に直接に対処するためのインクリメンタルな改良またはカスタマイズは不可能であることが多く、不便な次善策が必要であったり、あるいは一定の所望の動作が単に妨げられたりする場合がある。何らかの状況でカスタマイズをしようとする場合、所望の動作を実施する標準ルーチンは、一般に開発者にはアクセス不可能であり、そのため再実装する必要があり、所望のカスタマイズを開発するのに必要な労力が大幅に(しばしば困難になるほどに)増大する。この結果、通常は直列化コード開発者だけしか新しい機能を直列化コードに追加することができず、エンドユーザは、独自の拡張を開発することや既存の機能を改良することができない。
オブジェクトの正確なコピーが直列化および非直列化の目標であることが多いが、場合によっては、オブジェクトのタイプ(型)、名前、データをランタイム変形するのが望ましいことがある。上に示したように、例えばオブジェクトをリモート位置に送信する際に直列化および非直列化が用いられる場合がある。リモート位置は、ソースオブジェクトとは異なるいくつかのオブジェクトタイプ、オブジェクトデータ、およびオブジェクト名を予想することがある。従来の直列化コードは、オブジェクト変形を実施するように記述することができるが、変形は、ランタイムに追加することができず、すべてのユーザにとって同じであり、様々なユーザが異なるニーズを有する可能性を無視するものである。所与の変形が特定時の特定ユーザにとって極度に重要な場合がある一方、この変形の全体の関連性は、全体としてのユーザベースにとっては重大ではなく、そのため開発されない場合がある。
従来の直列化コードはまた、変形すべきオブジェクトを識別する点で、またはオブジェクトに含まれるデータを変形の基礎とする点で、ほとんど柔軟性をもたらさない傾向がある。したがって、直列化および非直列化をランタイムに改変するためのカスタマイズされたルーチンに従って、標準ルーチンを再実装する必要なしに、あるタイプのオブジェクトを別のタイプのオブジェクトに変形するための方法、システム、およびコンピュータプログラム製品が必要とされている。
従来のシステムには上述したような種々の問題があり、さらなる改善が望まれている。
本発明は、このような状況に鑑みてなされたもので、その目的とするところは、柔軟にあるタイプのオブジェクトを別のタイプのオブジェクトに変形することができる、初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法を提供することにある。
本発明は、初期タイプのオブジェクトを最終タイプのオブジェクトに変換するための方法、システム、およびコンピュータプログラム製品に関するものであり、変換プロセスのランタイム動作を改変またはカスタマイズすることを可能にする。以下でより完全に述べる本発明の例示的な実施形態によれば、拡張可能な直列化エンジンが、様々なタイプのオブジェクトを直列化、非直列化、および変形する。直列化エンジンのランタイム動作は、所望のカスタマイズまたは拡張を実施する1つまたは複数の拡張ルーチンによって改変される。これらの拡張ルーチンは、他の既存ルーチンを置き換える必要なしに、直列化エンジンのランタイム動作を改変する。
例示的な一実施形態では、直列化エンジンによって処理のために受け取られた初期オブジェクトについて、タイプ情報を識別する。タイプ情報に基づいて初期オブジェクトを中間表現に変換するが、この中間表現により、オブジェクト名、オブジェクトタイプ、およびオブジェクトデータの修正を含めたランタイム修正が可能になる。初期オブジェクトの中間表現を、直列化エンジンのランタイム動作を改変する1つまたは複数の拡張ルーチンに従って修正し、中間表現を最終タイプの最終オブジェクトに変換する。
初期オブジェクトの中間表現は、オブジェクト名、オブジェクトタイプ、およびオブジェクトデータを含むものとすることができ、これらはそれぞれ、拡張ルーチンによって修正することができる。中間表現はまた、直列化エンジン内の1つまたは複数の標準ルーチンによって修正することもできる。中間表現の修正は、タイプ情報内の特定パターン、初期オブジェクト内のオブジェクトデータ、メタデータ、またはこれらの組合せに基づくものとすることができる。
初期オブジェクトがメモリ内オブジェクトである場合は、直列化エンジンは、初期オブジェクトを直列化して最終オブジェクトを生成する。最終オブジェクトは、XML(eXtensible Markup Language)で、または直列化済みオブジェクトを表すのに適した他の何らかのフォーマットでフォーマットすることができる。同様に、最終オブジェクトがメモリ内オブジェクトである場合は、直列化エンジンは、初期オブジェクトを非直列化して最終オブジェクトを生成する。最終オブジェクトは、非直列化プロセスの一部としてインスタンス化およびポピュレート(populate)することができる。場合によっては、初期オブジェクトも最終オブジェクトも両方ともメモリ内オブジェクトであることがあり、あるいは、直列化エンジンがオブジェクト変形を実施するときなどのように、両方とも直列化済みオブジェクトであることがある。バッファ要件を削減するために、中間表現が最終オブジェクトに変換されるまで中間表現の修正を延期することができる。
本発明のその他の特徴および利点については後続の説明で述べるが、その一部はこの説明から自明であろうし、あるいは本発明の実施によってわかるであろう。本発明の特徴および利点は、添付の特許請求の範囲に特に示す手段および組合せによって実現および得ることができる。本発明のこれらおよび他の特徴は、後続の説明および添付の特許請求の範囲からより完全に明らかになるであろうし、あるいは以下に示す本発明の実施によってわかるであろう。
以上説明したように本発明によれば、柔軟にあるタイプのオブジェクトを別のタイプのオブジェクトに変形することができる。
以下、図面を参照して本発明を適用できる実施形態を詳細に説明する。本発明の前述のまたは他の利点および特徴を得ることのできる方式について述べるために、添付の図面に示す本発明の特定の実施形態を参照しながら、上に簡単に述べた本発明をより具体的に述べる。これらの図面は本発明の典型的な実施形態を表したものにすぎず、したがって本発明の範囲を限定するものと考えるべきではないという理解の上に、本発明について、添付の図面を使用してさらに具体的かつ詳細に記述および説明する。
本発明は、初期タイプのオブジェクトを最終タイプのオブジェクトに変換するための方法、システム、およびコンピュータプログラム製品に及び、変換プロセスのランタイム動作を改変またはカスタマイズすることを可能にする。本発明の実施形態は、後で図6に関してより詳細に解説するように、様々なコンピュータハードウェアを備えた1つまたは複数の専用コンピュータおよび/または1つまたは複数の汎用コンピュータを含むことができる。
図1に、本発明による例示的な直列化モジュール/直列化インフラストラクチャ100(直列化エンジンとも呼ぶ)を示す。オブジェクトインスタンス110に対して、直列化モジュール100は、対応する直列化済みXMLオブジェクト150を作成する。同様に、XMLオブジェクト160に対して、直列化モジュール100は、対応する非直列化済みオブジェクトインスタンス170を作成する。この出願全体を通して、直列化(例えば単一のまたはグラフのメモリ内オブジェクトを、リモート位置に送信したりディスク上に永続させたりするのに適した線形のバイトシーケンスに変換すること)、非直列化(線形のバイトシーケンスから対応する単一のまたはグラフのメモリ内オブジェクトを生み出すこと)、変形(あるオブジェクトを別のオブジェクトに変換すること)などに対する総称的な用語として、直列化を用いる場合がしばしばあることに留意されたい。例えば、ここで直列化モジュール100が様々なタイプのオブジェクトを直列化、非直列化、変形することが、これに当てはまる。
直列化モジュール100は、1つまたは複数の反映(reflection)モジュール120と、1つまたは複数の変換モジュール130と、1つまたは複数の生成モジュール140を備える。この例示的な実施形態では、直列化モジュール100は、受け取ったメモリ内(in-memory)オブジェクトインスタンス110を、リモート位置への送信に適したXMLオブジェクト150に変換し、受け取ったXMLオブジェクトインスタンス160を、メモリ内オブジェクトインスタンス170に変換する。当然ながら、メモリ内(in-memory)およびXMLは、直列化モジュール100が生み出すことまたは受け取ることのできるオブジェクトタイプの例にすぎない。直列化モジュール100内の各モジュール(反映モジュール120、変換モジュール130、生成モジュール140)は、カスタマイズされた直列化、非直列化、または変形のために、ランタイムに置き換えることができる。
反映モジュール120は、受け取ったオブジェクトインスタンス110および受け取ったXMLオブジェクト160のタイプ情報を識別することを担う。タイプ情報は、マネージコード環境内のマネージドタイプ(managed type)に関連する、記憶されたまたは受け取られたメタデータを含むものとすることができる。あるいはタイプ情報は、コンパイル時の自動生成や、手動生成や、標準タイプ情報などを含めて、様々なソースから反映モジュール120に供給することができる。
変換モジュール130は、異なるタイプのオブジェクト間で変換を行う。例示的な変換プロセスは、後で図2〜4に関してより詳細に述べる。異なるオブジェクト間での変換は、任意に複雑にすることができ、中間オブジェクトの生成を含めることができる。この複雑さの一部には、オブジェクト内のデータに基づいて、またオブジェクトに関連するタイプのパターンに基づいて変換することを含めることができる。例えば、どの変換を行うかは、一定のオブジェクトタイプまたはタイプ名や、タイプに関して一定の名前付けされたまたはタイプ付けされたプロパティがあることや、一定のメタデータが付加されたプロパティがあることや、オブジェクトに関連するオブジェクト名などに応じて決まるものとすることができる。あるオブジェクトを別のオブジェクトに変換することに通常なら内在するかもしれないバッファ要件を削減または回避するために、変換は、最終オブジェクトの生成まで延期することができる。
生成モジュール140は、直列化モジュール100によって作成される最終オブジェクトを生成することを担う。XMLオブジェクト150の場合、生成モジュール140は、オブジェクトを生み出し(すなわちオブジェクトにとって適切なXMLを生み出し)、オブジェクトをストリームに書き込むことができる。オブジェクトインスタンス170の場合、生成モジュール140は、オブジェクトをインスタンス化およびポピュレートする。
上に示したように、直列化モジュール100は直列化エンジンとも呼ぶ。図1に示すように、直列化エンジンは、順序付けられたいくつかのモジュールセットで構成される。これらのモジュールがひとまとまりで、すべての動作を担う。後でより詳細に述べるように、モジュールはあるタイプから別のタイプに変換する(すなわち異なるタイプ間の橋渡しをする)ので、個々のモジュールをタイプブリッジと呼ぶ。タイプブリッジは、タイプおよびインスタンスをランタイムに変形することを可能にし、かつ/あるいは、直列化、非直列化、または変形されているオブジェクトに関する情報を追跡することを可能にする。図2〜4に関して、順序付けられたタイプブリッジのセットをタイプブリッジパイプラインと呼ぶが、これは一般に、順序付けられた変換モジュール130のセットに対応する。直列化エンジンによって実施される各動作につき、別々のタイプブリッジパイプラインが存在するものとすることができる。直列化のためのパイプライン(例えば図2)、非直列化のためのパイプライン(例えば図3)、変形のためのパイプライン(例えば図4)、オブジェクトコピーのためのパイプラインなどがある。図2〜4のそれぞれについて個々に解説する前に、3つの図面のすべてに一般に適用可能な情報を以下に提示する。
図2〜4に示す例示的なパイプラインでは、オブジェクトの直列化、非直列化、および変形を担うコード(1つまたは複数のモジュール)が、いくつかの事前定義済みタイプブリッジとして実装される。これらのモジュールは、適切なパイプライン中に配置され、ランタイムに使用される。(図1の破線の四角は、様々なタイプブリッジパイプライン中で使用される利用可能なタイプブリッジモジュールを表すものとする。)図1に示した例示的な直列化エンジン用の公開API(Application Programming Interface)の大部分は、単にこの事前定義済みパイプラインセットを覆うラッパである。このことは、この直列化エンジンがいかに拡張可能であるかを例証している。すなわち、直列化エンジンは抽象パイプラインの単純なセットである。具体的なロジックの実際の実装形態は、いつでも置き換えることのできるプラグ可能モジュールに見られる。
図2〜4に示す例示的なタイプブリッジパイプラインでは、所与のタイプブリッジが、3つのタイプのオブジェクト、すなわち初期タイプオブジェクト、中間タイプオブジェクト、最終タイプオブジェクトのうちの1つを変形することができる。図4では、初期タイプオブジェクトはマネージドコード(managed code)オブジェクトであり、最終タイプオブジェクトは、ワールドワイドウェブコンソーシアム(W3C)情報セット(Infoset)標準に基づくXMLオブジェクトである。3つの図すべてに示されている中間タイプオブジェクトまたは中間表現は、直列化エンジン内に見られる構造であり、後でより詳細に述べるように拡張性ポイントを表す。中間表現は、可変タイプに基づく可変オブジェクトである。したがって可変タイプは、挙動およびタイプ付きデータ記憶を定義する働きをし、可変オブジェクトは、タイプ付きデータを記憶し、タイプに対して定義された挙動を介して記憶済みデータに作用する働きをする。
図2に、初期タイプまたはフォーマット210のメモリ内初期オブジェクト240を直列化するための例示的なタイプブリッジ200を示す。(本明細書および特許請求の範囲では、タイプという用語は、任意のオブジェクトタイプまたはフォーマットを広く含むと解釈されたい。)標準ルーチン250を使用して、初期オブジェクト240を、中間タイプまたはフォーマット220を有する中間表現260Aに変換する。後でより詳細に述べるが、この中間表現は可変であり、オブジェクトタイプもオブジェクトデータも両方とも変更することができる。ただし、中間フォーマット220と初期フォーマット210は同じでもよく、密接に関係していてもよく、いくらか異なってもよく、完全に異なってもよい。
カスタム拡張ルーチン260が、初期オブジェクト240の中間表現260Aを中間表現260Bに変換する。この変換には、オブジェクトタイプ、オブジェクト名、オブジェクトデータなどの変更を含めることができる。カスタム拡張ルーチン260は、一般的には直列化エンジンの、具体的にはタイプブリッジパイプライン200のランタイム拡張を表す。カスタム拡張ルーチン260の使用により、従来の直列化実装形態の場合に通常なら必要となるような標準ルーチン250の再実装が必要でなかったことに留意されたい。
標準ルーチン270が、中間表現260Bを、最終タイプまたはフォーマット230の最終オブジェクト280に変換する。最終オブジェクト280は、リモート位置への送信や永続化などに適したものである。したがって、最終オブジェクト280の最終フォーマット230には、幅広いオブジェクトタイプが含まれる。この説明の他の部分でも同様だが、ここでオブジェクトのタイプ、フォーマット、および表現は、オブジェクトの全体的なタイプおよびフォーマット、ならびにオブジェクト内に含まれる場合のあるタイプ、フォーマット、名前、およびデータを含む広範な用語である。
図3に、初期タイプまたはフォーマット330のオブジェクト340を非直列化するための例示的なタイプブリッジ300を示す。前述の図2と同様、標準ルーチン350が、初期オブジェクト340を、中間タイプまたはフォーマット320を有する中間表現360Aに変換する。カスタム拡張ルーチン360が、中間表現360Aを中間表現360Bに変換する。中間タイプ320は1つまたは複数の中間タイプを表すことに留意されたい。したがって、中間表現360Aと中間表現360Bは異なるタイプとすることができるが、しかしなお、初期タイプ330と最終タイプまたはフォーマット310とに対して特に相対的な中間タイプとして、適切に指定することができる。
標準ルーチン370が、中間表現360Bを最終タイプ310の最終オブジェクト380に変換する。タイプブリッジパイプライン300は非直列化用なので、最終オブジェクト380は、インスタンス化およびポピュレートされるメモリ内オブジェクトである。後でより詳細に述べるが、タイプブリッジパイプライン300は、オブジェクトインスタンスをインスタンス化およびポピュレートするためのコードに接続される。このコードは、インスタンスファクトリまたはライタ、あるいは書込みファクトリと呼ぶことができ、図1に示した生成モジュール140に概して対応する。
図4に、初期オブジェクト440を最終オブジェクト480に変形するための例示的なタイプブリッジパイプライン400を示す。図4で利用可能な個々のタイプブリッジは、異なる3つのオブジェクトタイプまたはフォーマット、すなわちマネージドコード/CLRフォーマットのオブジェクト410と、中間/フレックス(Flex)フォーマットのオブジェクト420と、Infoset/XMLフォーマットのオブジェクト430とのうちの1つを変形することができる。CLRは、共通言語ランタイム(Common Language Runtime)を意味し、Microsoftの.NET(登録商標)マネージド実行環境(managed execution environment)の一部である。CLRの利点としてはとりわけ、言語間統合や言語間例外処理などが挙げられる。言語コンパイラが、タイプ、メンバ、参照を記述するためのメタデータを出力する。メタデータは、コードと共に共通言語ランタイムのポータブル実行ファイルに記憶される。当然、CLRはマネージドコードタイプの一例にすぎない。図4に示すように、オブジェクトが両方ともメモリ内オブジェクト(例えばCLRフォーマットのオブジェクト)であってもよく、あるいはオブジェクトが両方とも直列化済みオブジェクト(例えばInfosetフォーマットのオブジェクト)であってもよい。言い換えれば、初期オブジェクトと最終オブジェクトは同じタイプとすることができる。
CLRオブジェクト410は、データと挙動の組合せを含むCLRタイプのインスタンスだが、直列化の目的に関係があるのはデータだけである。上に示したように、Infosetオブジェクトまたは表現430は、一定の意味論による事前定義済みデータノードセットに構成された木構造に関するW3C標準に従ってフォーマットされる。フレックスオブジェクト420は、直列化エンジン内にみられる構造であり、シリアライザ(serilalizer)にとっての拡張性ポイントを表す。
フレックスオブジェクトは、可変タイプに基づく可変オブジェクトである。可変タイプをフレックスタイプと呼ぶ。図4に示す例示的なタイプブリッジパイプライン400では、フレックスタイプは、それに対応するCLRタイプと同じ機能を提供する。すなわち、挙動およびタイプデータ記憶を定義する。同様に、フレックスオブジェクトはCLRオブジェクトと同じ機能を提供する。すなわち、タイプ付きデータを記憶し、タイプに対して定義された挙動を介してこのデータに作用する。フレックスタイプおよびフレックスオブジェクトを使用する理由は、CLRタイプが不変だからである。
図4に示す例示的なタイプブリッジパイプラインでは、単純かつ拡張可能にするために、直列化することのできるタイプにいくつかの制約を課す。これらの制約により、シリアライザが所与のタイプを直列化および非直列化するために認識する必要のある種々のパターンおよび置換の数が削減される。このためには、直列化エンジンは、コアモデルと呼ばれるものに従うタイプを有するCLRオブジェクトをどのように直列化するかを理解するだけでよい。コアモデルに準拠するタイプは、それらのデータをプロパティ(またはフィールド)として公開するか、あるいは特定のインタフェース(明示的な読出しメソッドおよび書込みメソッドを定義するもの)を実装しなければならない。さらに、これらのタイプは、公開デフォルトコンストラクタを提供する必要がある。コアモデルに従わないタイプは、直列化することができない。
フレックスタイプおよびフレックスオブジェクトを使用して、所与のCLRオブジェクトの形状(メンバやインタフェースなど)を、コアモデルに準拠するように変更する。所与のCLRオブジェクトに対して、インスタンスのCLRタイプとは異なるメンバおよびタイプ情報のセットを公開するフレックスタイプを構築することができる。このフレックスタイプに基づくフレックスオブジェクトをインスタンス化することができ、このフレックスオブジェクトは、CLRオブジェクト自体へ一定の呼出しを委任する。フレックスオブジェクトはまた、委任の前と後のどちらかで、オプションでCLRオブジェクト内のデータを変形することもできる。この結果、CLRオブジェクト内のデータを、コアモデルに準拠する方式を含めた様々な方式で公開することができる。したがってタイプブリッジは、コアモデルに準拠しないオブジェクトタイプで開始し、コアモデルに準拠するオブジェクトタイプを作成することができる。
タイプブリッジは、CLRオブジェクト、フレックスオブジェクト、およびInfoset表現を、様々な方式で変形することができる。所与のタイプブリッジは、それが作用する入力タイプと、それが作成または生成する出力タイプとを有する。この出力は、パイプライン中の次のタイプブリッジに渡される。例示的なタイプブリッジパイプライン400では、以下の変形が可能である。
Figure 0004489483
様々な分類のタイプブリッジが構成されて、直列化エンジンの基礎動作が提供される。(図2および3では総称的なタイプを参照しているが、以下では、さらにコンテキストを提供するために、図4に示した特定タイプを使用してこれらの図に言及する。)
1.直列化は、CLRオブジェクトをInfosetオブジェクトまたは表現に変形する。この動作を実施するために、CLR−フレックスタイプブリッジ(例えば標準ルーチン250)と、任意の数のフレックス−フレックスブリッジと、フレックス−Infosetタイプブリッジ(例えば標準ルーチン270)とを含むタイプブリッジパイプライン(図2に示したものなど)が存在する。
2.非直列化は、Infoset表現をCLRオブジェクトに変形する。この動作を実施するために、Infosetフレックスタイプブリッジ(例えば標準ルーチン350)と、任意の数のフレックス−フレックスブリッジと、フレックス−CLRタイプブリッジ(例えば標準ルーチン370)とを含むタイプブリッジパイプライン(図3に示したものなど)が存在する。
3.オブジェクトコピーは、CLRオブジェクトのディープコピーを生み出すのに使用される。この動作を実施するために、CLR−CLRタイプブリッジを含むタイプブリッジパイプラインが存在する。
4.オブジェクト変形(図4)は、インスタンスデータ(中間表現460Aおよび460B)に対してオプションの変形(標準またはカスタム拡張ルーチン460)を行いながら、1つまたは複数のCLRオブジェクト(初期オブジェクト440)のディープコピー(最終オブジェクト480)を生み出す。この動作を実施するために、CLR−フレックスタイプブリッジ(標準またはカスタムルーチン450)と、変形を行う1つまたは複数のオプションのフレックス−フレックスタイプブリッジ(標準またはカスタム拡張ルーチン460)と、フレックス−CLRタイプブリッジ(標準またはカスタムルーチン470)とを含むタイプブリッジパイプラインが存在する。
5.Infoset変形は、コピーを生み出し、オプションでInfosetオブジェクトを変形する。オブジェクトコピーと同様、この動作を実施するために、InfosetInfosetタイプブリッジを含むタイプブリッジパイプラインが存在する。
最後の3つのオプションは、これらが実施される方式のため注目に値する。他の実装形態ではオブジェクトデータまたはInfosetデータをバッファに入れるが、本発明の実施形態では、バッファリング要件を削減するために変形を延期することができる。この結果、性能およびリソース管理を大きく改善することができる。
上記の動作をサポートするために、直列化エンジンは、適切な変形を実施するストックまたはベースタイプブリッジを提供する。図4で、標準またはカスタムルーチン450、460、470のいずれかは、ストックタイプブリッジすなわちカスタム代替とすることができる。拡張可能な構成機構を使用して、ランタイムに、適切なタイプブリッジを識別しパイプラインにロードする。直列化エンジンは、これらのストックパイプラインを使用して、要求された動作を実施する。しかし、エンジンは特定のストック実装形態ではなく抽象タイプブリッジの概念を用いるので、ストックタイプブリッジはいつでも置き換えることができる。例示的な一実施形態では、パイプラインは単にパイプラインに対するタイプブリッジのリストを含むだけであり、リストを変更するとパイプラインが変更される。この例示的な実施形態では、特定のタイプブリッジがオブジェクトのために呼び出された後は、他のタイプブリッジがこのオブジェクトのために呼び出されることはない。
例示的な一実施形態では、CLR410、フレックス420、およびInfoset430は、図2に示した直列化の場合の初期フォーマット210、中間フォーマット220、および最終フォーマット230に対応し、図3に示した非直列化の場合の最終タイプ310、中間タイプ320、および初期タイプ330に対応することに留意されたい。フレックスオブジェクトは、CLRとInfosetとの間の中間フォーマットである。この例示的な実施形態では、タイプブリッジは、CLRからInfosetに、またその逆に直接に変形することはできない。このことはとりわけ、この例示的な直列化エンジンを単純化するのに役立つ。直列化エンジンの基礎機能または動作はストックタイプブリッジによって定義されるが、開発者が予想することのできる追加機能(レガシープログラミングモデルのサポートなど)も多くある。ストックタイプブリッジは、これらの機能を実装するように設計されたものとすることもできるが、この代わりに、この目的に役立ついくつかのストックフレックス−フレックスタイプブリッジがある。この手法により、ストックタイプブリッジは単純かつ拡張可能になる。この結果、様々な開発者が、標準機能に修正を加え、開発者自身の新しい機能を提供することができる。
この例示的な実施形態で、FirstNameおよびLastNameという2つのプロパティを有するPersonという名前のCLRタイプに対する直列化プロセスを考えてみる。このタイプのインスタンスを直列化(図2参照)するには、ストックCLR−フレックスタイプブリッジと、ストックフレックス−Infosetタイプブリッジとを含むパイプラインが必要である。直列化エンジンは、PersonインスタンスをCLR−フレックスタイプブリッジに渡す。このタイプブリッジは、Personインスタンスに基づいて、かつPersonインスタンスに委任して、新しいフレックスオブジェクトインスタンスを返す。次いでフレックスオブジェクトは、フレックス−Infosetタイプブリッジに渡される。
フレックス−Infosetタイプブリッジは、フレックスオブジェクトをInfoset表現に変形または変換することを担う。変換前に、ストックフレックス−Infosetタイプブリッジは、フレックスオブジェクトをInfosetにマッピングする方式を判定する。この例でのストック実装は、スキーマ言語を使用し、この言語で定義される構造でマッピングを定義する。タイプブリッジは置き換え可能なので、新しいスキーマ言語に対するサポートを含めた新しいマッピング機構を導入することもでき、これは直列化エンジン内の別の拡張性ポイントを表す。マッピングプロセスが完了すると、フレックスオブジェクトはInfoset表現に変形され、ストリームに書き込まれる。
先に簡単に触れたように、直列化エンジン内のタイプブリッジは、ライタファクトリに接続される。ライタファクトリは、データを書き込むことのできるリソースを生み出すことを担う。このリソースは任意のターゲットにデータを書き込むことができるが、最も一般的な宛先は、データストリーム(搬送に向けて直列化の後で)、およびCLRオブジェクト(非直列化の後で)である。この例示的な実施形態でのストックライタファクトリは、ユーザから供給されたデータストリームに書き込むリソースを返す。このファクトリによって作成されたリソースを、任意の所望のフォーマットでストリームに書き込むことができる。したがって、これはXML直列化フォーマットに限定されず、これによりライタファクトリは置き換え可能になり、直列化エンジン内にさらに別の拡張性ポイントがもたらされる。
この例示的な実施形態でのInfoset表現の非直列化(例えば図3参照)は、ストックInfosetフレックスタイプブリッジと、ストックフレックス−CLRタイプブリッジとを含むパイプラインを必要とする。直列化エンジンは、ソースInfosetを表すユーザ提供のストリームと、非直列化の対象であるCLRタイプ(Person)とを、第1のタイプブリッジ(Infosetフレックス)に渡す。このタイプブリッジは、ストリームに委任するPersonタイプに基づいて、新しいフレックスオブジェクトインスタンスを生み出す。得られたフレックスオブジェクトはフレックス−CLRタイプブリッジに渡され、フレックス−CLRタイプブリッジは、Personのインスタンスに、フレックスオブジェクトからのデータをポピュレートする(フレックスオブジェクトは委任しているので、実際にはストリーム中にある)。直列化の場合と同様、非直列化パイプラインはライタファクトリ中で終了する。非直列化パイプラインの場合のストック書込みファクトリは、非直列化の対象であるCLRタイプのインスタンスを生み出すことを担う。
直列化および非直列化に加えて、Personタイプを変形することが望ましい場合もある。上に示したように、Personタイプの形状は、FirstNameおよびLastNameという2つのプロパティを含む。例えば、このPerson定義を使用するあるアプリケーションが、異なるPerson定義(例えばFullNameという1つのプロパティだけを有するPerson)を使用する別のアプリケーションと対話すると仮定する。両方のアプリケーションが同じPersonタイプを使用するようにすることが1つのオプションだが、これは常に可能というわけではない(両方のアプリケーションがすでに記述されている場合がある)。
述べた例示的な実施形態によれば、一方のアプリケーション中のPersonインスタンスの形状を他方のアプリケーション中で予想される形状に変形するタイプブリッジを生み出すことができる。この変形(図2参照)を行うには、新しいフレックス−フレックスタイプブリッジ(例えばカスタム拡張ルーチン260)を構築し、直列化パイプライン中のストックCLR−フレックスタイプブリッジ(例えば標準ルーチン250)の後に配置する必要がある。直列化プロセスの間、このタイプブリッジには、Personインスタンスに委任するフレックスオブジェクトが渡される。タイプブリッジは、異なる形状(単一のFullNameプロパティ)を有する新しいフレックスタイプを構築する。このフレックスタイプに基づいて、元のフレックスオブジェクト上にみられるFirstNameおよびLastNameを連結する新しいフレックスオブジェクト(これもまたPersonインスタンスに委任する)が生み出される。このフレックスオブジェクトは、2つのプロパティではなく1つのプロパティを直列化するストックフレックス−Infosetタイプブリッジ(例えば標準ルーチン270)に渡される。フレックス−Infosetタイプブリッジが新しいFullNameプロパティの値を要求するまでは、連結が実際に行われなくてもよいことは、注目に値する。このため変形は、Infosetすなわち最終オブジェクトが生み出されるまで延期される。
したがって、本発明による直列化エンジンは、システム間およびタイプ間で変形するための拡張可能アーキテクチャを提供することができ、これは、プラグ可能なタイプおよびデータ変形に対するサポート、可変タイプおよびオブジェクトに対するサポート、プラグ可能なスキーマタイプシステムに対するサポート、プラグ可能なデータフォーマットに対するサポートなどを含む。
本発明はまた、機能的ステップおよび/または非機能的動作を含む方法の点から述べることができる。以下、本発明を実施する際に行うことのできる動作およびステップについて述べる。通常、機能的ステップは、達成される結果の点から本発明を記述するものであり、非機能的動作は、特定の結果を達成するためのより具体的なアクションを記述するものである。機能的ステップおよび非機能的動作を特定の順序で記述し特許請求する場合があるが、本発明は、どんな特定の順序付けにも、動作および/またはステップの組合せにも限定されるとは限らない。
図5A,5Bに、本発明によりオブジェクトを直列化および非直列化する方法の例示的な動作およびステップを示す。これは、直列化エンジンによるランタイム処理のために初期タイプの初期オブジェクトを受け取る動作(512)を含むことができる。初期オブジェクトのタイプ情報を識別するステップ(520)は、タイプ情報を受け取る動作(522)を含むことができる。タイプ情報は、マネージドコードに関連するメタデータとして供給することができる。初期タイプ情報に基づいて初期オブジェクトを中間表現に変換するステップ(530)は、タイプ情報に基づいて中間表現を生成する動作(図示せず)と、中間表現を修正するために、1つまたは複数のカスタム拡張ルーチンを呼び出す動作(532)と、1つまたは複数の標準ルーチンを呼び出す動作(534)とを含むことができる。1つまたは複数の拡張ルーチンは、直列化エンジンのランタイム動作を改変する。
中間表現は、オブジェクト名、オブジェクトタイプ、および/またはオブジェクトデータを含むことができることに留意されたい。図示していないが、中間表現を修正するステップ(540)もまた、中間表現を修正するために、1つまたは複数のカスタム拡張ルーチンを呼び出す動作(図示せず)および1つまたは複数の標準ルーチンを呼び出す動作(図示せず)を含むことができる。中間表現を修正する動作(540)はさらに、オブジェクトの名前、タイプ、および/またはデータを変更する動作(542)を含むことができる。修正を延期するステップ(550)は、中間表現を実際には修正せずに、中間表現をどのように修正するかを指定する動作(552)を含むことができる。延期することは、中間表現をその場で修正することに通常なら関連するバッファ要件および処理要件を削減することに役立つ。
初期オブジェクトの中間表現を最終タイプまたはフォーマットの最終オブジェクトに変換するステップ(560)は、以下の動作を含むことができる。直列化(563)のときは、このステップは、最終オブジェクトを生み出すまたは生成する動作(565)を含むことができる。前述の例示的な一実施形態では、最終オブジェクトを搬送に向けてXMLにフォーマットする。したがって、最終オブジェクトを生み出すまたは生成すること(565)は、適切なXMLを生成し、最終オブジェクトをストリームに書き込むことを含むことができる。あるいは最終オブジェクトは、ディスクに永続させるためにフォーマットするか、または直列化された初期オブジェクトを表すのに適した他の任意のフォーマットにフォーマットすることができる。非直列化(564)のときは、このステップは、最終オブジェクトをインスタンス化する動作(566)およびポピュレートする動作(568)を含むことができる。変換するステップ(560)の間、どのように変更を行うかを示しているが実際には変更を行っていない延期された修正があれば、カスタム拡張ルーチンおよび標準ルーチンを呼び出す。
本発明の範囲内の実施形態には、コンピュータ実行可能命令またはデータ構造を搬送するまたは記憶したコンピュータ可読媒体も含まれる。このようなコンピュータ可読媒体は、汎用または専用コンピュータからアクセスすることのできる任意の利用可能な媒体とすることができる。限定ではなく例として、このようなコンピュータ可読媒体には、RAM、ROM、EEPROM(electrically erasable programmable read-only memory)、CD(compact disc)−ROMまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイスを含めることができ、あるいは、所望のプログラムコード手段をコンピュータ実行可能命令またはデータ構造の形で搬送または記憶するのに使用でき、汎用または専用コンピュータからアクセスできるその他の任意の媒体を含めることができる。情報が、ネットワークまたは他の通信接続(配線式または無線式、あるいは配線式と無線式の組合せ)を介してコンピュータに転送または提供されるとき、コンピュータはこの接続をコンピュータ可読媒体と見なすのが適切である。したがって、このような接続はどれも、コンピュータ可読媒体と呼ぶのが適切である。以上の組合せもまた、コンピュータ可読媒体の範囲に含めるべきである。コンピュータ実行可能命令は例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに何らかの機能または機能グループを実施させる命令およびデータを含む。
図6および以下の解説は、本発明を実施することのできる適したコンピューティング環境に関する簡潔で一般的な説明を提供するものである。必須ではないが本発明は、ネットワーク環境でコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な状況で述べる。一般にプログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連するデータ構造、およびプログラムモジュールは、本明細書に開示した方法のステップを実行するためのプログラムコード手段の例を表す。このような実行可能命令または関連するデータ構造の特定のシーケンスは、このようなステップで述べた機能を実施するための対応する動作の例を表す。
当業者なら理解するであろうが、本発明は、パーソナルコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家庭用電化製品、ネットワークPC(personal computer)、ミニコンピュータ、メインフレームコンピュータなど、多くのタイプのコンピュータシステム構成を含むネットワークコンピューティング環境で実施することができる。本発明は分散コンピューティング環境で実施することもでき、その場合、タスクは、通信ネットワークを介して(配線式リンクまたは無線リンク、あるいは配線式リンクと無線リンクの組合せによって)リンクされたローカルおよびリモートの処理デバイスによって実施される。分散コンピューティング環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶デバイスに位置することができる。
図6を参照すると、本発明を実施するための例示的なシステムは、従来型のコンピュータ620の形をとる汎用コンピューティングデバイスを含み、コンピュータ620は、プロセッサ621と、システムメモリ622と、システムメモリ622を含めた様々なシステムコンポーネントをプロセッサ621に結合するシステムバス623とを備える。システムバス623は、様々なバスアーキテクチャのいずれかを用いた、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスを含めて、いくつかのタイプのバス構造のいずれかとすることができる。システムメモリは、読取り専用メモリ(ROM)624およびランダムアクセスメモリ(RAM)625を含む。ROM624には、起動中などにコンピュータ620内の要素間で情報を転送するのを助ける基本ルーチンを含むBIOS(basic input/output system)626を記憶することができる。
コンピュータ620はまた、磁気ハードディスク639に対して読み書きするための磁気ハードディスクドライブ627と、リムーバブル磁気ディスク629に対して読み書きするための磁気ディスクドライブ628と、CD−ROMやその他の光媒体などリムーバブル光ディスク631に対して読み書きするための光ディスクドライブ630を備えることもできる。磁気ハードディスクドライブ627、磁気ディスクドライブ628、および光ディスクドライブ630は、それぞれハードディスクドライブインタフェース632、磁気ディスクドライブインタフェース633、および光ドライブインタフェース634によってシステムバス623に接続される。これらのドライブおよび関連するコンピュータ可読媒体は、コンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの記憶域をコンピュータ620に提供する。本明細書に述べるこの例示的環境は、磁気ハードディスク639、リムーバブル磁気ディスク629、およびリムーバブル光ディスク631を採用しているが、その他のタイプのデータ記憶用コンピュータ可読媒体を使用することもでき、これらには、磁気カセット、フラッシュメモリカード、DVD(digital versatile disk)、ベルヌーイカートリッジ、RAM、ROMなどが含まれる。
ハードディスク639、磁気ディスク629、光ディスク631、ROM624、またはRAM625には、1つまたは複数のプログラムモジュールを含むプログラムコード手段を記憶することができる。これらには、オペレーティングシステム635、1つまたは複数のアプリケーションプログラム636、その他のプログラムモジュール637、およびプログラムデータ638が含まれる。ユーザは、キーボード640、ポインティングデバイス642を介して、またはマイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなど他の入力デバイス(図示せず)を介して、コンピュータ620にコマンドおよび情報を入力することができる。これらおよび他の入力デバイスは、システムバス623に結合されたシリアルポートインタフェース646を介してプロセッサ621に接続されることが多い。あるいは入力デバイスは、パラレルポート、ゲームポート、USB(Universal Serial Bus)など、他のインタフェースで接続してもよい。モニタ647または他の表示デバイスもまた、ビデオアダプタ648などのインタフェースを介してシステムバス623に接続される。モニタに加えて、パーソナルコンピュータは通常、スピーカやプリンタなど他の周辺出力デバイス(図示せず)も備える。
コンピュータ620は、リモートコンピュータ649aおよび649bなど1つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク化された環境で動作することができる。リモートコンピュータ649aおよび649bはそれぞれ、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、またはその他の一般的なネットワークノードとすることができ、図6にはメモリ記憶デバイス660aおよび660bとそれらに関連するアプリケーションプログラム636aおよび636bしか示していないが、通常は、コンピュータ620に関して上述した要素の多くまたはすべてを備える。図6に示す論理接続は、ローカルエリアネットワーク(LAN)661およびワイドエリアネットワーク(WAN)662を含むが、これらはこの図に限定としてではなく例として提示するものである。このようなネットワーキング環境は、オフィス全体または企業全体のコンピュータネットワーク、イントラネット、およびインターネットでよくみられるものである。
コンピュータ620は、LANネットワーキング環境で使用されるときは、ネットワークインタフェースまたはアダプタ663を介してローカルネットワーク661に接続される。WANネットワーキング環境で使用されるときは、インターネットなどのワイドエリアネットワーク662を介した通信を確立するためのモデム664、無線リンク、またはその他の手段を備えることができる。モデム664は内蔵でも外付けでもよく、シリアルポートインタフェース646を介してシステムバス623に接続される。ネットワーク化された環境では、コンピュータ620に関して示したプログラムモジュールまたはその一部をリモートのメモリ記憶デバイスに記憶することができる。図示のネットワーク接続は例示的なものであり、ワイドエリアネットワーク662を介してコンピュータ間で通信を確立する他の手段を使用することもできることは理解されるであろう。
本発明は、その趣旨または本質的な特徴を逸脱することなく、他の特定の形で実施することもできる。述べた実施形態は、あらゆる点で、単に例示的であって限定的ではないものと考えるべきである。したがって、本発明の範囲は、以上の記述によってではなく添付の特許請求の範囲によって示す。特許請求の範囲の均等物の意味および範囲に含まれるすべての変更は、本発明の範囲に含まれる。
本発明を適用できる実施形態の例示的な直列化モジュールおよび直列化インフラストラクチャを示す図である。 本発明を適用できる実施形態の例示的な直列化パイプラインのコンテキストにおけるオブジェクト変換を示す図である。 本発明を適用できる実施形態の例示的な非直列化パイプラインのコンテキストにおけるオブジェクト変換を示す図である。 本発明を適用できる実施形態の例示的なタイプ変形パイプラインのコンテキストにおけるオブジェクト変換を示す図である。 本発明を適用できる実施形態のオブジェクトを直列化、非直列化、および変形する方法の例示的な動作およびステップを示す図である。 本発明を適用できる実施形態のオブジェクトを直列化、非直列化、および変形する方法の例示的な動作およびステップを示す図である。 本発明を適用できる実施形態の動作環境を提供する例示的なシステムを示す図である。
符号の説明
100 直列化モジュール
110 オブジェクトインスタンス
120 反映モジュール
130 変換モジュール
140 生成モジュール
150 XMLオブジェクト
160 XMLオブジェクト
170 オブジェクトインスタンス
200 タイプブリッジパイプライン
210 初期フォーマット
220 中間フォーマット
230 最終フォーマット
240 初期オブジェクト
250 標準ルーチン
260 カスタム拡張ルーチン
260A 中間表現
260B 中間表現
270 標準ルーチン
280 最終オブジェクト
300 タイプブリッジパイプライン
310 最終タイプ
320 中間タイプ
330 初期タイプ
340 初期オブジェクト
350 標準ルーチン
360 カスタム拡張ルーチン
360A 中間表現
360B 中間表現
370 標準ルーチン
380 最終オブジェクト
400 タイプブリッジパイプライン
410 マネージドコード/CLRフォーマットのオブジェクト
420 中間/フレックスフォーマットのオブジェクト
430 Infoset/XMLフォーマットのオブジェクト
440 初期オブジェクト
450 標準またはカスタムルーチン
460 標準またはカスタム拡張ルーチン
460A 中間表現
460B 中間表現
470 標準またはカスタムルーチン
480 最終オブジェクト
620 コンピュータ
621 プロセッサ
622 システムメモリ
623 システムバス
624 読取り専用メモリ(ROM)
625 ランダムアクセスメモリ(RAM)
626 BIOS
627 磁気ハードディスクドライブ
628 磁気ディスクドライブ
629 リムーバブル磁気ディスク
630 光ディスクドライブ
631 光ディスク
632 ハードディスクドライブインタフェース
633 磁気ディスクドライブインタフェース
634 光ドライブインタフェース
635 オペレーティングシステム
636 アプリケーションプログラム
636a アプリケーションプログラム
636b アプリケーションプログラム
637 その他のプログラムモジュール
638 プログラムデータ
639 磁気ハードディスク
640 キーボード
642 ポインティングデバイス
646 シリアルポートインタフェース
647 モニタ
648 ビデオアダプタ
649a リモートコンピュータ
649b リモートコンピュータ
661 ローカルエリアネットワーク(LAN)
662 ワイドエリアネットワーク(WAN)
663 ネットワークインタフェース
664 モデム

Claims (33)

  1. 様々なタイプのデータオブジェクトを直列化および非直列化することのできるコンピュータ実行可能命令を有する拡張可能な直列化エンジンを含むコンピュータにおいて、前記コンピュータ実行可能命令を前記コンピュータが実行することによって実施される初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法であって、前記直列化エンジンの実装を置き換える必要なしに前記直列化エンジンのランタイム動作を1つまたは複数の拡張ルーチンによって改変することを可能にし、前記方法は、
    前記直列化エンジンによるランタイム処理のために初期タイプの初期オブジェクトを受け取る動作と、
    前記初期オブジェクトの前記初期タイプに関するタイプ情報を受け取る動作と、
    前記タイプ情報に基づいて、ランタイム修正に適した前記初期オブジェクトの中間表現を生成する動作と、
    1つまたは複数のカスタム拡張ルーチンを呼び出して、前記初期オブジェクトの修正済み中間表現へ前記初期オブジェクトの前記中間表現を変更し、それにより前記直列化エンジンの前記ランタイム動作を改変する動作と、
    前記初期オブジェクトの前記修正済み中間表現から最終タイプの最終オブジェクトを生成する動作であって、前記最終オブジェクト及び前記初期オブジェクトの少なくとも1つはメモリ内オブジェクトであり、前記最終オブジェクトは、前記初期オブジェクトに基づいてインスタンス化およびポピュレートされることになるメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを非直列化して前記最終オブジェクトを生成し、前記初期オブジェクトはメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを直列化して前記最終オブジェクトを生成する、動作とを備え、
    前記中間表現を変更するために呼び出される前記1つまたは複数のカスタム拡張ルーチンは、前記中間表現を実際には変更せずに、前記中間表現をどのように変更するかを指定し、それにより前記中間表現の変更は、バッファリング要件を削減するために前記最終オブジェクトの生成まで延期される
    ことを特徴とする方法。
  2. 前記中間表現は、前記初期オブジェクトについての全体的なタイプ、および前記初期オブジェクト内に含まれる1つまたは複数のオブジェクトについてのオブジェクト名、オブジェクトタイプ、オブジェクトデータを含む
    ことを特徴とする請求項1に記載の方法。
  3. 前記全体的なオブジェクトタイプ、および前記初期オブジェクト内に含まれる前記1つまたは複数のオブジェクトについての前記オブジェクト名、前記オブジェクトタイプ、前記オブジェクトデータのうちの、少なくとも1つを変更する動作
    をさらに備えることを特徴とする請求項2に記載の方法。
  4. 1つまたは複数の標準ルーチンを呼び出して、前記初期オブジェクトの前記中間表現を修正する動作
    をさらに備えることを特徴とする請求項1に記載の方法。
  5. 前記初期オブジェクトの前記中間表現の修正は、前記タイプ情報内の特定パターンに基づく
    ことを特徴とする請求項1に記載の方法。
  6. 前記初期オブジェクトの前記中間表現の修正は、前記初期オブジェクト内のオブジェクトデータに基づく
    ことを特徴とする請求項1に記載の方法。
  7. 前記直列化エンジンは、1つまたは複数のメッセージを送受信する分散アプリケーション用のメッセージングシステムの一部であり、前記初期オブジェクトおよび前記最終オブジェクトは、メッセージの少なくとも一部を表す
    ことを特徴とする請求項1に記載の方法。
  8. 様々なタイプのデータオブジェクトを直列化および非直列化することのできるコンピュータ実行可能命令を有する拡張可能な直列化エンジンを含むコンピュータに、初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法を実行させるためのコンピュータ実行可能命令を格納したコンピュータ読み取り可能な記録媒体であって、前記方法は、前記直列化エンジンの実装を置き換える必要なしに前記直列化エンジンのランタイム動作を1つまたは複数の拡張ルーチンによって改変することを可能にし、前記方法は、
    前記直列化エンジンによるランタイム処理のために初期タイプの初期オブジェクトを受け取る動作と、
    前記初期オブジェクトの前記初期タイプに関するタイプ情報を受け取る動作と、
    前記タイプ情報に基づいて、ランタイム修正に適した前記初期オブジェクトの中間表現を生成する動作と、
    1つまたは複数のカスタム拡張ルーチンを呼び出して、前記初期オブジェクトの修正済み中間表現へ前記初期オブジェクトの前記中間表現を変更し、それにより前記直列化エンジンの前記ランタイム動作を改変する動作と、
    前記初期オブジェクトの前記修正済み中間表現から最終タイプの最終オブジェクトを生成する動作であって、前記最終オブジェクト及び前記初期オブジェクトの少なくとも1つはメモリ内オブジェクトであり、前記最終オブジェクトは、前記初期オブジェクトに基づいてインスタンス化およびポピュレートされることになるメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを非直列化して前記最終オブジェクトを生成し、前記初期オブジェクトはメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを直列化して前記最終オブジェクトを生成する、動作とを備え、
    前記中間表現を変更するために呼び出される前記1つまたは複数のカスタム拡張ルーチンは、前記中間表現を実際には変更せずに、前記中間表現をどのように変更するかを指定し、それにより前記中間表現の変更は、バッファリング要件を削減するために前記最終オブジェクトの生成まで延期される
    ことを特徴とするコンピュータ読み取り可能な記録媒体。
  9. 前記中間表現は、前記初期オブジェクトについての全体的なタイプ、および前記初期オブジェクト内に含まれる1つまたは複数のオブジェクトについてのオブジェクト名、オブジェクトタイプ、オブジェクトデータを含む
    ことを特徴とする請求項8に記載のコンピュータ読み取り可能な記録媒体。
  10. 前記方法は、前記全体的なオブジェクトタイプ、および前記初期オブジェクト内に含まれる前記1つまたは複数のオブジェクトについての前記オブジェクト名、前記オブジェクトタイプ、前記オブジェクトデータのうちの、少なくとも1つを変更する動作をさらに備えることを特徴とする請求項9に記載のコンピュータ読み取り可能な記録媒体。
  11. 前記方法は、1つまたは複数の置換可能な標準ルーチンを呼び出して、前記初期オブジェクトの前記中間表現を修正する動作をさらに備えることを特徴とする請求項8に記載のコンピュータ読み取り可能な記録媒体。
  12. 前記初期オブジェクトの前記中間表現の修正は、前記タイプ情報内の特定パターン、メタデータ、および前記初期オブジェクト内のオブジェクトデータのうちの少なくとも1つに基づく
    ことを特徴とする8に記載のコンピュータ読み取り可能な記録媒体。
    徴とする請求項8に記載のコンピュータ読み取り可能な記録媒体。
  13. 前記初期オブジェクトと前記最終オブジェクトは両方ともメモリ内オブジェクトである
    ことを特徴とする請求項8に記載のコンピュータ読み取り可能な記録媒体。
  14. 様々なタイプのデータオブジェクトを直列化および非直列化するコンピュータ実行可能命令を有する拡張可能な直列化エンジンを含むコンピュータにおいて、前記コンピュータ実行可能命令を前記コンピュータが実行することによって実施される初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変換する方法であって、前記直列化エンジンの1つまたは複数の他の既存ルーチンを置き換える必要なしに前記直列化エンジンの動作を1つまたは複数の拡張ルーチンによってランタイムに改変することを可能にし、前記方法は、
    前記直列化エンジンによるランタイム処理のために受け取った初期タイプの初期オブジェクトに関するタイプ情報を識別するステップと、
    前記タイプ情報に基づいて、前記初期オブジェクトを、ランタイム修正に適した前記初期オブジェクトの中間表現に変換するステップと、
    前記初期オブジェクトの修正済み中間表現を生成するように前記初期オブジェクトの前記中間表現を1つまたは複数の拡張ルーチンに従って修正し、それにより前記直列化エンジンのランタイム動作を改変するステップと、
    前記初期オブジェクトの前記修正済み中間表現を最終タイプの最終オブジェクトに変換するステップであって、前記最終オブジェクト及び前記初期オブジェクトの少なくとも1つはメモリ内オブジェクトであり、前記最終オブジェクトは、前記初期オブジェクトに基づいてインスタンス化およびポピュレートされることになるメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを非直列化して前記最終オブジェクトを生成し、前記初期オブジェクトはメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを直列化して前記最終オブジェクトを生成する、ステップと、
    前記中間表現によるバッファリング修正を回避するために、前記中間表現が前記最終オブジェクトに変換されるまでは前記中間表現の修正を延期するステップと
    を備えることを特徴とする方法。
  15. 前記初期オブジェクトの前記中間表現は、オブジェクト名、オブジェクトタイプ、オブジェクトデータのうちの少なくとも1つを含む
    ことを特徴とする請求項14に記載の方法。
  16. 前記初期オブジェクトの前記中間表現を1つまたは複数の拡張ルーチンに従って修正するステップは、前記オブジェクト名、前記オブジェクトタイプ、前記オブジェクトデータのうちの少なくとも1つを修正することを含む
    ことを特徴とする請求項15に記載の方法。
  17. 前記初期オブジェクトの前記中間表現を、前記直列化エンジン内の1つまたは複数の標準ルーチンに従って修正するステップ
    をさらに備えることを特徴とする請求項14に記載の方法。
  18. 前記初期オブジェクトの前記中間表現の修正は、前記タイプ情報内の特定パターンと、前記初期オブジェクト内のオブジェクトデータとのうちのどちらか、または両方に基づく
    ことを特徴とする請求項14に記載の方法。
  19. 前記初期オブジェクトと前記最終オブジェクトは両方ともメモリ内オブジェクトである
    ことを特徴とする請求項14に記載の方法。
  20. 様々なタイプのデータオブジェクトを直列化および非直列化するコンピュータ実行可能命令を有する拡張可能な直列化エンジンを含むコンピュータに、初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変換する方法を実行させるためのコンピュータ実行可能命令を格納したコンピュータ読み取り可能な記録媒体であって、前記方法は、前記直列化エンジンの1つまたは複数の他の既存ルーチンを置き換える必要なしに前記直列化エンジンの動作を1つまたは複数の拡張ルーチンによってランタイムに改変することを可能にし、前記方法は、
    前記直列化エンジンによるランタイム処理のために受け取った初期タイプの初期オブジェクトに関するタイプ情報を識別するステップと、
    前記タイプ情報に基づいて、前記初期オブジェクトを、ランタイム修正に適した前記初期オブジェクトの中間表現に変換するステップと、
    前記初期オブジェクトの修正済み中間表現を生成するように前記初期オブジェクトの前記中間表現を1つまたは複数の拡張ルーチンに従って修正し、それにより前記直列化エンジンのランタイム動作を改変するステップと、
    前記初期オブジェクトの前記修正済み中間表現を最終タイプの最終オブジェクトに変換するステップであって、前記最終オブジェクト及び前記初期オブジェクトの少なくとも1つはメモリ内オブジェクトであり、前記最終オブジェクトは、前記初期オブジェクトに基づいてインスタンス化およびポピュレートされることになるメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを非直列化して前記最終オブジェクトを生成し、前記初期オブジェクトはメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを直列化して前記最終オブジェクトを生成する、ステップと、
    前記中間表現を前記最終オブジェクトに変換するまでは前記中間表現の修正を延期するステップと
    を備えることを特徴とするコンピュータ読み取り可能な記録媒体。
  21. 前記初期オブジェクトの前記中間表現は、オブジェクト名、オブジェクトタイプ、オブジェクトデータのうちの少なくとも1つを含む
    ことを特徴とする請求項20に記載のコンピュータ読み取り可能な記録媒体。
  22. 前記初期オブジェクトの前記中間表現を1つまたは複数の拡張ルーチンに従って修正するステップは、前記オブジェクト名、前記オブジェクトタイプ、前記オブジェクトデータのうちの少なくとも1つを修正することを含む
    ことを特徴とする請求項20に記載のコンピュータ読み取り可能な記録媒体。
  23. 前記方法は、前記初期オブジェクトの前記中間表現を1つまたは複数の標準ルーチンに従って修正するステップをさらに備える
    ことを特徴とする請求項20に記載のコンピュータ読み取り可能な記録媒体。
  24. 前記初期オブジェクトの前記中間表現の修正は、前記タイプ情報内の特定パターンと、前記初期オブジェクト内のオブジェクトデータとのうちのどちらか、または両方に基づく
    ことを特徴とする請求項20に記載のコンピュータ読み取り可能な記録媒体。
  25. 前記初期オブジェクトと前記最終オブジェクトは両方ともメモリ内オブジェクトである
    ことを特徴とする請求項20に記載のコンピュータ読み取り可能な記録媒体。
  26. 様々なタイプのデータオブジェクトを直列化および非直列化するコンピュータ実行可能命令を有する拡張可能な直列化エンジンを含むコンピュータに、1つまたは複数の初期タイプである1つまたは複数の初期オブジェクトを、1つまたは複数の最終タイプである1つまたは複数の最終オブジェクトに変形する方法を実行させるためのコンピュータ実行可能命令を有するコンピュータ実行可能モジュールを格納したコンピュータ読み取り可能な記録媒体であって、前記直列化エンジンのランタイム動作は、前記直列化エンジンの既存部分を再実装する必要なしに改変することができ、前記モジュールは、
    前記直列化エンジンによるランタイム処理のために受け取った初期タイプの初期オブジェクトに関するタイプ情報を識別するためのランタイム置換可能な反映モジュールと、
    識別されたタイプ情報に基づいて前記初期オブジェクトの中間表現を生成および修正するための1つまたは複数のランタイム置換可能な変換モジュールであって、前記直列化エンジンの前記ランタイム動作を改変する1つまたは複数の拡張ルーチンを含む1つまたは複数のランタイム置換可能な変換モジュールと、
    前記変換モジュールによって生成された修正済み中間表現から最終タイプの最終オブジェクトを生み出すためのランタイム置換可能な生成モジュールであって、前記最終オブジェクト及び前記初期オブジェクトの少なくとも1つはメモリ内オブジェクトであり、前記最終オブジェクトは、前記初期オブジェクトに基づいてインスタンス化およびポピュレートされることになるメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを非直列化して前記最終オブジェクトを生成し、前記初期オブジェクトはメモリ内オブジェクトを含み、前記直列化エンジンは、前記初期オブジェクトを直列化して前記最終オブジェクトを生成する、生成モジュールとを備え、
    前記1つまたは複数のランタイム置換可能な変換モジュールは、前記初期オブジェクトの前記中間表現に1つまたは複数の修正を加えることに関連するバッファ要件を回避するために、前記中間表現が前記最終オブジェクトに変換されるまでは、前記中間表現に対する前記1つまたは複数の修正を延期することができる
    ことを特徴とするコンピュータ読み取り可能な記録媒体
  27. 前記中間表現は、前記初期オブジェクトと前記初期オブジェクト内に含まれる任意のオブジェクトとに関するオブジェクト名、オブジェクトタイプ、オブジェクトデータを含む
    ことを特徴とする請求項26に記載のコンピュータ読み取り可能な記録媒体
  28. 前記1つまたは複数のランタイム置換可能な変換モジュールは、前記初期オブジェクトと前記初期オブジェクト内に含まれるオブジェクトとに関するオブジェクト名、オブジェクトタイプ、オブジェクトデータのうちの、少なくとも1つを変更することができる
    ことを特徴とする請求項26に記載のコンピュータ読み取り可能な記録媒体
  29. 前記1つまたは複数のランタイム置換可能な変換モジュールは、前記中間表現を修正することなく前記初期オブジェクトに関する情報を追跡することができる
    ことを特徴とする請求項28に記載のコンピュータ読み取り可能な記録媒体
  30. 前記1つまたは複数のランタイム置換可能な変換モジュールは、前記中間表現を修正するための1つまたは複数の標準ルーチンを含む
    ことを特徴とする請求項26に記載のコンピュータ読み取り可能な記録媒体
  31. 前記1つまたは複数のランタイム置換可能な変換モジュールは、前記タイプ情報内の特定パターンと、前記初期オブジェクト内のオブジェクトデータとのうちのどちらか、または両方に基づいて前記初期オブジェクトの前記中間表現を修正することができる
    ことを特徴とする請求項26に記載のコンピュータ読み取り可能な記録媒体
  32. 前記ランタイム置換可能な生成モジュールは、前記最終オブジェクトをXMLフォーマットで生み出すことができる
    ことを特徴とする請求項26に記載のコンピュータ読み取り可能な記録媒体
  33. 前記ランタイム置換可能な生成モジュールは、前記中間表現に基づいて前記最終オブジェクトをインスタンス化およびポピュレートすることができる
    ことを特徴とする請求項26に記載のコンピュータ読み取り可能な記録媒体
JP2004093771A 2003-03-26 2004-03-26 初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法 Expired - Fee Related JP4489483B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/401,244 US7197512B2 (en) 2003-03-26 2003-03-26 Type bridges

Publications (3)

Publication Number Publication Date
JP2004295897A JP2004295897A (ja) 2004-10-21
JP2004295897A5 JP2004295897A5 (ja) 2007-05-10
JP4489483B2 true JP4489483B2 (ja) 2010-06-23

Family

ID=32908253

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004093771A Expired - Fee Related JP4489483B2 (ja) 2003-03-26 2004-03-26 初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法

Country Status (21)

Country Link
US (2) US7197512B2 (ja)
EP (1) EP1469386B1 (ja)
JP (1) JP4489483B2 (ja)
KR (1) KR20040084815A (ja)
CN (1) CN1534456B (ja)
AT (1) ATE400020T1 (ja)
AU (1) AU2004200729A1 (ja)
BR (1) BRPI0400774A (ja)
CA (1) CA2462321C (ja)
CO (1) CO5560093A1 (ja)
DE (1) DE602004014673D1 (ja)
HK (1) HK1069453A1 (ja)
MX (1) MXPA04002730A (ja)
MY (1) MY140354A (ja)
NO (1) NO331543B1 (ja)
NZ (1) NZ531379A (ja)
PL (1) PL366018A1 (ja)
RU (1) RU2364918C2 (ja)
SG (1) SG126754A1 (ja)
TW (1) TW200502786A (ja)
ZA (1) ZA200401578B (ja)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7197512B2 (en) * 2003-03-26 2007-03-27 Microsoft Corporation Type bridges
US7681114B2 (en) 2003-11-21 2010-03-16 Bridgeborn, Llc Method of authoring, deploying and using interactive, data-driven two or more dimensional content
US7490098B2 (en) * 2005-06-10 2009-02-10 International Business Machines Corporation Apparatus, system, and method for processing hierarchical data in disparate data repositories
JP4852906B2 (ja) * 2005-06-24 2012-01-11 富士ゼロックス株式会社 連携処理システム及び装置
US20070074185A1 (en) * 2005-08-30 2007-03-29 Microsoft Corporation Identifier expressions
US7694285B2 (en) * 2005-08-30 2010-04-06 Microsoft Corporation Relaxed and extended delegates
US7565365B2 (en) * 2005-08-31 2009-07-21 Sap Ag Object storage and synchronization hooks for occasionally-connected devices
WO2007038706A1 (en) * 2005-09-27 2007-04-05 Ugs Corp. Opaque mechanism for web service interoperability
US8972423B2 (en) 2006-09-26 2015-03-03 Siemens Product Lifecycle Management Software Inc. Opaque mechanism for web service interoperability
US7873967B2 (en) 2006-02-27 2011-01-18 Microsoft Corporation Pluggable business logic
US7694279B2 (en) * 2006-02-27 2010-04-06 Microsoft Corporation Extensible web service
US7793275B2 (en) * 2006-03-31 2010-09-07 Intel Corporation Methods and apparatus to tune intermediate representations in a managed runtime environment
US7676492B2 (en) * 2006-04-07 2010-03-09 International Business Machines Corporation Migration of database using serialized objects
US8136104B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
US8375368B2 (en) * 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8443348B2 (en) 2006-06-20 2013-05-14 Google Inc. Application program interface of a parallel-processing computer system that supports multiple programming languages
US8024708B2 (en) 2006-06-20 2011-09-20 Google Inc. Systems and methods for debugging an application running on a parallel-processing computer system
US8146066B2 (en) * 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US8261270B2 (en) 2006-06-20 2012-09-04 Google Inc. Systems and methods for generating reference results using a parallel-processing computer system
WO2008002173A1 (en) * 2006-06-20 2008-01-03 Intel Corporation Method and apparatus to call native code from a managed code application
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8381202B2 (en) * 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in a parallel-processing computer system
CN100456238C (zh) * 2007-03-12 2009-01-28 华为技术有限公司 实现分布式对象持久化的方法、装置及编译单元
US7809702B2 (en) * 2007-05-08 2010-10-05 International Business Machines Corporation Generating from application modifications commands to modify the objects in a repository
US8056000B2 (en) * 2007-08-27 2011-11-08 International Business Machines Corporation Apparatus and system for an automated bidirectional format transform
US7958154B2 (en) * 2007-08-29 2011-06-07 International Business Machines Corporation Apparatus, system, and method for command manager support for pluggable data formats
US20100005115A1 (en) * 2008-07-03 2010-01-07 Sap Ag Method and system for generating documents usable by a plurality of differing computer applications
US8856749B2 (en) * 2010-09-28 2014-10-07 Microsoft Corporation Multi-path brokered test automation execution
US8793706B2 (en) 2010-12-16 2014-07-29 Microsoft Corporation Metadata-based eventing supporting operations on data
US9092280B2 (en) * 2011-12-22 2015-07-28 Sybase, Inc. Method and system for data exchange and exception handling in a data processing environment
US9037964B2 (en) * 2012-01-12 2015-05-19 International Business Machines Corporation Providing direct manipulation of an analytics data visualization within an analytics report
JP6044960B2 (ja) 2013-12-26 2016-12-14 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation シリアライザを特化する方法、装置及びコンピュータプログラム
US9747089B2 (en) 2014-10-21 2017-08-29 International Business Machines Corporation Automatic conversion of sequential array-based programs to parallel map-reduce programs
WO2016116132A1 (en) * 2015-01-19 2016-07-28 Huawei Technologies Co., Ltd. Systems and methods for execution of algorithms on parallel heterogeneous systems
DE102016200322A1 (de) * 2016-01-13 2017-07-13 Robert Bosch Gmbh Verfahren und System zur Informationsübermittlung
US10803413B1 (en) * 2016-06-23 2020-10-13 Amazon Technologies, Inc. Workflow service with translator
US10503933B2 (en) 2016-09-15 2019-12-10 Nuts Holdings, Llc Structured data folding with transmutations
US10853220B2 (en) 2017-04-12 2020-12-01 Microsoft Technology Licensing, Llc Determining user engagement with software applications
US20190050378A1 (en) * 2017-08-11 2019-02-14 Microsoft Technology Licensing, Llc Serializable and serialized interaction representations
US11580088B2 (en) 2017-08-11 2023-02-14 Microsoft Technology Licensing, Llc Creation, management, and transfer of interaction representation sets
CN109753270B (zh) * 2017-11-01 2022-05-20 中国石油化工股份有限公司 一种可扩展的钻井业务数据交换系统与方法
US10795704B2 (en) * 2019-03-01 2020-10-06 Red Hat, Inc. Serialization of objects to java bytecode
KR102221737B1 (ko) * 2019-09-23 2021-03-02 주식회사 포스웨이브 인메모리 기반의 분산 처리 시스템에서의 공간 데이터 처리 시스템 및 그 방법
AU2021251041A1 (en) 2020-04-09 2022-10-27 Nuts Holdings, Llc Nuts: flexible hierarchy object graphs

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06201699A (ja) * 1990-04-23 1994-07-22 Consiglio Nazi Ricerche 臨床診断及びhiv感染進行のモニタリングに対するsp−2モノクローナル抗体の使用
JP3613401B2 (ja) * 1992-07-06 2005-01-26 マイクロソフト コーポレーション オブジェクトの名称を付けて結び付ける方法及びシステム
WO1994011810A1 (en) * 1992-11-13 1994-05-26 Microsoft Corporation A method and system for marshalling interface pointers for remote procedure calls
US6108715A (en) * 1994-12-13 2000-08-22 Microsoft Corporation Method and system for invoking remote procedure calls
US6249822B1 (en) * 1995-04-24 2001-06-19 Microsoft Corporation Remote procedure call method
US5974416A (en) * 1997-11-10 1999-10-26 Microsoft Corporation Method of creating a tabular data stream for sending rows of data between client and server
US6167565A (en) * 1998-01-08 2000-12-26 Microsoft Corporation Method and system of custom marshaling of inter-language parameters
US6298391B1 (en) 1998-03-13 2001-10-02 Microsoft Corporation Remote procedure calling with marshaling and unmarshaling of arbitrary non-conformant pointer sizes
US6263491B1 (en) * 1998-10-02 2001-07-17 Microsoft Corporation Heavyweight and lightweight instrumentation
US6505211B1 (en) * 1999-01-26 2003-01-07 International Business Machines Corporation Method for providing for persistence of java classes where the persistence semantics may be orthogonal to the class definition
US6609130B1 (en) 1999-02-19 2003-08-19 Sun Microsystems, Inc. Method for serializing, compiling persistent textual form of an object-oriented database into intermediate object-oriented form using plug-in module translating entries according to grammar
US6301585B1 (en) * 1999-03-17 2001-10-09 Sun Microsystems, Inc. Redundancy elimination in the persistence of object graphs
US6481008B1 (en) * 1999-06-30 2002-11-12 Microsoft Corporation Instrumentation and optimization tools for heterogeneous programs
US20010054172A1 (en) * 1999-12-03 2001-12-20 Tuatini Jeffrey Taihana Serialization technique
CA2329559A1 (en) 2000-12-22 2002-06-22 Ibm Canada Limited-Ibm Canada Limitee Method and apparatus for generating serialization code for representing a model in different type systems
JP2002297575A (ja) 2001-03-29 2002-10-11 Ricoh Co Ltd 情報端末装置及び文書転送システム
US7500017B2 (en) * 2001-04-19 2009-03-03 Microsoft Corporation Method and system for providing an XML binary format
US6928488B1 (en) * 2001-06-27 2005-08-09 Microsoft Corporation Architecture and method for serialization and deserialization of objects
US6898604B1 (en) * 2001-06-29 2005-05-24 Microsoft Corporation XML serialization and deserialization
US20040064825A1 (en) * 2002-09-30 2004-04-01 Timothy Lim Method and system for object system interoperability
CA2419904A1 (en) * 2003-02-26 2004-08-26 Ibm Canada Limited - Ibm Canada Limitee Version-insensitive serialization and deserialization of program objects
US7197512B2 (en) * 2003-03-26 2007-03-27 Microsoft Corporation Type bridges

Also Published As

Publication number Publication date
JP2004295897A (ja) 2004-10-21
MY140354A (en) 2009-12-31
TW200502786A (en) 2005-01-16
CA2462321A1 (en) 2004-09-26
CN1534456A (zh) 2004-10-06
EP1469386B1 (en) 2008-07-02
SG126754A1 (en) 2006-11-29
EP1469386A2 (en) 2004-10-20
KR20040084815A (ko) 2004-10-06
NO331543B1 (no) 2012-01-23
HK1069453A1 (en) 2005-05-20
CA2462321C (en) 2011-04-26
US20040193616A1 (en) 2004-09-30
ATE400020T1 (de) 2008-07-15
PL366018A1 (en) 2004-10-04
US7197512B2 (en) 2007-03-27
AU2004200729A1 (en) 2004-10-14
EP1469386A3 (en) 2006-06-21
ZA200401578B (en) 2004-08-31
MXPA04002730A (es) 2005-06-17
CO5560093A1 (es) 2005-09-30
US20070124738A1 (en) 2007-05-31
NO20041263L (no) 2004-09-27
NZ531379A (en) 2005-08-26
CN1534456B (zh) 2010-05-26
DE602004014673D1 (de) 2008-08-14
RU2364918C2 (ru) 2009-08-20
US7624400B2 (en) 2009-11-24
RU2004108863A (ru) 2005-09-27
BRPI0400774A (pt) 2005-01-11

Similar Documents

Publication Publication Date Title
JP4489483B2 (ja) 初期タイプの初期オブジェクトを最終タイプの最終オブジェクトに変形する方法
US6504554B1 (en) Dynamic conversion of object-oriented programs to tag-based procedural code
JP4855656B2 (ja) 複数のオブジェクトをシリアライズする方法
US7676789B2 (en) Architecture for customizable applications
US9892144B2 (en) Methods for in-place access of serialized data
US20080209316A1 (en) System and method of implementing an extensible command-line interface
US20030233477A1 (en) Extensible infrastructure for manipulating messages communicated over a distributed network
US7523461B2 (en) Modification of logic in an application
US20060101376A1 (en) Method and system for improved modeling language profile
US7860894B2 (en) Template driven type and mode conversion
US20070074156A1 (en) Componentization of software computer programs
US8504982B2 (en) Declarative aspects and aspect containers for application development
US20040064826A1 (en) Method and system for object system interoperability
JP2011159302A (ja) Ediスキーマをモデル化するためのxmlペイロード仕様
US11720534B2 (en) Remote code execution
US7047495B1 (en) Method and apparatus for graphical device management using a virtual console
JP2021128760A (ja) Opc uaサーバ、opc uaを用いたシステム処理、及びopc uaシステムを実行する方法
US7487498B2 (en) Strategy for referencing code resources
US7617481B2 (en) Prescriptive architecture for application development
US9244706B2 (en) Command line shell command generation based on schema
US7716653B2 (en) Configurable importers and resource writers for converting data into another format
CN115390846A (zh) 编译构建方法、装置、电子设备和存储介质
Sharan et al. Classes
CN117493610A (zh) 基于java实现的GraphQL参数生成方法和系统
Sells et al. ATL internals: working with ATL 8

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070320

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070320

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100217

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100331

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

Free format text: PAYMENT UNTIL: 20130409

Year of fee payment: 3

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20140409

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

LAPS Cancellation because of no payment of annual fees
R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350