以下、図面を参照して、実施形態について説明する。
図1は、本実施形態に係る自動書き換え装置のハードウェア構成を示すブロック図である。図1に示すように、コンピュータ10は、例えばハードディスクドライブ(HDD:Hard Disk Drive)のような外部記憶装置20と接続されている。この外部記憶装置20は、コンピュータ10によって実行されるプログラム21を格納する。コンピュータ10および外部記憶装置20は、自動書き換え装置30を構成する。
この自動書き換え装置30は、例えばアスペクト指向プログラミング(AOP:Aspect Oriented Programming)実行環境を利用したアプリケーションにおいてアクセス制御処理(アクセス可否の判定処理)がアスペクト(アドバイス)として実現される場合に用いられるAOP定義ファイル(AOP定義情報)および認可ポリシに対して整合性の取れた書き換えを行う機能を有する。
図2は、図1に示す自動書き換え装置30の主として機能構成を示すブロック図である。
図2に示すように、自動書き換え装置30は、自動書き換え部31を含む。本実施形態において、自動書き換え部31は、図1に示すコンピュータ10が外部記憶装置20に格納されているプログラム(自動書き換えプログラム)21を実行することにより実現されるものとする。このプログラム21は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム21が、例えばネットワークを介してコンピュータ10にダウンロードされても構わない。
また、自動書き換え装置30は、書き換え対象データ格納部22および変更履歴格納部23を含む。本実施形態において、書き換え対象データ格納部22および変更履歴格納部23は、例えば外部記憶装置20に格納される。
書き換え対象データ格納部22には、本実施形態に係る自動書き換え装置30による書き換えの対象となる情報が格納される。書き換え対象データ格納部22は、AOP定義格納部221および認可ポリシ格納部222を含む。
AOP定義格納部221は、アプリケーションにおける複数のモジュール間に散らばって実装される例えばアクセス制御等の付加的な処理(横断的関心事)を分離するためのアスペクトが定義されるAOP定義情報が格納される。
AOP定義格納部221に格納されているAOP定義情報には、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報が含まれる。なお、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列は、例えばオブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列(以下、クラス/メソッド名からなる文字列と表記)を含む。つまり、ポイントカット定義情報には、クラス/メソッド名からなる文字列が記述されている。
認可ポリシ格納部222には、例えばアプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる認可ポリシが格納される。この認可ポリシにおいては、アプリケーションを利用するユーザからの要求に対して認可を実行する単位で、誰(サブジェクト)が、アプリケーションが備えるどの資源(リソース)に対して、どの操作(アクション)を行うことができるか否か(つまり、許可または拒否)を表すアクセス可否条件が規定される。なお、本願において、認可とは、リソースへのアクセス権を指定する機能(認可機能)の意味であり、許可とは、認可機能の実行結果、つまりシステムが与えたアクセス権として、「許可する」という意味である。
具体的には、認可ポリシには、例えばサブジェクト(アクセスの主体)について定義されたサブジェクト定義情報、リソース(アクセスの対象)について定義されたリソース定義情報およびアクション(アクセスの行為内容)について定義されたアクション定義情報が含まれる。
認可ポリシに含まれるサブジェクト定義情報は、サブジェクトに関するアクセス可否条件を表現する文字列(例えばユーザの名前、所属、役職および役割等の属性情報)からなる。
認可ポリシに含まれるリソース定義情報は、リソースに関するアクセス可否条件を表現する文字列からなる。なお、リソースに関するアクセス可否条件を表現する文字列は、例えばクラス/メソッド名からなる文字列を含む。つまり、リソース定義情報には、クラス/メソッド名からなる文字列が記述されている。
認可ポリシに含まれるアクション定義情報は、アクションに関するアクセス可否条件を表現する文字列(例えばオブジェクト指向言語におけるメソッドの名称からなる文字列)からなる。
変更履歴格納部23には、アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報が格納される。この変更履歴情報には、例えばアプリケーションのソースコードにおける変更前の文字列、変更後の文字列および当該変更における操作の種別(操作種別)を示す操作種別情報が含まれる。変更履歴情報に含まれる変更前の文字列および変更後の文字列は、クラス/メソッド名からなる文字列を含む。
なお、本実施形態において、アプリケーションを構成するクラスおよびメソッドと、それに関連するAOP定義情報(に含まれるポイントカット定義情報)に記述されたクラスおよびメソッドとの整合性は、例えばAOP定義情報とJavaクラスへの変更を相互に反映するリファクタリング機能によって保たれていることを前提とする。
自動書き換え部31は、AOP定義格納部221に格納されているAOP定義情報、認可ポリシ格納部222に格納されている認可ポリシおよび変更履歴格納部23に格納されている変更履歴情報に基づいて、当該AOP定義情報(に含まれるポイントカット定義情報)および当該認可ポリシ(に含まれるリソース定義情報)の書き換えを行う機能を有する。
自動書き換え部31は、書き換え対象データ読み込み部32、変更履歴読み込み部33、書き換え要否判定部34および書き換え対象データ更新部35を含む。
書き換え対象データ読み込み部32は、AOP定義格納部221からAOP定義情報を取得する機能を有する。また、書き換え対象データ読み込み部32は、認可ポリシ格納部222から認可ポリシを取得する機能を有する。
変更履歴読み込み部33は、変更履歴格納部23に格納されている変更履歴情報を、当該変更履歴格納部23から取得する機能を有する。
書き換え要否判定部34は、書き換え対象データ読み込み部32によって取得されたAOP定義情報に含まれるポイントカット定義情報、認可ポリシに含まれるリソース定義情報および変更履歴読み込み部33によって取得された変更履歴情報を用いて、当該AOP定義情報および当該認可ポリシに対する書き換えが必要であるか否かを判定する機能を有する。
書き換え対象データ更新部35は、書き換え要否判定部34による判定結果(判定内容)に応じて、AOP定義格納部221に格納されているAOP定義情報および認可ポリシ格納部22に格納されている認可ポリシに対する書き換え処理(更新処理)を実行する機能を有する。
図3は、図2に示す自動書き換え部31に含まれる書き換え対象データ読み込み部32の主として機能構成を示すブロック図である。
図3に示すように、書き換え対象データ読み込み部32は、AOP定義読み込み部321、ポイントカット抽出部322、認可ポリシ読み込み部323およびリソース抽出部324を含む。
AOP定義読み込み部321は、AOP定義格納部221に格納されているAOP定義情報を、当該AOP定義格納部221から取得する。
ポイントカット抽出部322は、AOP定義読み込み部321によって取得されたAOP定義情報に含まれるポイントカット定義情報から、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列(つまり、ポイントカット定義情報に記述されている文字列)を抽出する。なお、ポイントカット抽出部322によって抽出された文字列は、クラス/メソッド名からなる文字列(オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列)を含む。
認可ポリシ読み込み部323は、認可ポリシ格納部222に格納されている認可ポリシを、当該認可ポリシ格納部222から取得する。
リソース抽出部324は、認可ポリシ読み込み部323によって取得された認可ポリシに含まれるリソース定義情報から、リソースに関するアクセス可否条件を表現する文字列(つまり、リソース定義情報に記述されている文字列)を抽出する。なお、リソース抽出部324によって抽出された文字列は、クラス/メソッド名からなる文字列(オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列)を含む。
なお、書き換え対象データ読み込み部32は、ポイントカット抽出部322によってポイントカット定義情報から抽出された文字列およびリソース抽出部324によってリソース定義情報から抽出された文字列を書き換え要否判定部34に渡す。
図4は、図2に示す自動書き換え部31に含まれる書き換え要否判定部34の主として機能構成を示すブロック図である。
図4に示すように、書き換え要否判定部34は、差分抽出部341、変更履歴取得部342および判定部343を含む。
差分抽出部341は、書き換え対象データ読み込み部32から渡されたポイントカット定義情報から抽出された文字列およびリソース定義情報から抽出された文字列を取得する。差分抽出部341は、取得されたポイントカット定義情報から抽出された文字列およびリソース定義情報から抽出された文字列を比較することによって、当該ポイントカット定義情報および当該リソース定義情報間において差分となる文字列(以下、差分文字列と表記)を抽出する。
変更履歴取得部342は、変更履歴読み込み部33によって取得された変更履歴情報を、当該変更履歴読み込み部33から取得する。
判定部343は、差分抽出部341によって抽出された差分文字列および変更履歴取得部342によって取得された変更履歴情報に基づいて、当該差分文字列がAOP定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否かを判定する。
なお、書き換え要否判定部34は、判定部343による判定結果を書き換え対象データ更新部35に渡す。
図5は、図2に示す自動書き換え部31に含まれる書き換え対象データ更新部35の主として機能構成を示すブロック図である。
図5に示すように、書き換え対象データ更新部35は、書き換え処理ハンドリング部351、AOP定義更新部352、認可ポリシ更新部353および警告メッセージ出力部354を含む。
書き換え処理ハンドリング部351は、書き換え要否判定部34から渡された判定部343による判定結果を取得する。書き換え処理ハンドリング部351は、取得された判定結果に応じて、AOP定義情報または認可ポリシに対する更新処理等をハンドリングする機能を有する。
書き換え処理ハンドリング部351は、差分文字列がAOP定義情報または認可ポリシに対する書き換えの対象となる文字列であると判定部343によって判定された場合、当該AOP定義情報または認可ポリシの更新処理をAOP定義更新部352または認可ポリシ更新部353に要求する。
また、書き換え処理ハンドリング部351は、差分文字列がAOP定義情報または認可ポリシに対する書き換えの対象となる文字列でないと判定部343によって判定された場合、例えばアプリケーションを利用するユーザに対する警告出力処理を警告メッセージ出力部354に要求する。
AOP定義更新部352は、書き換え処理ハンドリング部351からの要求を受け付けると、上記した差分文字列を用いてAOP定義格納部221に格納されているAOP定義情報に含まれるポイントカット定義情報を更新する。
認可ポリシ更新部353は、書き換え処理ハンドリング部351からの要求を受け付けると、上記した差分文字列を用いて認可ポリシ格納部222に格納されている認可ポリシに含まれるリソース定義情報を更新する。
警告メッセージ出力部354は、書き換え処理ハンドリング部351からの要求を受け付けると、上記した差分文字列を用いて警告メッセージを出力する。警告メッセージ出力部354によって出力される警告メッセージは、例えば差分文字列が書き換えの対象となる文字列でない旨等を示す。
図6は、図2に示す書き換え対象データ格納部22に含まれるAOP定義格納部221に格納されているAOP定義情報のデータ構造の一例を示す。
AOP定義情報には、当該AOP定義情報に定義されているアスペクト(クラス)を識別するためのIDが含まれている。図6に示すAOP定義情報においては、当該AOP定義情報に定義されているアスペクトを識別するためのIDとして、3行目のid属性の属性値である「authz_aop」が含まれている。
また、AOP定義情報には、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報が含まれている。このポイントカット定義情報には、複数のポイントカットが定義されている。なお、ポイントカットとは、どのクラスの、どのようなメソッドが呼ばれたときにアスペクトを実行するかが定義された実行条件である。図6に示すAOP定義情報においては、11行目〜15行目が当該AOP定義情報に含まれるポイントカット定義情報であり、12行目〜15行目の各々にポイントカットが定義(記述)されている。
なお、図6の12行目〜15行目の各々に記述されている文字列(つまり、ポイントカット定義情報に定義されているポイントカット)には、クラス/メソッド名からなる文字列が含まれている。具体的には、図6の12行目の文字列に含まれる「com.hoge.Service01.doAction()」は、クラス/メソッド名からなる文字列である。この文字列のうち、「com.hoge.Service01」がオブジェクト指向言語におけるクラスの名称であり、「doAction()」がオブジェクト指向言語におけるメソッドの名称である。
また、AOP定義情報には、ポイントカット定義情報に定義されている各ポイントカットに関連づけられるアスペクトが持つメソッド(つまり、当該ポイントカットに関連づけられるアドバイス)が定義されている。図6に示す例では、18行目〜21行目の各々に各ポイントカットに関連づけられるアスペクトが持つメソッドが定義されている。
図7は、図2に示す書き換え対象データ格納部22に含まれる認可ポリシ格納部222に格納されている認可ポリシのデータ構造の一例を示す。上述したように認可ポリシは、アプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる。
認可ポリシには、上述したようにサブジェクト定義情報、リソース定義情報およびアクション定義情報が含まれる。サブジェクト定義情報は、認可ポリシにおけるサブジェクト(アクセスの主体)に関するアクセス可否条件を表現する文字列からなる。リソース定義情報は、認可ポリシにおけるリソース(アクセスの対象)に関するアクセス可否条件を表現する文字列からなる。アクション定義情報は、認可ポリシにおけるアクション(アクセスの行為内容)に関するアクセス可否条件を表現する文字列からなる。
図7に示す認可ポリシにおいて、サブジェクト定義情報は、4行目〜7行目に示される文字列からなる。このサブジェクト定義情報によれば、図7の3行目に記されたPermit(許可)により、アクセスの主体(サブジェクト)が「ADMIN」である場合に当該アクセスを許可することが示されている。なお、「ADMIN」は、例えばアクセスするユーザの属性情報である。
図7に示す認可ポリシにおいて、リソース定義情報は、9行目〜16行目に示される文字列からなる。このリソース定義情報によれば、図7の3行目に記されたPermit(許可)により、アクセスの対象(リソース)が「com.hoge.Servic01.doAction()」、「com.hoge.Servic02.doAction()」、「com.hoge.Servic03.doAction()」、「com.hoge.Servic04.doAction()」および「com.hoge.Servic07.doAction()」である場合に当該アクセスを許可することが示されている。
なお、図7に示す認可ポリシにおける11行目〜15行目の各々に示される文字列は、クラス/メソッド名からなる文字列を含む。つまり、上記した図6に示すAOP定義情報に含まれるポイントカット定義情報および図7に示す認可ポリシに含まれるリソース定義情報には、同一または同等の文字列(クラス/メソッド名からなる文字列)が記述される。
また、図7に示す認可ポリシにおいて、アクション定義情報には、18行目および19行目に示される文字列が含まれている。図7に示す認可ポリシに含まれるアクション定義情報においては、アクションに関するアクセス可否条件は指定されていない。
図8は、図2に示す変更履歴格納部23のデータ構造の一例を示す。上述したように変更履歴格納部23には、アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報が格納されている。図8に示す例では、変更履歴格納部23には、変更履歴情報231〜234が格納されている。
図8に示すように、変更履歴格納部23に格納されている変更履歴情報には、当該変更履歴情報を識別する番号(No)に対応づけてアプリケーションのソースコードにおける変更後の文字列、変更前の文字列および当該変更における操作種別(を示す操作種別情報)が含まれている。
変更履歴情報に含まれる変更後の文字列および変更前の文字列(のフィールド)には、クラス/メソッド名からなる文字列(オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列)が記述される。
操作種別には、例えば「Add」、「Change」および「Delete」が含まれる。「Add」は、クラス/メソッド名からなる文字列の追加を示す。「Change」は、クラス/メソッド名からなる文字列の変更を示す。「Delete」は、クラス/メソッド名からなる文字列の削除を示す。
図8に示す例では、変更履歴情報231には、番号「1」に対応づけて変更後の文字列「com.hoge.Service06.doAction()」、変更前の文字列「−」および操作種別「Add」が含まれている。この変更履歴情報231によれば、アプリケーションのソースコードにおいて変更後の文字列「com.hoge.Service06.doAction()」で表現されるメソッドが追加されたことが示されている。
また、変更履歴情報232には、番号「2」に対応づけて変更後の文字列「com.hoge.Service05.doAction()」、変更前の文字列「com.hoge.Service02.doAction()」および操作種別「Change」が含まれている。この変更履歴情報232によれば、アプリケーションのソースコードにおいて変更前の文字列「com.hoge.Service02.doAction()」で表現されるメソッドの名前が変更後の文字列「com.hoge.Service05.doAction()」で表現されるメソッドの名前に変更されたことが示されている。
また、変更履歴情報233には、番号「3」に対応づけて変更後の文字列「−」、変更前の文字列「com.hoge.Service04.doAction()」および操作種別「Delete」が含まれている。この変更履歴情報233によれば、アプリケーションのソースコードにおいて変更前の文字列「com.hoge.Service04.doAction()」で表現されるメソッドが削除されたことが示されている。
また、変更履歴情報234には、番号「4」に対応づけて変更後の文字列「com.hoge.Service07.doAction()」、変更前の文字列「−」および操作種別「Add」が含まれている。この変更履歴情報234によれば、アプリケーションのソースコードにおいて変更後の文字列「com.hoge.Service07.doAction()」で表現されるメソッドが追加されたことが示されている。
以下、本実施形態に係る自動書き換え装置30の動作について説明する。本実施形態に係る自動書き換え装置30は、書き換え対象データの読み込み処理、書き換え要否の判定処理および書き換え対象データの更新処理の3つの一連の処理を実行する。この一連の処理は、例えばユーザからの指示に応じて実行される。以降、これらの各処理について説明する。
まず、図9のシーケンスチャートを参照して、書き換え対象データの読み込み処理の処理手順について説明する。この書き換え対象データの読み込み処理は、書き換え対象データ格納部22に含まれるAOP定義格納部221および認可ポリシ格納部222から書き換え前のAOP定義情報および認可ポリシを読み込む処理である。
書き換え対象データ読み込み部32に含まれるAOP定義読み込み部321は、書き換え対象データ格納部22に含まれるAOP定義格納部221に対してAOP定義情報の取得を要求する(ステップS1)。
AOP定義読み込み部321によってAOP定義情報の取得が要求されると、AOP定義格納部221からAOP定義情報が返される(ステップS2)。これによって、AOP定義読み込み部321は、AOP定義情報を取得する。AOP定義読み込み部321は、取得されたAOP定義情報を書き換え対象データ読み込み部32に含まれるポイントカット抽出部322に渡す。
ポイントカット抽出部322は、AOP定義読み込み部321から渡されたAOP定義情報に含まれるポイントカット定義情報から、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列(クラス/メソッド名からなる文字列)を抽出する(ステップS3)。
ここで、ポイントカット抽出部322による抽出処理を上述した図6を用いて具体的に説明する。
まず、ポイントカット抽出部322は、図6に示すAOP定義情報に含まれるアスペクト(クラス)を識別するためのID(以下、アスペクトIDと表記)を参照する。ここでは、ポイントカット抽出部322は、アスペクトIDとして図6に示すAOP定義情報の3行目のid属性の属性値「authz_aop」を参照する。
次に、ポイントカット抽出部322は、参照されたアスペクトID「authz_aop」の実行設定が定義された要素を特定する。ここでは、ポイントカット抽出部322は、アスペクトID「authz_aop」が属性値として定義されている図6に示すAOP定義情報の9行目の要素を特定する。
ここで、ポイントカット抽出部322によって特定された要素の中には、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報が定義されている。図6に示すAOP定義情報においては、11行目〜15行目がポイントカット定義情報である。なお、このポイントカット定義情報においては、12行目〜15行目の各々にポイントカットが定義されている。
ポイントカット抽出部322は、ポイントカット定義の単位(つまり、図6の12行目〜15行目の各々)で、オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列を抽出する。ポイントカット抽出部322は、例えば図6に示すAOP定義情報の12行目に定義されている文字列の中から「com.hoge.Service01.doAction()」の文字列を抽出する。また、ポイントカット抽出部322は、図6に示すAOP定義情報の13行目〜15行目の各々についても同様に、「com.hoge.Service03.doAction()」、「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」の文字列を抽出する。以下、ポイントカット抽出部322によってAOP定義情報に含まれるポイントカット定義情報から抽出された文字列をポイントカットと称する。
再び図9に戻ると、書き換え対象データ読み込み部32に含まれる認可ポリシ読み込み部323は、書き換え対象データ格納部22に含まれる認可ポリシ格納部222に対して認可ポリシ情報の取得を要求する(ステップS4)。
認可ポリシ読み込み部323によって認可ポリシの取得が要求されると、認可ポリシ格納部222から認可ポリシが返される(ステップS5)。これによって、認可ポリシ読み込み部323は、認可ポリシを取得する。認可ポリシ読み込み部323は、取得された認可ポリシを書き換え対象データ読み込み部32に含まれるリソース抽出部324に渡す。
リソース抽出部324は、認可ポリシ読み込み部323から渡された認可ポリシに含まれるリソース定義情報から、リソースに関するアクセス可否条件を表現する文字列(クラス/メソッド名からなる文字列)を抽出する(ステップS6)。
ここで、リソース抽出部324による抽出処理を上述した図7を用いて具体的に説明する。
上述した図7に示す認可ポリシにおいては、9行目〜16行目がリソースに関するアクセス可否条件を表現する文字列からなるリソース定義情報である。
したがって、認可ポリシ読み込み部323から渡された認可ポリシが例えば上述した図7に示す認可ポリシである場合、リソース抽出部324は、当該図7に示す認可ポリシの11行目〜15行目の各々に記述される文字列を抽出する。具体的には、リソース抽出部324は、「com.hoge.Service01.doAction()」、「com.hoge.Service02.doAction()」、「com.hoge.Service03.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」の文字列を抽出する。以下、リソース抽出部324によって認可ポリシに含まれるリソース定義情報から抽出された文字列をリソースと称する。
上記したようにステップS6の処理が実行されると、書き換え対象データの読み込み処理は終了される。書き換え対象データの読み込み処理が終了されると、書き換え対象データ読み込み部32は、書き換え要否判定部34を呼び出す。このとき、書き換え対象データ読み込み部32は、ポイントカット抽出部322によって抽出された文字列(ポイントカット)およびリソース抽出部324によって抽出された文字列(リソース)を書き換え要否判定部34に渡す。これにより、書き換え要否判定部34によって上述した書き換え要否の判定処理が実行される。
次に、図10のシーケンスチャートを参照して、書き換え要否の判定処理の処理手順について説明する。この書き換え要否の判定処理は、書き換え対象データ読み込み部32から渡されたポイントカットおよびリソース(ポイントカット定義情報およびリソース定義情報)間において差分となる文字列を抽出し、当該差分文字列がAOP定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否かを判定する処理である。
まず、書き換え要否判定部34に含まれる差分抽出部341は、書き換え対象データ読み込み部32から渡されたポイントカットおよびリソース間において差分となる文字列(差分文字列)を抽出する(ステップS11)。この場合、差分抽出部341は、ポイントカットおよびリソース間で同一の文字列が存在することを検証し、当該ポイントカットおよびリソース間で同一の文字列が存在しない文字列を差分文字列として抽出する。
ここで、図11を参照して、差分抽出部341によって抽出される差分文字列について具体的に説明する。
ここでは、上記したようにポイントカット(ポイントカット抽出部322によって抽出された文字列)が「com.hoge.Service01.doAction()」、「com.hoge.Service03.doAction()」、「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」であり、リソース(リソース抽出部324によって抽出された文字列)が「com.hoge.Service01.doAction()」、「com.hoge.Service02.doAction()」、「com.hoge.Service03.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」であるものとする。
この場合、図11に示すように、「com.hoge.Service01.doAction()」は、ポイントカットおよびリソースの両方に存在する。このため、「com.hoge.Service01.doAction()」は、差分文字列として抽出されない。
また、「com.hoge.Service02.doAction()」は、リソースにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service02.doAction()」は、差分文字列として抽出される。
また、「com.hoge.Service03.doAction()」は、ポイントカットおよびリソースの両方に存在する。このため、「com.hoge.Service03.doAction()」は、差分文字列として抽出されない。
また、「com.hoge.Service04.doAction()」は、リソースにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service04.doAction()」は、差分文字列として抽出される。
また、「com.hoge.Service05.doAction()」は、ポイントカットにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service05.doAction()」は、差分文字列として抽出される。
また、「com.hoge.Service06.doAction()」は、ポイントカットにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service06.doAction()」は、差分文字列として抽出される。
また、「com.hoge.Service07.doAction()」は、リソースにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service07.doAction()」は、差分文字列として抽出される。
したがって、差分抽出部341は、図11に示すようにポイントカットである「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」と、リソースである「com.hoge.Service02.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」とを差分文字列として抽出する。なお、差分抽出部341によって抽出された差分文字列は、書き換え要否判定部34に含まれる判定部343に渡される。この判定部343に渡される差分文字列には、例えば当該差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報が付与される。
再び図10に戻ると、書き換え要否判定部34に含まれる変更履歴取得部342は、変更履歴読み込み部33に対して、変更履歴情報の取得を要求する(ステップS12)。
変更履歴取得部342によって変更履歴情報の取得が要求されると、変更履歴読み込み部33は、変更履歴格納部23から変更履歴情報を取得し、当該取得された変更履歴情報を変更履歴取得部342に返す(ステップS13)。これによって、変更履歴取得部342は、変更履歴情報を取得する。変更履歴取得部34は、取得された変更履歴情報を判定部343に渡す。
判定部343は、変更履歴取得部34から渡された変更履歴情報に基づいて、差分抽出部341から渡された差分文字列がAOP定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否か(つまり、書き換えの要否)を判定する処理(以下、書き換え要否判定処理と表記)を実行する(ステップ14)。
ここで、図12のフローチャートを参照して、判定部343による書き換え要否判定処理(図10に示すステップS14の処理)の処理手順について説明する。
判定部343は、差分抽出部341から渡された差分文字列(つまり、差分抽出部341によって抽出された差分文字列)の各々について、以下のステップS21〜S26の処理を実行する。以下、この処理の対象となる差分文字列を対象差分文字列と称する。
まず、判定部343は、変更履歴取得部34から渡された変更履歴情報(変更履歴格納部23に格納されている変更履歴情報)に含まれるアプリケーションのソースコードにおける変更前の文字列および変更毎の文字列に基づいて、対象差分文字列を当該変更前の文字列または変更後の文字列として含む変更履歴情報を特定する(ステップS21)。
対象差分文字列が例えば「com.hoge.Service02.doAction()」の文字列である場合には、上述した図8に示す変更履歴格納部23に格納されている変更履歴情報231〜234の中の変更履歴情報232が特定される。
なお、判定部343によって特定された変更履歴情報には、操作種別(情報)が含まれる。この操作種別は、例えば「Add(追加)」、「Change(変更)」および「Delete(削除)」を含む。
次に、判定部343は、ステップS21において特定された変更履歴情報に含まれる操作種別が「Add」である(つまり、追加を示す)か否かを判定する(ステップS22)。
ステップS21において特定された変更履歴情報に含まれる操作種別が「Add」であると判定された場合(ステップS22のYES)、判定部343は、後述する第1の判定処理を実行する(ステップS23)。
一方、ステップS21において特定された変更履歴情報に含まれる操作種別が「Add」でないと判定された場合(ステップS22のNO)、判定部343は、当該特定された変更履歴情報に含まれる操作種別が「Change」である(つまり、変更を示す)か否かを判定する(ステップS24)。
ステップS21において特定された変更履歴情報に含まれる操作種別が「Change」であると判定された場合(ステップS24のYES)、判定部343は、後述する第2の判定処理を実行する(ステップS25)。
一方、ステップS21において特定された変更履歴情報に含まれる操作種別が「Change」でない、つまり、「Delete」である(つまり、削除を示す)と判定された場合(ステップS24のNO)、判定部343は、後述する第3の判定処理を実行する。
上記した第1〜第3の判定処理は、ステップS21において特定された変更履歴情報に含まれる操作種別に応じた判定処理である。
上記したように第1〜第3の判定処理が実行されると、判定部343は、全ての差分文字列について上記したステップS21〜S26の処理が実行されたか否かを判定する(ステップS27)。
全ての差分文字列について処理が実行されていないと判定された場合(ステップS27のNO)、上記したステップS21に戻って処理が繰り返される。この場合、ステップS21〜S26の処理が実行されていない差分文字列を対象差分文字列として処理が実行される。
一方、全ての差分文字列について処理が実行されたと判定された場合(ステップS27のYES)、書き換え要否判定処理は終了される。
次に、図13のフローチャートを参照して、上述した第1の判定処理の処理手順について説明する。この第1の判定処理は、図12に示すステップS21において特定された変更履歴情報に含まれる操作種別が「Add」である場合に実行される処理である。
まず、判定部343は、対象差分文字列(第1の判定処理が実行される際の対象差分文字列)がリソースであるか否かを判定する(ステップS31)。換言すれば、判定部343は、対象差分文字列が認可ポリシに含まれるリソース定義情報から抽出された文字列であるか否かを判定する。なお、この判定処理は、上記したように対象差分文字列に付加されている情報(当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報)に基づいて実行される。
対象差分文字列がリソースであると判定された場合(ステップS31のYES)、判定部343は、対象差分文字列がAOP定義情報に含まれるポイントカット定義情報に対する追加の対象となる文字列(ポイントカット追加対象)であると判定する。この場合、判定部343は、対象差分文字列をポイントカット追加対象として例えば判定部343が有するポイントカット追加対象一時格納部(図示せず)に登録する(ステップS32)。
一方、対象差分文字列がリソースでない、つまり、ポイントカットであると判定された場合(ステップS31のNO)、判定部343は、対象差分文字列が書き換え不要の対象となる文字列(書き換え不要対象)であると判定する。つまり、判定部343は、対象差分文字列を書き換えの対象となる文字列ではないと判定する。この場合、判定部343は、対象差分文字列を書き換え不要対象として例えば判定部343が有する書き換え不要対象一時格納部(図示せず)に登録する(ステップS33)。
上記したステップS32およびS33の処理が実行されると、第1の判定処理が終了される。
次に、図14のフローチャートを参照して、上述した第2の判定処理の処理手順について説明する。この第2の判定処理は、図12に示すステップS21において特定された変更履歴情報に含まれる操作種別が「Change」である場合に実行される処理である。
まず、判定部343は、対象差分文字列(第2の判定処理が実行される際の対象差分文字列)が第1の条件を満たすか否かを判定する(ステップS41)。
ここで、第1の条件とは、対象差分文字列がステップS21において特定された変更履歴情報に変更前の文字列として含まれ、かつ、リソースである(つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列である)ことを示す。なお、このステップS41における判定処理は、図12に示すステップS21において特定された変更履歴情報および上記したように対象差分文字列に付加されている情報(当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報)に基づいて実行される。
第1の条件を満たさないと判定された場合(ステップS41のNO)、判定部343は、対象差分文字列が第2の条件を満たすか否かを判定する(ステップS42)。
ここで、第2の条件とは、対象差分文字列がステップS21において特定された変更履歴情報に変更後の文字列として含まれ、かつ、ポイントカットである(つまり、AOP定義情報に含まれるポイントカット定義情報から抽出された文字列である)ことを示す。なお、このステップS42における判定処理は、図12に示すステップS21において特定された変更履歴情報および上記したように対象差分文字列に付加されている情報(当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報)に基づいて実行される。
第2の条件を満たすと判定された場合(ステップS42のYES)、判定部343は、対象差分文字列を認可ポリシに含まれるリソース定義情報に対する修正後の文字列(リソース修正内容)であると判定する。この場合、判定部343は、対象差分文字列をリソース修正内容として例えば判定部343が有するリソース修正対象一時格納部(図示せず)に登録する(ステップS43)。
一方、第2の条件を満たさないと判定された場合(ステップS42のNO)、判定部343は、対象差分文字列が書き換え不要の対象となる文字列(書き換え不要対象)であると判定する。この場合、判定部343は、対象差分文字列を書き換え不要対象として書き換え不要対象一時格納部に登録する(ステップS44)。
なお、第1の条件を満たすと判定された場合(ステップS41)、判定部343は、対象差分文字列が認可ポリシに含まれるリソース定義情報に対する修正前の文字列(リソース修正対象)であると判定する。この場合、判定部343は、対象差分文字列をリソース修正対象としてリソース修正対象一時格納部に登録する(ステップS43)。
上記したステップS43およびS44の処理が実行されると、第2の判定処理が終了される。
次に、図15のフローチャートを参照して、上述した第3の判定処理の処理手順について説明する。この第3の判定処理は、図12に示すステップS21において特定された変更履歴情報に含まれる操作種別が「Delete」である場合に実行される処理である。
まず、判定部343は、対象差分文字列(第3の判定処理が実行される際の対象差分文字列)がリソースであるか否かを判定する(ステップS51)。換言すれば、判定部343は、対象差分文字列が認可ポリシに含まれるリソース定義情報から抽出された文字列であるか否かを判定する。なお、この判定処理は、上記したように対象差分文字列に付加されている情報(当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報)に基づいて実行される。
対象差分文字列がリソースであると判定された場合(ステップS51のYES)、判定部343は、対象差分文字列が認可ポリシに含まれるリソース定義情報に対する削除の対象となる文字列(リソース削除対象)であると判定する。この場合、判定部343は、対象差分文字列をリソース削除対象として例えば判定部343が有するリソース削除対象一時格納部(図示せず)に登録する(ステップS52)。
一方、対象差分文字列がリソースでない、つまり、ポイントカットであると判定された場合(ステップS51のNO)、判定部343は、対象差分文字列が書き換え不要の対象となる文字列(書き換え不要対象)であると判定する。この場合、判定部343は、対象差分文字列を書き換え不要対象として書き換え不要対象一時格納部に登録する(ステップS53)。
上記したステップS52およびS53の処理が実行されると、第3の判定処理が終了される。
ここで、上記した図11において説明したように、ポイントカットである「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」と、リソースである「com.hoge.Service02.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」とが差分文字列として抽出された場合における書き換え要否判定処理について具体的に説明する。なお、変更履歴取得部342から渡された変更履歴情報(変更履歴格納部23に格納されている変更履歴情報)は、上述した図8に示す変更履歴情報231〜234であるものとして説明する。
まず、「com.hoge.Service05.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
判定部343は、対象差分文字列である「com.hoge.Service05.doAction()」(以下、対象差分文字列「com.hoge.Service05.doAction()」と表記)を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報231〜234の中から特定する。この場合、対象差分文字列「com.hoge.Service05.doAction()」は、変更履歴情報232に変更後の文字列として含まれている。したがって、判定部343は、変更履歴情報232を特定する。
ここで、変更履歴情報232に含まれる操作種別は、「Change」である。よって、判定部343は、第2の判定処理を実行する。
対象差分文字列「com.hoge.Service05.doAction()」は、変更履歴情報232に変更後の文字列として含まれている。また、対象差分文字列「com.hoge.Service05.doAction()」は、上記したようにポイントカット(つまり、AOP定義情報に含まれるポイントカット定義情報から抽出された文字列)である。したがって、判定部343は、対象差分文字列「com.hoge.Service05.doAction()」が上記した第1の条件を満たさないと判定する。一方、判定部343は、対象差分文字列「com.hoge.Service05.doAction()」が上記した第2の条件を満たすと判定する。
この場合、判定部343は、対象差分文字列「com.hoge.Service05.doAction()」が認可ポリシに含まれるリソース定義情報に対する修正後の文字列(リソース修正内容)であると判定し、当該対象差分文字列「com.hoge.Service05.doAction()」をリソース修正内容としてリソース修正対象一時格納部に登録する。
次に、「com.hoge.Service06.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
判定部343は、対象差分文字列である「com.hoge.Service06.doAction()」(以下、対象差分文字列「com.hoge.Service06.doAction()」と表記)を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報231〜234の中から特定する。この場合、対象差分文字列「com.hoge.Service06.doAction()」は、変更履歴情報231に変更後の文字列として含まれている。したがって、判定部343は、変更履歴情報231を特定する。
ここで、変更履歴情報231に含まれる操作種別は、「Add」である。よって、判定部343は、第1の判定処理を実行する。
対象差分文字列「com.hoge.Service06.doAction()」は、上記したようにポイントカット(つまり、AOP定義情報に含まれるポイントカット定義情報から抽出された文字列)である。したがって、判定部343は、対象差分文字列「com.hoge.Service06.doAction()」がリソースでないと判定する。
この場合、判定部343は、対象差分文字列「com.hoge.Service06.doAction()」が書き換え不要の対象となる文字列(書き換え不要対象)であると判定し、当該対象差分文字列「com.hoge.Service06.doAction()」を書き換え不要対象として書き換え不要対象一時格納部に登録する。
次に、「com.hoge.Service02.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
判定部343は、対象差分文字列である「com.hoge.Service02.doAction()」(以下、対象差分文字列「com.hoge.Service02.doAction()」と表記)を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報231〜234の中から特定する。この場合、対象差分文字列「com.hoge.Service02.doAction()」は、変更履歴情報232に変更前の文字列として含まれている。したがって、判定部343は、変更履歴情報232を特定する。
ここで、変更履歴情報232に含まれる操作種別は、「Change」である。よって、判定部343は、第2の判定処理を実行する。
対象差分文字列「com.hoge.Service02.doAction()」は、変更履歴情報232に変更前の文字列として含まれている。また、対象差分文字列「com.hoge.Service02.doAction()」は、上記したようにリソース(つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列)である。したがって、判定部343は、対象差分文字列「com.hoge.Service02.doAction()」が上記した第1の条件を満たすと判定する。
この場合、判定部343は、対象差分文字列「com.hoge.Service02.doAction()」が認可ポリシに含まれるリソース定義情報に対する修正前の文字列(リソース修正対象)であると判定し、当該対象差分文字列「com.hoge.Service02.doAction()」をリソース修正対象としてリソース修正対象一時格納部に登録する。
次に、「com.hoge.Service04.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
判定部343は、対象差分文字列である「com.hoge.Service04.doAction()」(以下、対象差分文字列「com.hoge.Service04.doAction()」と表記)を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報231〜234の中から特定する。この場合、対象差分文字列「com.hoge.Service04.doAction()」は、変更履歴情報233に変更前の文字列として含まれている。したがって、判定部343は、変更履歴情報233を特定する。
ここで、変更履歴情報233に含まれる操作種別は、「Delete」である。よって、判定部343は、第3の判定処理を実行する。
対象差分文字列「com.hoge.Service04.doAction()」は、上記したようにリソース(つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列)である。したがって、判定部343は、対象差分文字列「com.hoge.Service04.doAction()」がリソースであると判定する。
この場合、判定部343は、対象差分文字列「com.hoge.Service04.doAction()」が認可ポリシに含まれるリソース定義情報に対する削除の対象となる文字列(リソース削除対象)であると判定し、当該対象差分文字列「com.hoge.Service04.doAction()」をリソース削除対象としてリソース削除対象一時格納部に登録する。
次に、「com.hoge.Service07.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
判定部343は、対象差分文字列である「com.hoge.Service07.doAction()」(以下、対象差分文字列「com.hoge.Service07.doAction()」と表記)を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報231〜234の中から特定する。この場合、対象差分文字列「com.hoge.Service07.doAction()」は、変更履歴情報234に変更後の文字列として含まれている。したがって、判定部343は、変更履歴情報234を特定する。
ここで、変更履歴情報232に含まれる操作種別は、「Add」である。よって、判定部343は、第1の判定処理を実行する。
対象差分文字列「com.hoge.Service07.doAction()」は、上記したようにリソース(つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列)である。したがって、判定部343は、対象差分文字列「com.hoge.Service07.doAction()」がリソースであると判定する。
この場合、判定部343は、対象差分文字列「com.hoge.Service07.doAction()」がAOP定義情報に含まれるポイントカット定義情報に対する追加の対象となる文字列(ポイントカット追加対象)であると判定し、当該対象差分文字列「com.hoge.Service07.doAction()」をポイントカット追加対象としてポイントカット追加対象一時格納部に登録する。
上記したようにポイントカットである「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」と、リソースである「com.hoge.Service02.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」とが差分文字列として抽出された場合には、図16に示すような書き換え要否判定処理の結果(判定結果)を得ることができる。
具体的には、図16に示すように、書き換え要否判定処理の判定結果として「com.hoge.Service05.doAction()」がリソース修正内容としてリソース修正対象一時格納部に登録され、「com.hoge.Service06.doAction()」が書き換え不要対象として書き換え不要対象一時格納部に登録され、「com.hoge.Service02.doAction()」がリソース修正対象としてリソース修正対象一時格納部に登録され、「com.hoge.Service04.doAction()」がリソース削除対象としてリソース削除対象一時格納部に登録され、「com.hoge.Service07.doAction()」がポイントカット追加対象としてポイントカット追加対象一時格納部に登録される。
上記したように図10に示すステップS14の処理が実行されると、書き換え要否の判定処理は終了される。書き換え要否の判定処理が終了されると、書き換え要否判定部34は、書き換え対象データ更新部35を呼び出す。このとき、書き換え要否判定部34は、書き換え要否判定処理(図10に示すステップS14の処理)の判定結果(つまり、図16に示す各一時格納部に格納された文字列)を書き換え対象データ更新部35に渡す。つまり、各書き換え内容に関する更新情報が書き換え対象データ更新部35に引き渡される。これにより、書き換え対象データ更新部35によって上述した書き換え対象データの更新処理が実行される。
次に、図17のフローチャートを参照して、書き換え対象データの更新処理の処理手順について説明する。この書き換え対象データの更新処理は、上記した書き換え要否判定処理の判定結果に応じてAOP定義格納部221に格納されているAOP定義情報(に含まれるポイントカット定義情報)および認可ポリシ格納部222に格納されている認可ポリシ(に含まれるリソース定義情報)を更新する処理である。
書き換え対象データ更新部35に含まれる書き換え処理ハンドリング部351は、判定部343が有する各一時格納部(リソース修正対象一時格納部、書き換え不要対象一時格納部、リソース削除対象一時格納部およびポイントカット追加対象一時格納部)に格納された文字列に応じて更新処理をハンドリングする。
なお、上記したように判定部343が有する各一時格納部に格納された文字列は、書き換え要否判定部34から渡される。以下、リソース修正対象一時格納部にリソース修正対象として格納された文字列をリソース修正対象文字列と称する。また、リソース修正対象一時格納部にリソース修正内容として格納された文字列をリソース修正内容文字列と称する。また、書き換え不要対象一時格納部に書き換え不要対象として格納された文字列を書き換え不要対象文字列と称する。また、リソース削除対象一時格納部にリソース削除対象として格納された文字列を、リソース削除対象文字列と称する。また、ポイントカット追加対象一時格納部にポイントカット追加対象として格納された文字列をポイントカット追加対象文字列と称する。
まず、書き換え処理ハンドリング部351は、書き換え要否判定部34から渡されたポイントカット追加対象文字列に応じて、AOP定義更新部352に更新処理をハンドリングする(ステップS61)。このとき、書き換え処理ハンドリング部351は、ポイントカット追加対象文字列をAOP定義更新部352に渡す。
AOP定義更新部352は、書き換え処理ハンドリング部351から渡されたポイントカット追加対象文字列を、AOP定義格納部221に格納されているAOP定義情報に含まれるポイントカット定義情報に追加することによって当該ポイントカット定義情報を更新する(ステップS62)。
次に、書き換え処理ハンドリング部351は、書き換え要否判定部34から渡されたリソース修正内容文字列、リソース修正対象文字列およびリソース削除対象文字列に応じて、認可ポリシ更新部353に更新処理をハンドリングする(ステップS63)。このとき、書き換え処理ハンドリング部351は、リソース修正内容文字列、リソース修正対象文字列およびリソース削除対象文字列を認可ポリシ更新部353に渡す。
認可ポリシ更新部353は、書き換え処理ハンドリング部351から渡されたリソース修正内容文字列、リソース修正対象文字列およびリソース削除対象文字列を用いて認可ポリシ格納部222に格納されている認可ポリシに含まれるリソース定義情報を更新する(ステップS64)。
この場合、認可ポリシ更新部353は、認可ポリシに含まれているリソース定義情報において、リソース修正対象文字列をリソース修正内容文字列に変更することによって、当該リソース定義情報を更新する。
また、認可ポリシ更新部353は、リソース削除対象文字列を、認可ポリシに含まれているリソース定義情報から削除することによって当該リソース定義情報を更新する。
次に、書き換え処理ハンドリング部351は、書き換え要否判定部34から渡された書き換え不要対象文字列に応じて、警告メッセージ出力部354に警告出力処理をハンドリングする(ステップS65)。このとき、書き換え処理ハンドリング部351は、書き換え不要対象文字列を警告メッセージ出力部354に渡す。
警告メッセージ出力部354は、書き換え処理ハンドリング部351から渡された書き換え不要対象文字列が書き換えの対象とならない(つまり、書き換え処理が適用されない)旨を示す警告メッセージを出力(表示)する(ステップS66)。ステップS66の処理が実行されると、書き換え対象データの更新処理は終了される。
ここで、上述した図6、図7、図16を参照して、書き換え対象データの更新処理について具体的に説明する。
ここでは、図6に示すAOP定義情報を書き換え前(書き換え対象データの更新処理前)のAOP定義情報とし、図7に示す認可ポリシを書き換え前(書き換え対象データの更新処理前)の認可ポリシとする。
また、図16に示すように、リソース修正対象文字列は、「com.hoge.Service02.doAction()」であるものとする。また、リソース修正内容文字列は、「com.hoge.Service05.doAction()」であるものとする。また、書き換え不要対象文字列は、「com.hoge.Service06.doAction()」であるものとする。また、リソース削除対象文字列は、「com.hoge.Service04.doAction()」であるものとする。また、ポイントカット追加対象文字列は、「com.hoge.Service07.doAction()」であるものとする。
この場合、図6に示すAOP定義情報(書き換え前のAOP定義情報)に含まれるポイントカット定義情報には存在しないポイントカット追加対象文字列である「com.hoge.Service07.doAction()」が当該ポイントカット定義情報(ここでは、図6の16行目)に追加される。この場合、AOP定義情報に含まれるポイントカット定義情報においては、ポイントカット追加対象文字列である「com.hoge.Service07.doAction()」を用いてポイントカットが記述(定義)される。また、ポイントカット定義情報に新たに定義されたポイントカットに関連づけられるアスペクトが持つメソッド(を表現する文字列)がAOP定義情報に追加される。
このように図6に示すAOP定義情報に対して更新処理が実行されることによって、当該図6に示すAOP定義情報は、図18に示すAOP定義情報(つまり、書き換え後のAOP定義情報)に更新される。
次に、図7に示す認可ポリシ(書き換え前の認可ポリシ)に含まれるリソース定義情報において、リソース修正対象文字列である「com.hoge.Service02.doAction()」(図7の12行目)がリソース修正内容文字列である「com.hoge.Service05.doAction()」に変更される。
また、図7に示す認可ポリシに含まれるリソース定義情報に存在するリソース削除対象文字列である「com.hoge.Service04.doAction()」(図7の14行目)が当該リソース定義情報から削除される。
このように図7に示す認可ポリシに対して更新処理が実行されることによって、当該図7に示す認可ポリシは、図19に示す認可ポリシ(つまり、書き換え後の認可ポリシ)に更新される。
なお、書き換え不要対象文字列である「com.hoge.Service06.doAction()」に関しては、上記したように当該書き換え不要対象文字列が書き換え対象とならない旨を示す警告メッセージが出力される。この場合には、例えば「com.hoge.Service06.doAction()については書き換え処理を適用しませんでした。御確認下さい。」等のメッセージが出力される。これにより、ユーザは、「com.hoge.Service06.doAction()」についてはユーザの判断で書き換え要否の必要性があることを確認することができる。
上記したように本実施形態においては、AOP定義格納部221から取得されたAOP定義情報に含まれるポイントカット定義情報からアプリケーションの実行におけるアスペクトの実行時点を表現する文字列(クラス/メソッド名からなる文字列)が抽出され、認可ポリシ格納部222から取得された認可ポリシに含まれるリソース定義情報からリソースに関するアクセス可否条件を表現する文字列(クラス/メソッド名からなる文字列)が抽出され、当該AOP定義情報から抽出された文字列および当該認可ポリシから抽出された文字列が比較されることによって、ポイントカット定義情報およびリソース定義情報間において差分となる差分文字列が抽出される。本実施形態においては、変更履歴格納部23から取得された変更履歴情報の中から差分文字列をアプリケーションのソースコードにおける変更前の文字列または変更後の文字列として含む変更履歴情報が特定され、当該特定された変更履歴情報に基づいて当該差分文字列がAOP定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否かが判定される。本実施形態においては、差分文字列が書き換えの対象となる文字列であると判定された場合、当該差分文字列に基づいてAOP定義格納部221に格納されているAOP定義情報に含まれるポイントカット定義情報または認可ポリシ格納部222に格納されている認可ポリシに含まれるリソース定義情報が更新される。
また、本実施形態においては、特定された変更履歴情報に含まれる変更前の文字列、変更後の文字列および操作種別に応じて差分文字列がリソース修正対象、リソース修正内容、書き換え不要対象、リソース削除対象またはポイント追加対象であると判定され、当該判定結果に応じて更新処理が実行される。
これにより、本実施形態においては、例えばアプリケーションのソースコードの変更に応じて既存の認可ポリシに対してリソースに関するアクセス可否条件の更新等が発生した場合であっても、当該認可ポリシと同等の内容をAOP定義情報に含まれるポイントカット定義情報に定義することが可能となるため、手作業によるポイントカット定義情報に対する修正の手間を省くことができ、効率よくポイントカット定義情報を更新することができる。
更に、本実施形態においては、例えばアプリケーションのソースコードの変更に応じて既存のAOP定義情報に含まれるポイントカット定義情報の更新が発生した場合であっても、人手によって認可ポリシの修正箇所を追跡することなく確実に認可ポリシを更新することができるため、効率よく認可ポリシを保守することができる。
したがって、本実施形態においては、効率よくポイントカットの定義内容(ポイントカット定義情報)および認可ポリシのアクセス可否条件(リソース定義情報)を自動修正することが可能となる。
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。