JP2006011712A - 永続化アダプタ生成装置 - Google Patents

永続化アダプタ生成装置 Download PDF

Info

Publication number
JP2006011712A
JP2006011712A JP2004186470A JP2004186470A JP2006011712A JP 2006011712 A JP2006011712 A JP 2006011712A JP 2004186470 A JP2004186470 A JP 2004186470A JP 2004186470 A JP2004186470 A JP 2004186470A JP 2006011712 A JP2006011712 A JP 2006011712A
Authority
JP
Japan
Prior art keywords
persistence
adapter
perpetuation
implementation
interface
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
JP2004186470A
Other languages
English (en)
Inventor
Yohei Yamaguchi
山口陽平
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Priority to JP2004186470A priority Critical patent/JP2006011712A/ja
Publication of JP2006011712A publication Critical patent/JP2006011712A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】
永続化オブジェクトやそれを検索・挿入・削除・更新するための実装は冗長であるため、それを簡潔に定義する特別な言語が使われる。具体的には、特別な言語で記述した定義ファイルから生成されたソースコードをコンパイルして実装を得る方法が使われる。しかし、この方法は定義ファイルと実装の一貫性維持のために手間がかかり、さらに特別な言語に関する新たな知識が必要となる。
【解決手段】
図1の永続化アダプタ生成装置1gは、アプリケーションプログラム1p固有の永続化インターフェイス1Xから汎用永続化オブジェクト1eへ呼出を翻訳する永続化アダプタ1aを実行時に生成する。
【選択図】図1

Description

