JP7119448B2 - 情報処理装置及び情報処理プログラム - Google Patents

情報処理装置及び情報処理プログラム Download PDF

Info

Publication number
JP7119448B2
JP7119448B2 JP2018048707A JP2018048707A JP7119448B2 JP 7119448 B2 JP7119448 B2 JP 7119448B2 JP 2018048707 A JP2018048707 A JP 2018048707A JP 2018048707 A JP2018048707 A JP 2018048707A JP 7119448 B2 JP7119448 B2 JP 7119448B2
Authority
JP
Japan
Prior art keywords
function
information processing
persistence
objects
processing apparatus
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.)
Active
Application number
JP2018048707A
Other languages
English (en)
Other versions
JP2019160101A (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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Fujifilm Business Innovation 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 Fuji Xerox Co Ltd, Fujifilm Business Innovation Corp filed Critical Fuji Xerox Co Ltd
Priority to JP2018048707A priority Critical patent/JP7119448B2/ja
Publication of JP2019160101A publication Critical patent/JP2019160101A/ja
Application granted granted Critical
Publication of JP7119448B2 publication Critical patent/JP7119448B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、情報処理装置及び情報処理プログラムに関する。
特許文献1には、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御することを課題とし、情報処理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理し、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定と、権限オブジェクトを用いて実行する処理の要求とをクライアント装置から受け付け、権限情報を認可したオブジェクトである所有者オブジェクトと、権限オブジェクトの親であるオブジェクトとの情報の比較結果に基づいて、クライアント装置からの要求を受理するか否かを判断することが開示されている。
特許文献2には、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御することを課題とし、情報処理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理し、オーナー属性を持つオブジェクトであるアクセストークンのプロトタイプがオーナーに一致する場合に、アクセストークンが添付されたメソッド送信を受理することが開示されている。
特許文献3には、一のマスターデータについての提供内容を個別に制御することを課題とし、サーバーは、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理し、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定を含む、提供対象オブジェクトへの読み出し要求を受け付け、権限情報を認可したオブジェクトである所有者オブジェクトと、権限オブジェクトの親であるオブジェクトとの権限の比較結果に基づいて、提供対象オブジェクトの情報を提供し、提供対象オブジェクトが有していないデータ項目については、提供対象オブジェクトの親やさらにその親を再帰的にたどる列に含まれる祖先オブジェクトのデータ項目の情報を提供することが開示されている。
特許文献4には、クライアントから受け付けた要求にかかる権限オブジェクトに応じたコンテンツを提供することを課題とし、情報管理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの少なくとも一部にコンテンツを構成する要素の要素名と要素値を関連付けて管理し、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定を含む実行する処理の要求を受け付け、権限オブジェクトに基づいて対象のオブジェクトを設定し、対象のオブジェクトに要求が指定する要素名が関連付けられていない場合には、対象のオブジェクトの親のオブジェクトを新たな対象のオブジェクトに設定する処理を、予め定められた条件が満足されるまで繰り返し実行し、設定された対象のオブジェクトに要求が指定する要素名が関連付けられている場合には、対象のオブジェクトに関連付けられた要素値を要求に対し応答することが開示されている。
特許文献5には、クライアントから受け付けた要求にかかる権限オブジェクトに応じて決定される関数により要求を処理することを課題とし、情報管理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理するオブジェクト情報管理部と、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定を含む実行する処理の要求を受け付けるリクエスト受付部と、権限オブジェクトに関連付けられた関数オブジェクトを取得する関数オブジェクト取得部と、関数オブジェクトにより要求を処理するリクエスト処理部を有することが開示されている。
特開2015-022390号公報 特開2015-022750号公報 特開2016-164723号公報 特開2015-162058号公報 特開2015-162057号公報
計算機における実行環境で予め用意していない関数オブジェクトについては、インポートする必要がある。しかし、その実行環境において、関数の実体を取り出したり、保存された実体を利用するためにロードしたりする公開のアクセサがない。
本発明は、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる情報処理装置及び情報処理プログラムを提供することを目的としている。
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項1の発明は、与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段を有する情報処理装置である。
請求項2の発明は、前記永続化手段は、オブジェクトのプロトタイプと属性がオブジェクトの場合は、該オブジェクトを、該オブジェクトの識別子に置換する、請求項1に記載の情報処理装置である。
請求項3の発明は、前記永続化手段は、前記オブジェクトが関数の場合は、そのインデックスも記録する、請求項2に記載の情報処理装置である。
請求項4の発明は、与えられたオブジェクト識別子のセットからロードが必要なオブジェクト識別子のセットを導出し、ロードするロード手段をさらに有する請求項1に記載の情報処理装置である。
請求項5の発明は、前記ロード手段は、インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化する、請求項4に記載の情報処理装置である。
請求項6の発明は、コンピュータを、与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段として機能させるための情報処理プログラムである。
請求項1の情報処理装置によれば、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる。
請求項2の情報処理装置によれば、オブジェクトのプロトタイプと属性がオブジェクトの場合は、オブジェクトの識別子を用いることができる。
請求項3の情報処理装置によれば、オブジェクトが関数の場合は、そのインデックスも記録することができる。
請求項4の情報処理装置によれば、与えられたオブジェクト識別子のセットからオブジェクトをロードすることができる。
請求項5の情報処理装置によれば、フォーリンな関数をインスタンス化することができる。
請求項6の情報処理プログラムによれば、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる。
本実施の形態の構成例についての概念的なモジュール構成図である。 本実施の形態を利用したシステム構成例を示す説明図である。 本実施の形態による処理例を示すフローチャートである。 本実施の形態による処理例を示すフローチャートである。 o2iテーブルのデータ構造例を示す説明図である。 i2oテーブルのデータ構造例を示す説明図である。 o2idテーブルのデータ構造例を示す説明図である。 id2oテーブルのデータ構造例を示す説明図である。 i2idテーブルのデータ構造例を示す説明図である。 本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
まず、本実施の形態を説明する前に、その前提となる技術について説明する。なお、この説明は、本実施の形態の理解を容易にすることを目的とするものである。
オブジェクト空間の構造に基づいて、オブジェクト操作に関わる特権の制御やオブジェクトの可視性の制御を行う技術として、以下のものがある。
特許文献1に記載の技術は、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御する。
特許文献2に記載の技術は、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御する。
特許文献3に記載の技術は、一のマスターデータについての提供内容を個別に制御する。
特許文献4に記載の技術は、クライアントから受け付けた要求にかかる権限オブジェクトに応じたコンテンツを提供する。
特許文献5に記載の技術は、クライアントから受け付けた要求にかかる権限オブジェクトに応じて決定される関数により要求を処理する。
このように、オブジェクトスペースのトポロジカルな形状を利用したスケールする特権の制御に関わる技術がある。これは簡潔にいえば、プロトタイプ継承関係を特権にマップする、つまり、
・親は子に対して更新(CRUDのU)や削除(CRUDのD)が行える、
・親が生成(CRUDのC)したオブジェクトは子になる、
ということである。
なお、CRUDとは、コンピュータソフトウェアが持つ永続性の4つの基本機能のイニシャルを並べた用語であり、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)である。
読み取り(CRUDのR)については、それが副作用を及ぼさないことから、オブジェクトの特定ができれば読み取りは行える状況を一義的には想定する。ただし、オブジェクトの可視性の制御にオブジェクトスペースのトポロジカルな形状を利用できることは自明である。なお、このことは、いわゆるポリモルフィズムの如くを想定している。つまり、継承関係にあるオブジェクトにおいて、同一名の属性が異なる値に対応する。
また、オブジェクト識別子はランダム生成される256ビット程度の値を利用することを想定しており、オブジェクト識別子自体が推定困難なクレデンシャルとしての特徴を持つことがポイントである。これが、最も端的に表れるのは、OAuth2.0のアクセストークンを
token={owner, client, scope}
の様なオブジェクトと捉え、そのアクセストークンの真正性を
owner.isPrototypeOf(token)
に帰着していることである。なお、「owner.isPrototypeOf(token)」は、オーナーはトークンの親やその親やそのまた親…、つまり、オーナーはトークンのプロトタイプチェーンに属する、という意味である。
これによって、第三者がトークンを偽造することを不可能にしている。もちろん、これは、オブジェクトフォームを永続化する際に、永続化を指示するエンティティと永続化されるオブジェクトとの比較(isPrototypeOfでの比較)が適正に行われるという前提のもとである。
ここまで説明したような構成をとることによって、特権の制御を、オブジェクトスペースのみから自律的に定まるようにできる。クラウドコンピューティングの進展によって、膨大な量のオブジェクトを永続化して利用することの物理的なフィージビリティは増大しており、課題となっているのは、単純に大量のオブジェクトを扱うことの困難から、それらをプライバシーやセキュリティなどの要件を満たして運用することの困難に軸足を移しており、前述の特許文献に記載の技術群はこれらの課題を解決することを企図している。
発明者は、前述したような問題意識のもとにプロトタイプを作成し、応用を試みてきた。その過程で以下に説明するような課題が明らかになってきた。
プロトタイプ継承を実現する実装環境としてジャバスクリプトを選択し、その上でプロトタイプを行ったが、永続化の対象とするオブジェクトはJSONで表現可能な程度のプレインなオブジェクトのみだった。実際のジャバスクリプト実行環境におけるオブジェクトは、プレインなオブジェクトだけではない。
つまり、あるクラス(=コンストラクタ)Xに帰属するインスタンスoは、X.prototypeの子であり、X.prototypeには、そのクラスに共通するインスタンスメソッドを属性として持つことが普通である。
したがって、実際のシステムに適用する場合には、オブジェクトのセーブ・ロード時にアドホックなパース処理を差し挟む必要があり、この処理の追加が実現上のボトルネックとなってしまう。
このようなアドホックなパース処理を排除するためには、任意のジャバスクリプトオブジェクトをそのままのかたちで忠実に永続化できなければならない。
以下、本実施の形態を理解するために必要となるジャバスクリプトの値について説明する。なお、要点は、現代のジャバスクリプトにおいてはリフレクション機能が充実しているが、任意のジャバスクリプトオブジェクトの永続化まではできていない。特に、関数の永続化はできていない。
ジャバスクリプトの値には、プリミティブとオブジェクトの2つの種類がある。
プリミティブとは、
・数値
・文字列
・ブール値(つまり、trueとfalse)
・シンボル(例えば、Symbol.toStringTagとか)
・undefined
・null
である。
オブジェクトとは、文字列かシンボルをキー(属性名)として、任意の値をバリュー(属性値)とする、(あるいは、場合によっては、属性値の直接的な指定の代わりに、そのアクセサを指定することもできる、)コレクションであり、さらに、プロトタイプ(ここでの「プロトタイプ」という語は,関数オブジェクトのプロトタイプという名前の属性を指しているわけではなく,プロトタイプ継承における親のオブジェクトとしてのプロトタイプを指す)であるオブジェクトを指定することができる。なお、プロトタイプであるオブジェクトが無い場合もある。その場合には便宜上、そのオブジェクトのプロトタイプはnullである、ということにする。
プロトタイプと属性については、下記のような一連のアクセサがある。
Reflect.getPrototypeOf(o)
Reflect.setPrototypeOf(o,proto)
Reflect.ownKeys(o)
Reflect.getOwnPropertyDescriptor(o,k)
Reflect.defineProperty(o,k,desc)
Reflect.deleteProperty(o,k)
ここで、
・oは対象のオブジェクトである。
・protoはプロトタイプとなるオブジェクトないしnullである。
・kは属性名である文字列かシンボルである。
・descは属性記述子であり、{value,writable,enumerable,configurable}という値型のものと{get,set,enumerable,configurable}というアクセサ型のものとがある。
である。これらの公開されたアクセサを持つスロット(つまり、プロトタイプと属性)のみで構成されるオブジェクトは容易にコピーすること、つまり、永続化することができる。
一方、オブジェクトによっては公開されたアクセサを持たない内部的なスロットを持つ場合もある。具体的には、すぐ後に述べる関数やWeakMap WeakSet等の弱いコレクションや非同期処理の抽象化に用いられるプロミスPromiseやターゲットオブジェクトとハンドラからメタオブジェクトを生成するプロキシーProxyなどがある。
周知のように関数の本体は、
・実行時の挙動を規定する実装、コールスロットに対応
・コンストラクタとしてニュー演算子と共に呼び出される実装、コンストラクトスロットに対応
があり、これらの実体を保存のために取り出したり、保存された実体を利用するためにロードしたりする公開のアクセサがない。したがって、オブジェクトが関数である場合、そのままのかたちで忠実に永続化することは不可能にみえる。
関数には、
・Objectのようなコンストラクタにもなる関数
・console.logのようなコンストラクタにはならない関数
の種類がある。本実施の形態によって、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと異なるオブジェクトでありながら同等の機能を持つ永続化した関数オブジェクトとすることができる。つまり、本実施の形態によって、永続化対象のオブジェクトが関数である場合も、そのままのかたちで忠実に永続化できるようにする。
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図1は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア(コンピュータ・プログラム)、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム(コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム)、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、1モジュールを1プログラムで構成してもよいし、複数モジュールを1プログラムで構成してもよく、逆に1モジュールを複数プログラムで構成してもよい。また、複数モジュールは1コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって1モジュールが複数コンピュータで実行されてもよい。なお、1つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続(データの授受、指示、データ間の参照関係、ログイン等)の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態にしたがって、又はそれまでの状況・状態にしたがって定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、2以上の値(もちろんのことながら、全ての値も含む)が同じであってもよい。また、「Aである場合、Bをする」という記載は、「Aであるか否かを判断し、Aであると判断した場合はBをする」の意味で用いる。ただし、Aであるか否かの判断が不要である場合を除く。また、「A、B、C」等のように事物を列挙した場合は、断りがない限り例示列挙であり、その1つのみを選んでいる場合(例えば、Aのみ)を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク(一対一対応の通信接続を含む)等の通信手段で接続されて構成されるほか、1つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」(社会システム)にすぎないものは含まない。
また、各モジュールによる処理毎に又はモジュール内で複数の処理を行う場合はその処理毎に、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、RAM(Random Access Memory)、外部記憶媒体、通信回線を介した記憶装置、CPU(Central Processing Unit)内のレジスタ等を含んでいてもよい。
本実施の形態である情報処理装置100は、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとするものであって、図1の例に示すように、関数受付モジュール110、生成モジュール120、付与モジュール130、永続化モジュール140、ロードモジュール150を有している。
情報処理装置100は、広範に利用されている実行環境(例えば、JavaScript(登録商標))において、オブジェクトを忠実に永続化することを可能にし、アドホックなデータ構造の定式化やパース処理を不要にする。任意のオブジェクトを特定のパース処理を伴わずに永続化するには、メソッドまで含めた永続化が必要であり、情報処理装置100は、その永続化を行っている。また、情報処理装置100は、JavaScriptの標準であるECMAScript(エクマスクリプト)の仕様に基づいて、関数の永続化を実現させている。つまり、情報処理装置100は、実行環境にインポートされた関数オブジェクト(「与えられたオブジェクトセット」の一例)に対して、インスタンス化を行う。具体的には、ジャバスクリプトのプロキシー機構を用いて、インスタンス化すればよい。
なお、永続化とは、インスタンスの状態を保存することである。例えば、本実施の形態で対象とする関数の他に、ファイルやデータベース等、プログラム終了後もデータが失われないような場所へのデータ保存を指す。特に、本実施の形態での「永続化」とは、不揮発性の記憶手段に記憶させることであって、その実行環境において、予め用意している関数オブジェクトと同等に用いることができることをいう。
情報処理装置100は、以下の処理を行う。
実行環境の外側に由来するインポートされた関数オブジェクト(「与えられたオブジェクトセット」の一例)、つまり、自分のものではない関数オブジェクトは、ジャバスクリプトのプロキシー機構でインスタンス化することで、自分のものである関数オブジェクトと同等の機能を持ちながら異なるオブジェクトにする。
永続化される若しくはされたオブジェクトはID(IDentification)が振られている。このIDはオーナーが異なれば、同一の種類のオブジェクトであっても異なる。例えば、オーナーであるアリスのObject.prototypeと異なるオーナーであるボブのObject.prototypeは異なるIDを持つ。
利用される関数には、オーナーに依存しないインデックスが振られている。例えば、アリスのObjectとボブのObjectは異なるIDを持つが、同一のインデックスを持つ。インデックスの実現方法はバリエーションがありえるが、ここでは、オブジェクトの接続関係(プロトタイプチェーンないし属性として)を表現するスケルトンオブジェクトを用い、スケルトンオブジェクトのIDを対応するオブジェクトのインデックスとしてアサインする手法を想定する。
関数受付モジュール110は、与えられた関数を受け付ける。つまり、外部から関数をインポートする。
生成モジュール120(makeSkeleton)は、関数受付モジュール110によって受け付けられたオブジェクトセットから対応するスケルトン(skeleton)からなるオブジェクトセットを生成する。スケルトンとは、オブジェクトの接続関係を表現するオブジェクトである。また、オブジェクトの接続関係のみを表現するオブジェクトとしてもよい。
付与モジュール130(assignSkeleton)は、スケルトンに基づいてオブジェクトにインデックスを付与する。なお、「付与する」は、以下、アサインするともいう。
永続化モジュール140(commit)は、関数受付モジュール110によって受け付けられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する。
また、永続化モジュール140は、オブジェクトのプロトタイプと属性がオブジェクトの場合は、オブジェクトの識別子に置換するようにしてもよい。
さらに、永続化モジュール140は、オブジェクトが関数の場合は、そのインデックスも記録するようにしてもよい。
ロードモジュール150(fetch)は、与えられたオブジェクト識別子のセットからロードが必要なオブジェクト識別子のセットを導出し、ロードする。
また、ロードモジュール150は、インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化するようにしてもよい。
図2は、本実施の形態を利用したシステム構成例を示す説明図である。
ユーザー端末200Aは、情報処理装置100Aを有している。ユーザー端末200Bは、情報処理装置100Bを有している。情報管理装置250は、情報処理装置100Cを有している。ユーザー端末200A、ユーザー端末200B、情報管理装置250は、通信回線290を介してそれぞれ接続されている。通信回線290は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。また、情報処理装置100による機能は、クラウドサービスとして実現してもよい。
例えば、ユーザー端末200Aは、情報管理装置250又はユーザー端末200Bから、関数オブジェクトをインポートする。そして、情報処理装置100Aによって、その関数オブジェクトをユーザー端末200A内で永続化して、利用できるようにする。
図3は、本実施の形態による処理例を示すフローチャートである。
ステップS302では、関数受付モジュール110は、オブジェクトセットを受け付ける。
ステップS304では、生成モジュール120は、スケルトンからなるオブジェクトセットを生成する。具体的には、makeSkeletonとして、与えられたオブジェクトセット(ステップS302で受け付けたオブジェクトセット)から対応するスケルトンからなるオブジェクトセットを生成する。
ステップS306では、付与モジュール130は、オブジェクトにインデックスをアサインする。具体的には、assignSkeletonとして、スケルトンに基づいてオブジェクトにインデックスをアサインする。
ステップS308では、永続化モジュール140は、永続化が必要なオブジェクトセットを導出し、永続化する。具体的には、commitとして、与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する。オブジェクトのプロトタイプと属性は、それらが(プリミティブではなく)オブジェクトならばオブジェクトのIDに置換する。オブジェクトが関数の場合は、そのインデックスも記録する。
この後、図4の例に示す処理が行われる。
図4は、本実施の形態(ロードモジュール150)による処理例を示すフローチャートである。fetchとして、以下の処理を行う。
ステップS402では、オブジェクトIDのセットを受け付ける。
ステップS404では、ロードが必要なオブジェクトIDのセットを導出する。具体的には、与えられたオブジェクトIDのセットからロードが必要なオブジェクトIDのセットを導出する。
ステップS406では、ロードモジュール150は、そのオブジェクトIDのセットをロードする。具体的には、ステップS404で導出したセットをロードする。インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化する。
情報処理装置100が処理を行うにあたって必要となるデータ構造例を示す。
図5は、o2iテーブル500のデータ構造例を示す説明図である。
o2iテーブル500は、オブジェクト欄510、インデックス欄520を有している。オブジェクト欄510は、オブジェクトを記憶している。インデックス欄520は、インデックスを記憶している。つまり、o2iとして、オブジェクトとインデックスの対応を保持するマップである。例えば、o2i.get(o)でオブジェクトoに対応するインデックスiを取り出せることになる。
図6は、i2oテーブル600のデータ構造例を示す説明図である。
i2oテーブル600は、インデックス欄610、オブジェクト欄620を有している。インデックス欄610は、インデックスを記憶している。オブジェクト欄620は、オブジェクトを記憶している。つまり、i2oとして、インデックスとオブジェクトの対応を保持するマップである。例えば、i2o.get(i)でインデックスiに対応するオブジェクトoを取り出せる。
図7は、o2idテーブル700のデータ構造例を示す説明図である。
o2idテーブル700は、オブジェクト欄710、ID欄720を有している。オブジェクト欄710は、オブジェクトを記憶している。ID欄720は、IDを記憶している。つまり、o2idとして、オブジェクトとIDの対応を保持するマップである。
図8は、id2oテーブル800のデータ構造例を示す説明図である。
id2oテーブル800は、ID欄810、オブジェクト欄820を有している。ID欄810は、IDを記憶している。オブジェクト欄820は、オブジェクトを記憶している。つまり、id2oとして、IDとオブジェクトの対応を保持するマップである。
図9は、i2idテーブル900のデータ構造例を示す説明図である。
i2idテーブル900は、インデックス欄910、ID欄920を有している。インデックス欄910は、インデックスを記憶している。ID欄920は、IDを記憶している。つまり、i2idとして、その環境で永続化したインデックス付きのオブジェクトに対するインデックスとIDの対応を保持するマップである。
<スケルトンの準備>
永続化の対象が含む関数にインデックスを付与するために、それらを含むオブジェクトのスケルトンを生成し、コミットする。
例えば、必要なライブラリがロードされた後のglobalを引数にしてそのスケルトンを生成すればよい。
コミットしたことで,このスケルトンにはIDが付与されている。
このスケルトンの準備はパッケージ生成に対応しており、一度だけ行えばよい。
<スケルトンのフェッチとインデックスアサイン>
前述のスケルトンのIDを用いてスケルトンをフェッチし、そのスケルトンを使って、実行環境上のオブジェクトにインデックスを付与する。つまり、o2iとi2oをセットする。
<実行環境の復帰>
i2idに基づいて、その環境で永続化したインデックス付きのオブジェクトのIDを回復する。つまり、o2idとid2oをセットする。
<コミット>
オブジェクトの永続化フォームは、以下の通りである。
{p,d,i,b,f}
・pは、オブジェクトのプロトタイプのIDである。プロトタイプがnullの場合はこの属性は無い。
・dは、オブジェクトの属性記述子達である。属性リストがからの場合、つまり、Reflect.ownKeys(obj)が[]の場合は、この属性は無い。
・iは、オブジェクトにインデックスが付与されている場合のインデックスである。インデックスが付与されていない場合は、この属性は無い。
・fは、オブジェクトが関数の場合は真(true)である。オブジェクトが関数でない場合は、この属性は無い。
・bは、オブジェクトが型付配列やArrayBuffer等のバイトアレイに由来するデータ型の場合の対応するバイトアレイである。そのようなデータ型でない場合は、この属性は無い。
ここで、dの属性記述子達のvalue属性がプリミティブではなくオブジェクトである場合やget属性、set属性が関数である場合、これらのオブジェクトは{id}という形式のIDによる参照に置換される。具体的に例示すれば、
{id:’1be35dc0d797f72af45b04a5a24df4fa636e032e67a798d94060a46f727e5b48’}
のようになる。また、bの値は、永続化フォームではハッシュ値に置換され、永続化フォーム自体は、JSONの範疇には入らないが、容易にバイトアレイにエンコード可能であり、以下のように、キーバリューストアに永続化する。
{k,e}//k:オブジェクトID、e:オブジェクトの永続化フォームのハッシュ値
{k,l,b}//k:ハッシュ値、l:対応するコンテンツのバイト長、b:対応するコンテントのバイトアレイ
・k,eは、長さ64の16進文字列である。
・lは、整数である。
・bは、バイトアレイである。
<フェッチ>
オブジェクトIDで、キーバリューストアから永続化フォームのハッシュ値を取り出し、ハッシュ値で、キーバリューストアから永続化フォーム自体を取り出す。
オブジェクトIDでid2oをルックアップし、オブジェクトが既に存在していれば、永続化フォームにしたがって、オブジェクトを更新する。オブジェクトが存在しない場合は、オブジェクトをインスタンス化し、o2id、id2oにオブジェクトIDと紐付けて記録する。オブジェクトのインスタンス化にあたっては、
・永続化フォームに属性fがある場合、つまり、関数の場合
・永続化フォームに属性bがある場合、つまり、データの場合
・その他の場合に分けて生成する。
関数の場合、必ず属性iがあり、その値はインデックスである。i2o.get(i)で対応するネイティブ関数をtargetとして、以下のようなプロキシーを生成する。
----- ----- -----
new Proxy(
function (){}, {
apply(target, that, args) {
return apply(o, that, args)
},
construct(target, args, newTarget) {
return construct(o, args, newTarget)



----- ----- -----
データの場合、対応するコンストラクタとバイトアレイbよりデータオブジェクトを生成する。
その他の場合、対応するコンストラクタから引数なしでオブジェクトを生成する。例外がスローされた場合は、Object.create(null)としてオブジェクトを生成する。
上記のいずれの場合(関数の場合、データの場合、その他の場合)でもインスタンス化の後に、
・プロトタイプのセット
・デスクリプタによる属性のセット
を行う。
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図10に例示するように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。つまり、具体例として、処理部(演算部)としてCPU1001を用い、記憶装置としてRAM1002、ROM1003、HD1004を用いている。HD1004として、例えばハードディスク、SSD(Solid State Drive)を用いてもよい。関数受付モジュール110、生成モジュール120、付与モジュール130、永続化モジュール140、ロードモジュール150等のプログラムを実行するCPU1001と、そのプログラムやデータを記憶するRAM1002と、本コンピュータを起動するためのプログラム等が格納されているROM1003と、o2iテーブル500、i2oテーブル600、o2idテーブル700、id2oテーブル800、i2idテーブル900、オブジェクト等を記憶する補助記憶装置(フラッシュ・メモリ等であってもよい)であるHD1004と、キーボード、マウス、タッチスクリーン、マイク、カメラ(視線検知カメラ等を含む)等に対する利用者の操作(動作、音声、視線等を含む)に基づいてデータを受け付ける受付装置1006と、CRT、液晶ディスプレイ、スピーカー等の出力装置1005と、ネットワークインタフェースカード等の通信ネットワークと接続するための通信回線インタフェース1007、そして、それらをつないでデータのやりとりをするためのバス1008により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、図10に示すハードウェア構成は、1つの構成例を示すものであり、本実施の形態は、図10に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア(例えば特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)等)で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続している形態でもよく、さらに図10に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器(携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む)、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機(スキャナ、プリンタ、複写機、ファックス等のいずれか2つ以上の機能を有している画像処理装置)などに組み込まれていてもよい。
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク(DVD)であって、DVDフォーラムで策定された規格である「DVD-R、DVD-RW、DVD-RAM等」、DVD+RWで策定された規格である「DVD+R、DVD+RW等」、コンパクトディスク(CD)であって、読み出し専用メモリ(CD-ROM)、CDレコーダブル(CD-R)、CDリライタブル(CD-RW)等、ブルーレイ・ディスク(Blu-ray(登録商標) Disc)、光磁気ディスク(MO)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読み出し専用メモリ(ROM)、電気的消去及び書換可能な読み出し専用メモリ(EEPROM(登録商標))、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)、SD(Secure Digital)メモリーカード等が含まれる。
そして、前記のプログラムの全体又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分若しくは全部であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。
100…情報処理装置
110…関数受付モジュール
120…生成モジュール
130…付与モジュール
140…永続化モジュール
150…ロードモジュール
200…ユーザー端末
250…情報管理装置
290…通信回線

Claims (6)

  1. 与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、
    前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、
    前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段
    を有する情報処理装置。
  2. 前記永続化手段は、オブジェクトのプロトタイプと属性がオブジェクトの場合は、該オブジェクトを、該オブジェクトの識別子に置換する、
    請求項1に記載の情報処理装置。
  3. 前記永続化手段は、前記オブジェクトが関数の場合は、そのインデックスも記録する、
    請求項2に記載の情報処理装置。
  4. 与えられたオブジェクト識別子のセットからロードが必要なオブジェクト識別子のセットを導出し、ロードするロード手段
    をさらに有する請求項1に記載の情報処理装置。
  5. 前記ロード手段は、インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化する、
    請求項4に記載の情報処理装置。
  6. コンピュータを、
    与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、
    前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、
    前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段
    として機能させるための情報処理プログラム。
JP2018048707A 2018-03-16 2018-03-16 情報処理装置及び情報処理プログラム Active JP7119448B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018048707A JP7119448B2 (ja) 2018-03-16 2018-03-16 情報処理装置及び情報処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018048707A JP7119448B2 (ja) 2018-03-16 2018-03-16 情報処理装置及び情報処理プログラム

Publications (2)

Publication Number Publication Date
JP2019160101A JP2019160101A (ja) 2019-09-19
JP7119448B2 true JP7119448B2 (ja) 2022-08-17

Family

ID=67994894

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018048707A Active JP7119448B2 (ja) 2018-03-16 2018-03-16 情報処理装置及び情報処理プログラム

Country Status (1)

Country Link
JP (1) JP7119448B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080184264A1 (en) 2007-01-26 2008-07-31 Dell Products L.P. Method, Apparatus and Media for Information Model Data Retrieval
JP2017174074A (ja) 2016-03-23 2017-09-28 富士ゼロックス株式会社 情報処理装置及び情報処理プログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5797007A (en) * 1993-06-14 1998-08-18 International Business Machines Corporation Persistent object storage system with default object encoder/decoder

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080184264A1 (en) 2007-01-26 2008-07-31 Dell Products L.P. Method, Apparatus and Media for Information Model Data Retrieval
JP2017174074A (ja) 2016-03-23 2017-09-28 富士ゼロックス株式会社 情報処理装置及び情報処理プログラム

Also Published As

Publication number Publication date
JP2019160101A (ja) 2019-09-19

Similar Documents

Publication Publication Date Title
CN107577427B (zh) 用于区块链系统的数据迁移方法、设备和存储介质
US6205466B1 (en) Infrastructure for an open digital services marketplace
US11675774B2 (en) Remote policy validation for managing distributed system resources
EP3814929B1 (en) Blockchain-based content management method, apparatus, and electronic device
CN113169882B (zh) 用于区块链的互操作性的系统和方法
US20070299880A1 (en) Document Management Server, Document Management Method, Computer Readable Medium, Computer Data Signal, and System For Managing Document Use
US20120185555A1 (en) Method for generating universal objects identifiers in distributed multi-purpose storage systems
US20180089250A1 (en) Atomic application of multiple updates to a hierarchical data structure
US20190014100A1 (en) Secure token passing via hash chains
JP2008537259A (ja) 資源間の関係の効率的記述
US11811839B2 (en) Managed distribution of data stream contents
TWI724570B (zh) 資料結構的讀取及更新方法、裝置、電子設備及儲存媒體
CN109885577B (zh) 数据处理方法、装置、终端及存储介质
CN110555015A (zh) 数据库实体管理方法、装置、电子设备及存储介质
US11360966B2 (en) Information processing system and method of controlling information processing system
US8627434B2 (en) Cross security-domain identity context projection within a computing environment
CN114036538A (zh) 一种基于虚拟块设备的数据库透明加解密实现方法及系统
CN109997144A (zh) 对于固态驱动器的分开加密
JP7119448B2 (ja) 情報処理装置及び情報処理プログラム
US20220385596A1 (en) Protecting integration between resources of different services using service-generated dependency tags
CN115129275A (zh) 一种数字文件打印方法、装置、电子设备及存储介质
CN107526530B (zh) 数据处理方法和设备
CN110825715B (zh) 基于Ceph对象存储的多对象数据秒合的实现方法
CN111400269B (zh) 一种ipfs文件处理方法、节点、介质和设备
US20020078205A1 (en) Resource control facility

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210226

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220322

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220506

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220718

R150 Certificate of patent or registration of utility model

Ref document number: 7119448

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150