本発明は、オブジェクトを永続化するソフトウェアの開発・保守を容易にするための永続化アダプタ生成装置とそれを実現するためのプログラムと方法に関する。
オブジェクト指向データベースやそれを擬似的に実現するオブジェクト・リレーショナル・マッピングなどを利用するアプリケーションプログラムの開発・保守では、そのアプリケーションプログラム固有の永続化API(永続化オブジェクトやそれを検索・挿入・削除・更新するため)の実装が必要である。しかし、その実装は冗長であるため、それを簡潔に定義する特別な言語(DDL・ODL・XMLを用いた独自の言語など)が使われる。具体的には、特別な言語で記述した定義ファイルから生成されたソースコードをコンパイルして実装を得る方法が使われる。特許文献1〜11はこのような方法に関連する特許文献である。しかし、この方法は定義ファイルと実装の一貫性維持のために手間がかかり、さらに特別な言語に関する新たな知識が必要となる。
そこで、従来の状況を改善する方法として特許文献12が提案されている。この方法では、永続化オブジェクトの実装は従来のように定義する必要があるが、それを検索・挿入・削除・更新するための実装はあらかじめ用意してある汎用的な永続化APIを使う。この方法は従来の方法よりも定義する必要がある実装が少ないため、手作業であっても現実的なコストでそれを定義できる。そのため、従来の状況が改善されていると言える。しかし、永続化オブジェクトの実装は冗長であるため、従来の状況を完全に解決したとは言えない。
また、この方法には重大な欠点がある。あらかじめ用意してある汎用永続化APIは呼出時に与えられた永続化オブジェクトの構造に基づき汎用的に処理を行うため、永続化オブジェクトに格納されているデータが変化したタイミングで処理できない。例えば、2つの永続化オブジェクト間の関連(Person.getMyCars():Car[]とCar.getOwner():Person)はアクセスの主体となる永続化オブジェクトが異なるだけで同じ関係である。そのため、これらの一貫性を維持する必要があるが、汎用永続化APIが呼出されるまでは一貫性が保障されない。もし、この関連の一貫性は完全に維持したい場合、永続化オブジェクトにそのある処理を実装する必要がある。そのため、このような場合、一貫性維持のための実装を定義するコストがかかる。そして、このような場合は頻繁にあるため、従来のように特別な言語を使う必要がある状況に陥る。
特開平8−221274 特開平8−263277 特願平8−532654 特開平10−91494 特開平11−102293 特開2000−122903 特開2000−155706 米国特許5291583 米国特許5295256 特表2001−518670 米国特許5212787 米国特許5857197
本発明は、「定義ファイルと実装の一貫性維持のために手間がかかる」課題と「特別な言語に関する新たな知識が必要となる」課題を解決する。
本発明は、上記の課題を解決するため、アプリケーションプログラム固有の永続化インターフェイスから抽出したメタ情報に基づいて、前記インターフェイスに従ったメソッド呼出を汎用永続化オブジェクトのメソッド呼出に翻訳する永続化アダプタを前記アプリケーションプログラム実行時に生成するもので、以下の構成を特徴とする。
前記永続化アダプタは前記インターフェイスのインスタンスであり、前記汎用永続化オブジェクトのインスタンスへアクセスする手段を持ち、前記インターフェイスから継承する各メソッドのメソッド呼出を前記汎用永続化オブジェクトのメソッド呼出へ翻訳する。
本発明によると、アプリケーションプログラム固有の永続化インターフェイスを定義し、それを永続化アダプタ生成装置に与えるだけで、永続化アダプタ(アプリケーションプログラム固有の永続化オブジェクト)を生成できる。永続化アダプタはコンピュータのメモリ中にしか存在せず、実行時に生成されるものなので、アプリケーションプログラム固有の永続化インターフェイスとの一貫性が保障される。従来の方法では、一貫性維持のために実行前に永続化アダプタを明示的にコンパイル・配置する必要があるため手間がかかった。
また、アプリケーションプログラムによる永続化処理は永続化アダプタを経由して行われるため、常に監視することができる。そのため、常に永続化オブジェクト間の一貫性を保障できる。従来の方法では、永続化オブジェクト間の一貫性維持のためにアプリケーションプログラム固有の永続化オブジェクトの実装を保守する必要があるため手間がかかった。
本発明を実施するための最良の形態は図1に示される。図1の永続化アダプタ生成装置1gは永続化アダプタ1a(アプリケーションプログラム1p固有の永続化インターフェイス1Xを継承する永続化オブジェクト)を生成する。1pは実行時にいつでも1aを生成でき、1aを使って永続化処理を行える。1pの永続化処理は1aのメソッド呼出として行われ、1aはメソッド呼出を汎用永続化オブジェクト1eのメソッド呼出に翻訳することで、永続化処理を実現する。
詳細な解説をするために図1の読み方を説明する。この図ではJava(登録商標)やC#のようなオブジェクト指向プログラミング言語で使われている一般的な概念を利用している。角が丸い四角はオブジェクト、角が尖った四角はクラスを表す。オブジェクトやクラスの間の矢印「継承」は、矢元のオブジェクトまたはクラスが矢先のクラスを継承している(性質を受け継いでいる)ことを表す。オブジェクト間の矢印「s.t(u1,...,un)→v」は、オブジェクトsのメソッドtに引数u1,...,un(n=1,2,...)を適用して呼び出すとvが得られることを表す。vがφであるときは値が得られない呼出であることを表す。また、オブジェクト間の矢印「new S(u1,...,un)→s」は、クラスSのコンストラクタに引数u1,...,un(n=1,2,...)を適用して呼び出すとオブジェクトsが得られることを表す。オブジェクト間の矢印の中の丸で囲まれた数字は呼出が発生する順序を表す。この丸で囲まれた数字は本文中では丸括弧で囲まれた数字として表現される。以上の規則に従わない部分に関しては個別に説明する。
図1の1gは永続化アダプタ生成を行うメソッドcreateAdapterを持っている。1pがこのメソッドを呼び出す((1) 1g.createAdapeter(1X)→1a)と、1gは1Xを継承する永続化アダプタ実装1Aを生成((2) 生成(1X)→1A)し、1Aをインスタンス化((3) new 1A()→1a)して得られた永続化アダプタ1aを1pへ返す。
処理(2) が生成する1Aは、1Aのコンストラクタ呼出を1Eのコンストラクタ呼出へ、1Aの各メソッド呼出を1Eのメソッド呼出へ翻訳しなければならない。1Aのどのようなコンストラクタやメソッドの呼出を1Eのどのようなコンストラクタやメソッドの呼出へ翻訳するかは具体的な実施形態に依存する(ある永続化オブジェクトから他の永続化オブジェクトを検索する手段を1Xのメソッドとして定義できるようにするための翻訳方法と1Eの組み合わせも考えられる)。
例えば、1Aがプロパティ(永続化オブジェクトやデータを格納する変数)を更新・参照するメソッドの集合を定義し、1Eがそれを汎用的に表す場合、図1のような翻訳が考えられる。1Aのコンストラクタ呼出((3) new 1A()→1a)は1Eのコンストラクタ呼出((4) new 1E()→1e)へ、1AのプロパティVを更新するメソッド呼出((5) 1a.setV(v)→φ)は1Eのメソッド呼出((6) 1e.set(”V”,v)→φ)へ、1AのプロパティVを参照するメソッド呼出((7) 1a.getV()→φ)は1Eのメソッド呼出((8) 1e.get(”V”)→v)へ翻訳できる。
例の他にも様々な1Aから1Eへの翻訳方法が存在するが、具体的な翻訳方法については本発明の範疇ではないため(本発明は、1Xによる永続化処理が1Eによる永続化処理へ翻訳するために1Aを生成することであって、どのような翻訳を行うかではないため)、これ以上は触れない。
1Aは図2のようにも実現方法できる。この方法を説明するために、まず、オブジェクトアダプタについて説明する。オブジェクトアダプタはメソッドの呼出をメタ的なメソッド呼出へ翻訳するオブジェクトである。オブジェクトアダプタは次のようにしてこれを実現する。まず、オブジェクトアダプタ実装Sのコンストラクタ呼出「new S(w)→s」はw(メタインターフェイス2Mのインスタンス)をsのフィールドに格納する。そして、sのメソッド呼出「s.t(u1,...,un)→v」をwのメソッド呼出「w.invoke(s,”t”,{[u1],...,[un]})→[v]」へ翻訳する。「{[u1],...,[un]}」は[u1],...,[un]を要素とした配列オブジェクトである。「[u1]」・「[un]」・「[v]」はu1・un・vを単純に格納する箱として機能するオブジェクトである。
図2の2gは永続化アダプタ生成を行うメソッドcreateAdapterを持っている。2pがこのメソッドを呼び出す((1) 2g.createAdapeter(2X)→2a)と、2gは2Xを継承する永続化アダプタ実装(オブジェクトアダプタ実装)2Aを生成((2) 生成(2X)→2A)し、永続化メタオブジェクト実装2Nをインスタンス化((3) new 2N()→2n)し、2Aをインスタンス化((5) new 2A(2n)→2a)して得られた永続化アダプタ(オブジェクトアダプタ)2aを2pへ返す。図2では、2Nのインスタンス化は汎用永続化オブジェクト実装2Eのインスタンス化に翻訳されるが、他の翻訳方法も考えられる。
例えば、2Aがプロパティを更新・参照するメソッドの集合を定義し、1Eがそれを汎用的に表す場合、図2のような翻訳が考えられる。2AのプロパティVを更新するメソッド呼出((6) 2a.setV(v)→φ)は、2Nのメソッド呼出((7) 2n.invoke(2a,”setV”,{[v]})→null)へ翻訳でき、さらに、それは2Eのメソッド呼出((8) 2e.set(”V”,v)→φ)へ翻訳できる。2AのプロパティVを参照するメソッド呼出((9) 2a.getV()→φ)は2Nのメソッド呼出((10) 2n.invoke(2a,”getV”,{})→[v])へ翻訳でき、さらに、それは2Eのメソッド呼出((8) 2e.get(”V”)→v)へ翻訳できる。
図2の実現方法は図1の実現方法に比べて性能面で問題があるが、2Eへの翻訳方法を2Mのインスタンスとして簡単に交換・保守できる利点がある。
1Aや2Aのような永続化アダプタ実装を実行時に生成する方法は2種類ある。前の例で述べたような1Aや2Aを表すソースコードを実行時に生成し、それをコンパイルして得られる1Aや2Aをメモリへ実行時に読み込む方法とコンパイルして得られる1Aや2Aと同じものをメモリへ直接生成する方法である。前者は、ソースコードコンパイラとコンパイルして得られるモジュールを実行時にメモリへ読み込む仕組みが必要である(Java(登録商標)やC#のような一般的な処理系には備わっている)。後者はコンパイラが必要ない代わりに、1Aや2Aを機械語で表す必要がある。前者は実行時にコンパイラが必要であるため適用できる状況が極端に減少する。後者は処理系によって機械語が異なるため適用できる状況が減少する(Java(登録商標)やC#のように処理系が仮想機械であれば問題はない)。
永続化アダプタ生成装置の実施形態を表した説明図である。 永続化アダプタ生成装置の実施形態を表した説明図である。
符号の説明
1桁目が図面番号、2桁目が図面中の物を識別する記号である。2桁目が同じ2つの符号は同じ物を表す。
1p アプリケーションプログラム
1g 永続化アダプタ生成装置
1X 永続化インターフェイス
1A 永続化アダプタ実装
1a 永続化アダプタ
1E 汎用永続化オブジェクト実装
1e 汎用永続化オブジェクト
2p アプリケーションプログラム
2g 永続化アダプタ生成装置
2X 永続化インターフェイス
2A 永続化アダプタ実装(オブジェクトアダプタ実装)
2a 永続化アダプタ(オブジェクトアダプタ)
2M メタインターフェイス
2N 永続化メタオブジェクト実装
2n 永続化メタオブジェクト
2E 汎用永続化オブジェクト実装
2e 汎用永続化オブジェクト

Claims (2)

  1. 永続化アダプタの生成をコンピュータに行わせるプログラムであって、アプリケーションプログラム固有の永続化インターフェイスから抽出したメタ情報に基づいて、前記インターフェイスに従ったメソッド呼出を汎用永続化オブジェクトのメソッド呼出に翻訳する永続化アダプタを前記アプリケーションプログラム実行時に生成する、ことを前記コンピュータに実行させるプログラム。
  2. 前記永続化アダプタは前記インターフェイスのインスタンスであり、前記汎用永続化オブジェクトのインスタンスへアクセスする手段を持ち、前記インターフェイスから継承する各メソッドのメソッド呼出を前記汎用永続化オブジェクトのメソッド呼出へ翻訳する、ことを前記コンピュータに実行させるプログラム。
JP2004186470A 2004-06-24 2004-06-24 永続化アダプタ生成装置 Pending JP2006011712A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004186470A JP2006011712A (ja) 2004-06-24 2004-06-24 永続化アダプタ生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004186470A JP2006011712A (ja) 2004-06-24 2004-06-24 永続化アダプタ生成装置

Publications (1)

Publication Number Publication Date
JP2006011712A true JP2006011712A (ja) 2006-01-12

Family

ID=35778925

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004186470A Pending JP2006011712A (ja) 2004-06-24 2004-06-24 永続化アダプタ生成装置

Country Status (1)

Country Link
JP (1) JP2006011712A (ja)

Similar Documents

Publication Publication Date Title
EP3134811B1 (en) Decomposing a generic class into layers
US8707278B2 (en) Embedding class hierarchy into object models for multiple class inheritance
Lippman Inside the C++ object model
CN106462425B (zh) 使用复常量的方法和系统
CN107924326B (zh) 对经更新的类型的迁移方法进行覆盖
US9417931B2 (en) Unified metadata for external components
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
JPH05241845A (ja) 言語中立のソース・プログラムからオブジェクト・ロード可能モジュールを生成するシステム及び方法
JPH0836494A (ja) 動的拡張可能オブジェクト用のタイプ・セーフ・フレームワークのための方法及び装置
TW201310341A (zh) 將作業系統之原始應用程式介面投射至其它程式語言
US9411617B2 (en) System and method for matching synthetically generated inner classes and methods
US11782774B2 (en) Implementing optional specialization when compiling code
KR20080038306A (ko) 널가능과 후 바인딩
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
US8935657B2 (en) Model-to-model transformation by kind
Edmunds et al. Tool support for Event-B code generation
JP2006011712A (ja) 永続化アダプタ生成装置
Klose et al. Partial evaluation of pointcuts
Kalnins et al. Tool support for MOLA
Abu-Abed et al. Methods for integrating and executing programs in the Java language when developing an Android application on the unreal engine 4 game engine
Gough et al. Reading and Writing PE-files with PERWAPI
CN117369861A (zh) 应用程序的线程管理策略配置方法及相关装置
Milne et al. Interpreting computer code in a computer‐based learning system for novice programmers
Beevi et al. MetaJC++: A flexible and automatic program transformation technique using meta framework
Ghuloum Implicit phasing for library dependencies