(57)【要約】【課題】サーバにおいてウェブページを動的に生成する機構を実現するアプリケーションブロックを、自動的にかつ適切に分割する手法を提供する。【解決手段】処理対象のＪＳＰファイルから分割しようとする部分を指定する分割対象指示の入力を受け付けるユーザインターフェイス制御部１０と、分割対象指示にて指定された部分と共に分割される随伴分割部分を決定するＪＳＰ解析部２０と、分割対象指示にて指定された部分と随伴分割部分とを元のＪＳＰファイルから分割する分割実行部３０とを備える。ＪＳＰ解析部２０にてＪＳＰファイルにおける変数及びオブジェクトの依存関係を解析し、コピー可能な部分はコピーにて分割することにより、処理対象のプログラムファイルと分割後のプログラムファイルとが同じ動作をすることを保証する。【選択図】        図２
2004213220.tif 000002
【特許請求の範囲】
【請求項１】
処理対象であるプログラムファイルを編集するプログラム編集装置において、
テキストデータ及びサーバ側のスクリプト及びロジックをカプセル化したオブジェクトへのアクセスを混在させて記述可能であり、かつサーバ側の実行プログラムに変換されるアプリケーションロジックのプログラムファイルを処理対象として格納したファイル格納部と、
処理対象の前記プログラムファイルから分割しようとする部分を指定する分割対象指示の入力を受け付けるユーザインターフェイス制御部と、
前記処理対象のプログラムファイルと分割後のプログラムファイルとが同じ動作をすることを保証するために、前記分割対象指示にて指定された部分と共に分割される随伴分割部分を決定する解析部と、
前記分割対象指示にて指定された部分と前記解析部にて決定された前記随伴分割部分とを元の前記プログラムファイルから分割する分割実行部と
を備えたことを特徴とするプログラム編集装置。
【請求項２】
前記解析部は、前記随伴分割部分として、分割前のプログラムファイルから分割によって作成される新たなプログラムファイルにコピーする部分と、当該分割前のプログラムファイルから切り取って当該新たなプログラムファイルに移動する部分とを決定することを特徴とする請求項１に記載のプログラム編集装置。
【請求項３】
前記解析部は、前記プログラムファイルの所定の部分に関して、分割によって作成される新たなプログラムファイルにコピーされても分割後の各プログラムファイルによる全体的な処理の動作において副作用を持たず、かつ当該所定の部分のみを元のプログラムファイルから切り取ることによって当該所定の部分以外の部分を切り取る必要が生じる場合に、当該所定の部分を当該新たなプログラムファイルにコピーすることを特徴とする請求項２に記載のプログラム編集装置。
【請求項４】
前記解析部は、前記プログラムファイルの実行環境に関わらず、前記アプリケーションロジックの機能的な特徴に基づいて、前記ロジックをカプセル化したオブジェクトへのアクセスに関するデータ依存を解析することを特徴とする請求項１に記載のプログラム編集装置。
【請求項５】
前記解析部は、前記分割される随伴分割部分を決定する場合に、前記プログラムファイルの実行環境から得られるデータに関する依存関係を持つ複数の部分を分割可能と判断することを特徴とする請求項１に記載のプログラム編集装置。
【請求項６】
処理対象のプログラムファイルがＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）ファイルであることを特徴とする請求項１に記載のプログラム編集装置。
【請求項７】
処理対象のＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）ファイルを表示する表示手段と、
前記表示手段にて表示されたＪＳＰファイルに対して、分割しようとする所定の部分を指定してなされる分割対象指示を受け付ける受け付け手段と、
前記処理対象のＪＳＰファイルに対してなされた前記分割対象指示に基づき、当該分割対象指示にて指定された部分と共に分割すべき部分を決定する分割対象決定手段と、
前記分割対象決定手段にて決定された分割すべき部分を識別可能な状態で前記表示手段に表示させる表示制御手段と
を備えることを特徴とするプログラム編集装置。
【請求項８】
前記分割対象決定手段による決定に基づいてＪＳＰファイルの分割を実行する分割実行手段をさらに備え、
前記受け付け手段は、前記分割実行手段に分割処理の実行を指示する実行命令の入力を受け付け、
前記表示制御手段は、前記分割実行手段による分割処理の実行結果を前記表示手段に表示させることを特徴とする請求項７に記載のプログラム編集装置。
【請求項９】
コンピュータを用いて、処理対象であるプログラムファイルを分割するプログラム編集方法であって、
テキストデータ及びサーバ側のスクリプト及びロジックをカプセル化したオブジェクトへのアクセスを混在させて記述可能であり、かつサーバ側の実行プログラムに変換されるアプリケーションロジックのプログラムファイルを格納した所定の記憶装置から処理対象のプログラムファイルを読み出すステップと、
前記処理対象のプログラムファイルから分割しようとする部分を指定する分割対象指示の入力を受け付けるステップと、
前記処理対象のプログラムファイルと分割後のプログラムファイルとが同じ動作をすることを保証するために、前記分割対象指示にて指定された部分と共に分割される随伴分割部分を決定するステップと、
前記分割対象指示にて指定された部分と前記随伴分割部分とを元の前記プログラムファイルから分割するステップと
を含むことを特徴とするプログラム編集方法。
【請求項１０】
前記随伴分割部分を決定するステップでは、前記ロジックをカプセル化したオブジェクトへのアクセスに関するデータ依存を解析し、解析結果に基づいて、分割前のプログラムファイルから分割によって作成される新たなプログラムファイルにコピーする部分と、当該分割前のプログラムファイルから切り取って当該新たなプログラムファイルに移動する部分とを決定することを特徴とする請求項９に記載のプログラム編集方法。
【請求項１１】
前記随伴分割部分を決定するステップでは、前記プログラムファイルの実行環境から得られるデータに関する依存関係を持つ複数の部分を分割可能と判断することを特徴とする請求項９に記載のプログラム編集方法。
【請求項１２】
コンピュータを制御して、処理対象であるプログラムファイルを分割するプログラムであって、
テキストデータ及びサーバ側のスクリプト及びロジックをカプセル化したオブジェクトへのアクセスを混在させて記述可能であり、かつサーバ側の実行プログラムに変換されるアプリケーションロジックのプログラムファイルを格納した所定の記憶装置から処理対象のプログラムファイルを読み出す処理と、
前記処理対象のプログラムファイルから分割しようとする部分を指定する分割対象指示の入力を受け付けるステップと、
前記処理対象のプログラムファイルと分割後のプログラムファイルとが同じ動作をすることを保証するために、前記分割対象指示にて指定された部分と共に分割される随伴分割部分を決定する処理と、
前記分割対象指示にて指定された部分と前記解析部にて決定された前記随伴分割部分とを元の前記プログラムファイルから分割する処理と
を前記コンピュータに実行させることを特徴とするプログラム。
【請求項１３】
前記プログラムによる前記随伴分割部分を決定する処理は、
前記分割対象指示において指定された指定部分の各処理に順次着目し、当該処理が依存する他の処理を後ろ向き依存解析により検出して前記随伴分割部分に含める処理と、
前記分割対象指示において指定された指定部分の各処理に順次着目し、当該処理に依存する他の処理を前向き依存解析により検出して前記随伴分割部分に含める処理と
を前記コンピュータに実行させることを特徴とする請求項１２に記載のプログラム。
【請求項１４】
前記プログラムによる前記随伴分割部分を決定する処理では、前記プログラムファイルの実行環境から得られるデータに関する依存関係を持つ複数の部分を分割可能と判断する処理を前記コンピュータに実行させることを特徴とする請求項１２に記載のプログラム。
【請求項１５】
コンピュータを制御して、所定のデータ処理機能を実現させるプログラムであって、
処理対象のＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）ファイルに対して、分割しようとする所定の部分を指定してなされる分割対象指示を受け付ける受け付け手段と、
前記処理対象のＪＳＰファイルに対してなされた前記分割対象指示に基づき、当該分割対象指示にて指定された部分と共に分割すべき部分を決定する分割対象決定手段と、
所定の表示装置に処理対象のＪＳＰファイルを表示させると共に、前記分割対象指示にて指定された部分と共に分割すべき部分を視覚的に識別可能な状態で表示させる表示制御手段として、
前記コンピュータを機能させることを特徴とするプログラム。
【請求項１６】
前記プログラムによる前記分割対象決定手段としての機能は、前記ＪＳＰファイルの記述中から当該ＪＳＰファイルを分割した後も利用可能な変数を特定し、当該変数に関する依存を除去して前記分割すべき部分を決定することを特徴とする請求項１５に記載のプログラム。
【請求項１７】
前記プログラムによる前記分割対象決定手段としての機能は、前記ＪＳＰファイルを分割した後も参照可能なオブジェクトを特定し、データ依存が存在する複数の当該オブジェクトへのアクセスを前記分割すべき部分に含めることを特徴とする請求項１５に記載のプログラム。
【請求項１８】
請求項１２から請求項１７のいずれかに記載のプログラムを、コンピュータが読み取り可能に記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータを用いてプログラムの編集を支援する技術に関し、特にプログラムの自動分割を実現する方法に関する。
【０００２】
【従来の技術】
インターネット等で利用されるＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ：以下、ウェブと称す）技術が使用される環境では、ウェブサーバ（以下、単にサーバと称す）からウェブクライアント（以下、単にクライアントと称す）へＨＴＭＬファイル（ウェブページ）を送信することにより、ウェブページの機能として種々のサービスを提供することができる。今日では、個々のユーザにきめ細かく対応する等の目的から、クライアントからのアクセス条件（ユーザの別や時間的な条件等）に応じて、サーバにおいてウェブページを動的に生成することが行われている。
【０００３】
このウェブページを動的に生成する機構として、Ｊａｖａ（米国サン・マイクロシステムズ社の商標）の実行環境で利用されるＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）や、米国マイクロソフト社のＩＩＳ（Ｉｎｔｅｒｎｅｔ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｅｒｖｉｃｅ）で利用されるＡＳＰ（Ａｃｔｉｖｅ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）等がある。これらは、テキストデータ、サーバ側のスクリプト、ロジックをカプセル化したオブジェクトへのアクセスを混在させて記述可能であり、かつサーバ側の実行プログラムに変換されるアプリケーションロジックである。そして、サーバにおいて、クライアントの要求に応じてスクリプトを実行し、当該スクリプト部分を実行結果で置き換えてクライアントに返すといった処理を実現する。
【０００４】
ところで、上記のアプリケーションロジックを分割することで、ウェブページを動的に生成する機構を効率的に利用することができる。以下、具体的に説明する。
サーバにおいて動的に生成されるウェブページ中には、変更の頻度が高い部分と変更の頻度が低い部分とが存在する。そのため、生成されたウェブページをキャッシュすると、変更の頻度が高い部分に合わせて、キャッシュしたウェブページが無効化されるため、キャッシュの効果が低くなってしまう。これに対し、ウェブページの部分ごとにおける変更の頻度に合わせてアプリケーションロジックを分割し、分割された個々のアプリケーションロジックにて生成されるウェブページの断片（フラグメント）を別々にキャッシュすることが考えられる。これにより、頻繁に変更される部分があっても、その部分の断片のみを更新すれば対応できることとなる。したがって、ウェブページ全体のキャッシュを無効化する必要がなく、キャッシュの効率化を図ることが可能になる。
また、ウェブページの生成作業を複数のサーバ上で行い、負荷分散により実行性能を向上させる機能を持ったサーバでは、アプリケーションロジックを適切に分割して実行することにより、負荷を軽減し効率的に作業を行うことができる。
さらに、アプリケーションロジック中から共用可能な部分を抽出し、他のアプリケーションロジックにおいても使用可能とすることにより、アプリケーションロジックの開発を効率よく行うことができる。
【０００５】
上記のような効果を得るべく、アプリケーションロジックを分割する場合、従来は、アプリケーションロジックの開発者等が手作業にて分割していた。また、このアプリケーションロジックを分割する作業に利用可能な既存の技術が存在する。プログラムスライシング（例えば、非特許文献１参照）、ウェブアプリケーションスライシング（例えば、非特許文献２参照）、メソッド抽出（例えば、非特許文献３参照）等である。
【０００６】
【非特許文献１】
Ｍａｒｋ  Ｗｅｉｓｅｒ  ”Ｐｒｏｇｒａｍ  Ｓｌｉｃｉｎｇ”  ＩＥＥＥ  Ｔｒａｎｓ．  Ｓｏｆｔｗａｒｅ  Ｅｎｇｉｎｅｅｒｉｎｇ，  Ｊｕｌｙ  １９８４  ｐ．３５２−３５７．
【非特許文献２】
Ｆ．  Ｒｉｃｃａ  ａｎｄ  Ｐ．  Ｔｏｎｅｌｌａ  ”Ｗｅｂ  Ａｐｐｌｉｃａｔｉｏｎ  Ｓｌｉｃｉｎｇ”  Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｏｆｔｗａｒｅ  Ｍａｉｎｔａｎａｎｃｅ  ２００１．
【非特許文献３】
Ｋ．  Ｍａｒｕｙａｍａ  ”Ａｕｔｏｍａｔｅｄ  Ｍｅｔｈｏｄ−Ｅｘｔｒａｃｔｉｏｎ  Ｒｅｆａｃｔｏｒｉｎｇ  ｂｙ  Ｕｓｉｎｇ  Ｂｌｏｃｋ−Ｂａｓｅｄ  Ｓｌｉｃｉｎｇ”  Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２００１  ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｓｏｆｔｗａｒｅ  ｒｅｕｓａｂｉｌｉｔｙ．
【０００７】
【発明が解決しようとする課題】
上記のように、ＪＳＰやＡＳＰ等のウェブページを動的に生成するためのアプリケーションロジックを分割することにより、ウェブページの生成機構を効率的に利用することが可能となる。しかしながら、従来は、このアプリケーションロジックの分割作業をアプリケーションロジックの開発者等の手作業にて行っており、多大な手間を要していた。
【０００８】
アプリケーションロジックを分割する作業に利用可能な既存のツールは存在するが、いずれも、人手を介入せずに、アプリケーションロジックを機械的な作業のみで分割するには不十分である。
例えば、プログラム中のデータ依存と制御依存に基づいて、プログラム中の所定の文に対して影響を与える文を検出し、機械的にプログラムスライス（部分プログラム）を作成する、プログラムスライシングと呼ばれる技術がある。この技術は、プログラム中のデータ依存と制御依存を解析し、依存が存在する文の集合をプログラムスライスとして求めるものであり、プログラムをデバッグしたり運用したりする際に非常に有効である。
しかしながら、プログラムスライシングによって作成されたプログラムスライスは、それのみを正しく実行することが可能であるが、プログラムスライスを切り取った後の残された部分を正確に実行することは考慮していない。したがって、上述したＪＳＰ等のアプリケーションロジックの分割にプログラムスライシングを適用した場合、元のウェブページから所定の断片を切り取った後の残りの断片がそのままでは実行できないものである可能性があるため、人手を介してチェックし修正する必要がある。
【０００９】
また、ウェブアプリケーションにおけるテキストデータ及びサーバ側のスクリプトを含む複数のページ間の依存を解析し、所定の部分に関連するスクリプトを抽出する、ウェブアプリケーションスライシングと呼ばれる技術がある。これは、プログラムスライシングをウェブアプリケーションに応用したものである。
この場合も、プログラムスライシングと同様、分割したウェブアプリケーションを独立に実行し、その結果をマージすることを想定した技術ではない。そのため、ＪＳＰ等のアプリケーションロジックを、正しく実行できる形で自動的に分割することはできず、人手による修正を必要とする。
【００１０】
また、プログラム中の所定の部分をメソッドとして抽出し、再利用性を向上させる、メソッド抽出と呼ばれる技術がある。
しかしながら、通常のプログラムのメソッド呼び出しでは、任意のデータ型の引数を渡すこと、及び任意のデータ型の返り値を返すことが可能である。したがって、抽出して切り取られる部分と残される部分との間にデータ依存が存在しても良い。これに対し、ＪＳＰ等のアプリケーションロジックを分割する場合、任意のデータ型の引数を渡すことができないため、このメソッド抽出をそのまま適用することはできない。対応策として、一度文字列に変換し、その変換された引数を受ける側で元のデータに逆変換する手法が考えられるが、これは大きな実行オーバーヘッドを伴うため、現実的ではない。
【００１１】
そこで本発明は、サーバにおいてウェブページを動的に生成する機構を実現するアプリケーションロジックを、自動的にかつ適切に分割する手法を提供することを目的とする。
【００１２】
【課題を解決するための手段】
上記の目的を達成する本発明は、処理対象であるプログラムファイルを編集する、次のように構成されたプログラム編集装置として実現される。すなわち、このプログラム編集装置は、テキストデータ及びサーバ側のスクリプト及びロジックをカプセル化したオブジェクトへのアクセスを混在させて記述可能であり、かつサーバ側の実行プログラムに変換されるアプリケーションロジックのプログラムファイルを処理対象として格納したファイル格納部と、処理対象のプログラムファイルから分割しようとする部分を指定する分割対象指示の入力を受け付けるユーザインターフェイス制御部と、分割対象指示にて指定された部分と共に分割される随伴分割部分を決定する解析部と、分割対象指示にて指定された部分と随伴分割部分とを元のプログラムファイルから分割する分割実行部とを備えたことを特徴とする。解析部の解析により随伴分割部分を決定し、分割対象指示にて指定された部分と共に分割することにより、処理対象のプログラムファイルと分割後のプログラムファイルとが同じ動作をすることが保証される。
【００１３】
この解析部は、分割の方法として、分割前のプログラムファイルから分割によって作成される新たなプログラムファイルにコピーする部分と、当該分割前のプログラムファイルから切り取って当該新たなプログラムファイルに移動する部分とを区別する。より詳細には、プログラムファイルの所定の部分に関して、分割によって作成される新たなプログラムファイルにコピーされても分割後の各プログラムファイルによる全体的な処理の動作において副作用を持たず、かつこの所定の部分のみを元のプログラムファイルから切り取ることによって当該所定の部分以外の部分を切り取る必要が生じる場合、すなわち切り取って新たなプログラムファイルへ移動しても無意味である場合に、この所定の部分を新たなプログラムファイルにコピーする。このように、コピーできるところはコピーして分割することによって、分割後のプログラムファイルの正常な動作を保証し、かつ移動による分割部分を最小限とすることができる。
【００１４】
さらに詳細には、この解析部は、プログラムファイルの実行環境に関わらず、アプリケーションロジックの機能的な特徴に基づいて、ロジックをカプセル化したオブジェクトへのアクセスに関するデータ依存を解析する。また、この解析において、プログラムファイルの実行環境から得られるデータに関する依存関係を持つ複数の部分を分割可能と判断する。
【００１５】
また、本発明による他のプログラム編集装置は、処理対象のＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）ファイルを表示する表示手段と、この表示手段にて表示されたＪＳＰファイルに対して、分割しようとする所定の部分を指定してなされる分割対象指示を受け付ける受け付け手段と、処理対象のＪＳＰファイルに対してなされた分割対象指示に基づき、この分割対象指示にて指定された部分と共に分割すべき部分を決定する分割対象決定手段と、この分割対象決定手段にて決定された分割すべき部分を識別可能な状態で表示手段に表示させる表示制御手段とを備えることを特徴とする。
【００１６】
また上記の目的を達成する他の本発明は、コンピュータを用いて処理対象であるプログラムファイルを分割する、次のようなプログラム編集方法としても実現される。すなわち、このプログラム編集方法は、テキストデータ及びサーバ側のスクリプト及びロジックをカプセル化したオブジェクトへのアクセスを混在させて記述可能であり、かつサーバ側の実行プログラムに変換されるアプリケーションロジックのプログラムファイルを格納した所定の記憶装置から処理対象のプログラムファイルを読み出すステップと、読み出された処理対象のプログラムファイルから分割しようとする部分を指定する分割対象指示の入力を受け付けるステップと、分割対象指示にて指定された部分と共に分割される随伴分割部分を決定するステップと、分割対象指示にて指定された部分と随伴分割部分とを元のプログラムファイルから分割するステップとを含む。
【００１７】
さらに本発明は、コンピュータを制御して上述したプログラム編集方法として機能させるプログラム、またはコンピュータに上記のプログラム編集方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリその他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【００１８】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
本発明は、インターネット等のネットワーク上で機能するウェブベースのサーバにおいて、ウェブページを動的に生成する機構を実現するアプリケーションロジック一般に対して、当該アプリケーションロジックを自動分割するために適用できるものであるが、本実施の形態ではＪＳＰにて実現する場合を例として具体的に説明する。
【００１９】
図１は、本実施の形態によるデータ処理方法を実現するコンピュータ装置の構成例を示す図である。
図１に示すコンピュータ装置は、プログラム制御により種々のデータ処理を行うＣＰＵ１００と、ＣＰＵ１００の処理を制御するプログラム及びＣＰＵ１００にて処理されるデータを格納するメインメモリ２００と、各種のコマンドやデータを入力するための入力デバイス３００と、ＣＰＵ１００による処理結果を表示出力する表示装置４００とを備える。
【００２０】
図２は、図１に示したコンピュータ装置にて本実施の形態によるＪＳＰ（アプリケーションロジック）の分割処理を行うデータ処理システムの機能構成を示す図である。
図２を参照すると、本実施の形態によるデータ処理システムは、ユーザによる命令の入力を受け付けるためのユーザインターフェイス制御部１０と、ユーザインターフェイス制御部１０を介して受け付けた分割対象指示に基づき、ＪＳＰのファイルの分割を実行するＪＳＰ解析部２０及び分割実行部３０と、処理対象であるＪＳＰのファイルを格納するファイル格納部４０と、システム全体の動作を制御する制御部５０とを備える。
【００２１】
上記構成において、ユーザインターフェイス制御部１０、分割実行部３０、ＪＳＰ解析部２０及び制御部５０は、例えば図１に示したコンピュータ装置におけるプログラム制御されたＣＰＵ１００にて実現される仮想的なソフトウェアブロックである。ＣＰＵ１００を制御するプログラムは、磁気ディスクや光ディスク、半導体メモリ等の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供される。図１に示す構成では、このプログラムがメインメモリ２００に読み込まれて、ＣＰＵ１００を制御する。また、ファイル格納部４０は、メインメモリ２００にて実現される。なお、メインメモリ２００に格納される上記のプログラム及びＪＳＰファイルは、必要に応じて、適宜磁気ディスクその他の外部記録装置に退避されることは言うまでもない。
【００２２】
本実施の形態におけるユーザインターフェイス制御部１０は、処理対象であるＪＳＰファイルを表示装置４００に表示させ、ユーザがキーボードやマウス等の入力デバイス３００を用いて入力したＪＳＰファイルに関する分割対象指示及び分割実行命令を受け付けてＪＳＰ解析部２０に渡す受け付け手段としての機能を持つ。また、ＪＳＰ解析部２０の解析により決定される分割予定箇所を明示したＪＳＰファイルや分割実行部３０による処理を経て分割されたＪＳＰファイルを表示装置４００に表示させる表示制御手段としての機能を持つ。分割対象指示は、ＪＳＰファイルに記述された操作のうち、ユーザが分割したいと考える操作（ＪＳＰファイルの部分）を指定することによって行う。この操作については、後で具体例を挙げて説明する。
【００２３】
ＪＳＰ解析部２０は、処理対象のＪＳＰファイルにおける依存関係の解析を行う。そして、ユーザインターフェイス制御部１０を介して入力された分割対象指示に応じて、当該分割対象指示にかかる操作と一緒に分割すべき操作（ＪＳＰファイルの部分、随伴分割部分）を決定する分割対象決定手段としての機能を持つ。ここで、ＪＳＰ解析部２０による解析は、ＪＳＰの仕様、すなわち、テキストファイルの内部にスクリプトで処理を記述したこの種のアプリケーションロジックの機能的な特徴を利用して行われる。ＪＳＰ解析部２０による処理の詳細については後述する。
【００２４】
分割実行部３０は、ユーザインターフェイス制御部１０を介して入力された分割実行命令に基づき、ＪＳＰ解析部２０の解析結果にしたがって、処理対象のＪＳＰファイルの分割を実行する。ＪＳＰファイルの分割は、元のＪＳＰファイルから切り取った部分を他の新たなＪＳＰファイルとして保存し、元の（切り取られた残りの）ＪＳＰファイルから＜ｊｓｐ：ｉｎｃｌｕｄｅ  …／＞で当該新たなＪＳＰファイルを取り込むことにより行われる。元のＪＳＰファイルが実行されると、＜ｊｓｐ：ｉｎｃｌｕｄｅ  …／＞タグで指定されたＪＳＰファイルが呼び出され、異なるサーブレットとして実行される。その実行結果は、元のＪＳＰファイルへ返され、元のＪＳＰの実行結果とマージされて、１つのウェブページとなる。
【００２５】
ファイル格納部４０は、本実施の形態による分割処理の対象であるＪＳＰファイル、及び本実施の形態により分割されたＪＳＰファイルを格納する。実際には、サーバがウェブページの自動生成を行うために用いるＪＳＰファイルを格納した当該サーバの記憶手段と同一としても良い。この場合、当該記憶手段に格納されたＪＳＰファイルの中から、適宜、分割処理の対象として選択されたＪＳＰファイルが読み出されて分割され、戻されることとなる。
【００２６】
制御部５０は、上記の各機能による動作を制御し、ファイル格納部４０におけるＪＳＰファイルの入出力を管理する。例えば、ファイル格納部４０からＪＳＰファイルを読み出して各処理のためにユーザインターフェイス制御部１０や分割実行部３０に渡したり、分割実行部３０にて分割されたＪＳＰファイルをファイル格納部４０に格納したりする。制御部５０の機能は、本実施の形態のデータ処理システムを実現するコンピュータ装置に搭載されたオペレーティングシステム（ＵＮＩＸや米国マイクロソフト社のウィンドウズ等）の機能として提供することができる。
【００２７】
次に、本実施の形態によるＪＳＰファイルの分割処理について、詳細に説明する。
ＪＳＰファイルを分割する場合、分割後のＪＳＰファイルの総和において分割前のＪＳＰファイルと同じ動作をすることが保証される必要がある。したがって、分割された当該操作を含む動作が正常に行われて分割前の動作と同じ動作を構成するために、ユーザの分割対象指示により指定されたＪＳＰファイルの操作に加えて、当該操作が依存する他の操作や当該操作に依存する他の操作を分割しなければならない。
【００２８】
ＪＳＰファイルは、実行時にサーブレットプログラムに変換されるため、そのプログラムにおけるデータ依存と制御依存とを壊さないように分割すれば、分割前と同じ動作をするように分割することが可能である。そこで、ＪＳＰファイルから得られるサーブレットプログラム中のデータ依存と制御依存とを解析し、これらが存在する部分を分割不可能と判断してＪＳＰファイルの分割を行うことにより、分割前後でプログラムが同じ動作をすることを保証できると考えられる。しかし、サーブレットプログラム中のデータ依存と制御依存とを解析するためには、サーブレットプログラムを実行するランタイムエンジン（サーブレットエンジン）の仕様等も考慮しなければならず、多大な手間を要するので現実的ではない。
【００２９】
また、単純にデータ依存と制御依存が存在する箇所を分割不可能と判断すると、次に挙げる２つの理由により、ＪＳＰの仕様に基づきＪＳＰファイルとしては分割可能な箇所でありながら、分割不可能と判断してしまう場合がある。
【００３０】
１．分割後も同様に利用可能な変数を考慮しない。
ＪＳＰファイルから変換されたサーブレットプログラムを分割することを考えた場合、分割後も分割前と同様に利用可能な変数が存在する。変数が、サーバ側の実行環境から得られるデータである場合である。例えば、あるサーブレットプログラムにおいて、ウェブページのテキストデータの出力先として使用されるＩ／Ｏのための変数は、分割されたサーブレットプログラムから同様に利用可能である。
図３は、ウェブページのテキストデータを出力するサーブレットプログラムの部分の例を示す図である。
図３に示すプログラムにおいて、データ依存を壊さないように文１０を分割しようとすると、変数ｏｕｔに関するデータ依存のために、文５、６、１０が分割不可能と判断されてしまう。しかし、変数ｏｕｔは、分割した全てのサーブレットプログラムから利用可能であり、実際にこれらの文を分割しても問題はない。
【００３１】
２．Ｊａｖａ  Ｂｅａｎｓのスコープと分割後の実行条件を考慮しない。
ＪＳＰファイル中でデータの保存を行う際、Ｊａｖａ  Ｂｅａｎｓと呼ばれるＪＳＰの機能を実現するオブジェクト（プログラム部品）が頻繁に利用される。Ｊａｖａ  Ｂｅａｎｓは、次に具体的に示すように、ＪＳＰファイル中で次のタグ言語を用いることにより操作可能である。
・ｊｓｐ：ｕｓｅＢｅａｎタグ：Ｊａｖａ  Ｂｅａｎｓを名前を付けて宣言。もし、このＪａｖａ  Ｂｅａｎｓのオブジェクトが存在しない場合は作成する。Ｊａｖａ  Ｂｅａｎｓは、Ｊａｖａのクラスとして定義される。
・ｊｓｐ：ｓｅｔＰｒｏｐｅｒｔｙタグ：Ｊａｖａ  Ｂｅａｎｓオブジェクトへ値を定義する。実際には、オブジェクトのｓｅｔｔｅｒメソッド（ｓｅｔプロパティ名）が呼び出される。
・ｊｓｐ：ｇｅｔＰｒｏｐｅｒｔｙタグ：Ｊａｖａ  Ｂｅａｎｓオブジェクトから値を取り出す。実際には、オブジェクトのｇｅｔｔｅｒメソッド（ｇｅｔプロパティ名）が呼び出される。
【００３２】
ｊｓｐ：ｕｓｅＢｅａｎタグでＪａｖａ  Ｂｅａｎｓを宣言する際、生存期間を表すスコープを明示的に指定することができる。Ｊａｖａ  Ｂｅａｎｓに与えることが可能な４種類のスコープを示す。
（１）アプリケーション（Ａｐｐｌｉｃａｔｉｏｎ）スコープ：１つのサーブレットコンテナ（１つの仮想マシン（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）上で稼動しているサーブレットコンテナ）で生存する。
（２）セッション（Ｓｅｓｓｉｏｎ）スコープ：１つのセッションで生存する。
（３）リクエスト（Ｒｅｑｕｅｓｔ）スコープ：１つのリクエストで生存する。
（４）ページ（Ｐａｇｅ）スコープ：１つのＪＳＰ中で生存する。
【００３３】
Ｊａｖａ  Ｂｅａｎｓにおけるデータの保存とデータの取得との関係は、変数の定義と使用との関係と同様であり、ＪＳＰファイル中にはＪａｖａ  Ｂｅａｎｓに関するデータ依存関係、すなわち、ロジックをカプセル化したオブジェクトへのアクセスに関するデータ依存関係が存在する。また、Ｊａｖａ  Ｂｅａｎｓへデータの保存、取得を行う前には、必ずＪａｖａ  Ｂｅａｎｓを宣言して、もし必要ならそのオブジェクトを作成する必要がある。
データ依存を壊さないようにＪＳＰファイルを分割しようとする場合、このようなＪａｖａ  Ｂｅａｎｓに関するデータ依存があると、分割不可能と判断される。しかし、Ｊａｖａ  Ｂｅａｎｓに与えられるスコープと分割後の実行条件を考慮すれば、Ｊａｖａ  Ｂｅａｎｓに関するデータ依存関係があっても分割可能である場合がある。例えば、アプリケーションスコープのＪａｖａ  Ｂｅａｎｓの場合、分割後のＪＳＰファイルが１つのサーブレットコンテナ上で実行されているならば、分割されたＪＳＰファイルの全てに渡ってＪａｖａ  Ｂｅａｎｓが生存しているため、分割しても正常に動作可能である。
【００３４】
本実施の形態では、これらに対応するため、分割実行部３０によるＪＳＰファイルの分割処理に先だって、ＪＳＰ解析部２０により処理対象のＪＳＰファイルのＪａｖａ  Ｂｅａｎｓに関する依存関係を個別に解析する。そして、この解析結果に基づき、コピー可能な操作をコピーによって分割する。この解析により、分割対象指示に応じて元のＪＳＰファイルから分割すべき箇所を適切に判断し自動的に分割することが可能となり、かつ分割後の各ＪＳＰファイルが正常に動作することが保証される。また、コピー可能な操作をコピーによって分割することにより、分割によって新たに生成されるＪＳＰファイルに移動する部分を最小限にすることができる。
また、ＪＳＰ解析部２０による解析は、ランタイムエンジンに関わらず、ＪＳＰを含むこの種のアプリケーションロジックの機能的な特徴を利用して行う。すなわち、Ｊａｖａ  Ｂｅａｎｓに関する依存関係やスコープの種類に基づいて解析を行うことにより、多大なオーバーヘッドを生じさせないようにする。
【００３５】
ＪＳＰ解析部２０の処理を具体的に説明する。
１．サーバ側の実行環境から得られるデータに関する依存の除去。
すなわち、分割後のＪＳＰファイルから同様に利用可能な変数に関する依存を除去する。
図４は、分割後も各ＪＳＰファイルから共通して参照可能な変数（オブジェクト）の一覧を示す図表である。
図４に示した各変数（＃ｊｓｐｘＦａｃｔｏｒｙ、ｐａｇｅＣｏｎｔｅｘｔ、ｓｅｓｓｉｏｎ、ａｐｐｌｉｃａｔｉｏｎ、ｃｏｎｆｉｇ、ｏｕｔ）、あるいはそのクラス（ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｊｓｐ．ＪｓｐＦａｃｔｏｒｙ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｊｓｐ．ＰａｇｅＣｏｎｔｅｘｔ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｈｔｔｐ．ＨｔｔｐＳｅｓｓｉｏｎ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ＳｅｒｖｌｅｔＣｏｎｔｅｘｔ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ＳｅｒｖｌｅｔＣｏｎｆｉｇ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｊｓｐ．ＪｓｐＷｒｉｔｅｒ）は、サーブレットコンテナから得ることが可能であり、そのメソッドは副作用（分割後に動作をしないあるいは正常でない動作をする等の作用）を持たない。そのため、ＪＳＰファイルにおいて、これらの変数に関してデータ依存がある箇所を分割しても、分割前と同じ動作をすることが保証される。したがって、ＪＳＰ解析部２０は、処理対象のＪＳＰファイルから生成されたサーブレットプログラム中に、図４に示した変数に関するデータ依存が存在しても、当該依存関係を無視して分割可能と判断し、この判断結果を後述の解析処理に反映させる。図４に示すテーブルは、例えば図１に示したメインメモリ２００に保持され、分割実行部３０に参照される。
なお、このような情報は、サーブレットコンテナのソースプログラムを詳細に解析することにより得られる。しかし、上記のようにテーブルを作成しておき、機械的に判断を行うことによって、そのような解析に要する手間を省き、効率良く処理を行うことができる。
【００３６】
２．ロジックをカプセル化したオブジェクトへのアクセスに関するデータ依存の解析。
ＪＳＰ解析部２０は、ロジックをカプセル化したオブジェクトへのアクセスに関するデータ依存、すなわちＪａｖａ  Ｂｅａｎｓに関するデータ依存を解析し、分割可否を個別的に判断する。そして、分割後のＪＳＰファイルの総体が分割前のＪＳＰファイルと同一の動作を正常に行うように、ＪＳＰファイルにおける分割対象を定義する。以下、この動作を、図５乃至図８のフローチャートを参照して詳細に説明する。なお、以下の説明において、元のＪＳＰファイルとは分割前のＪＳＰファイル及び分割対象指示に基づいて所定の操作を切り取られた後の残りのＪＳＰファイルを指し、分割先のＪＳＰファイルとは元のＪＳＰファイルから切り取った新たなＪＳＰファイルを指すものとする。また、ＪＳＰファイル中の操作を分割する動作のうち、元のＪＳＰファイルから所定の操作を複製して分割先のＪＳＰファイルに含める動作を、操作をコピーすると言い、元のＪＳＰファイルから所定の操作を切り取って分割先のＪＳＰファイルに含める動作を、操作を移動すると言う。
【００３７】
図５は、ＪＳＰ解析部２０による解析処理の全体的な流れを説明するフローチャートである。
図５に示すように、ＪＳＰ解析部２０は、まず制御部５０を介して処理対象のＪＳＰファイルを読み込み、ユーザインターフェイス制御部１０を介して入力された分割対象指示に基づき、元のＪＳＰファイルから分割しようとする操作の集合［ＳＥＬ］を取得する（ステップ５０１）。そして、集合［ＳＥＬ］の中で、元のＪＳＰファイルから分割先のＪＳＰファイルへコピー可能な操作を選択し、これを集合［ＳＥＬ］から削除する（ステップ５０２）。ここで、コピー可能な操作とは、次の２つである。
・Ｊａｖａ  Ｂｅａｎｓの宣言
・ページスコープのＪａｖａ  Ｂｅａｎｓへの値の定義
これらの操作は、分割先のＪＳＰファイルにコピーしても分割後の各ＪＳＰファイルによる全体的な処理の動作において副作用を持たず、かつこれらの部分に依存する部分を一緒に切り取られなければ、分割後の全体の動作に影響を与えないため、以下の解析における対象から除外する。コピーすると決定した部分に関係する（依存する）部分が切り取られない場合、コピーされた部分は副作用を起こさない（全体の実行に影響を与えない）ため、コピーしても無意味であるためである。もし、ここで除外された操作が、分割先のＪＳＰファイルに切り取られる部分に必要である場合、後の解析によりコピーする部分として判断されるため、分割後の動作は正しく保証される。
次に、ＪＳＰ解析部２０は、集合［ＳＥＬ］に含まれる操作に対して順次、これらの操作と一緒に分割すべき操作を探索する分割操作解析を行う（ステップ５０３、５０４、５０５）。
【００３８】
図６は、図５のステップ５０５に示した分割操作解析の詳細動作を説明するフローチャートである。
図６に示すように、ＪＳＰ解析部２０は、まず、元のＪＳＰファイルから分割先のＪＳＰファイルへ移動する操作の集合［ＭＯＶＥ］と、元のＪＳＰファイルから分割先のＪＳＰファイルへコピーする操作の集合［ＣＯＰＹ］とを定義する（ステップ６０１）。そして、集合［ＳＥＬ］の中からＪａｖａ  Ｂｅａｎｓへの操作Ｓを１つずつ選択し、集合［ＭＯＶＥ］に入れる（ステップ６０２）。
次に、ＪＳＰ解析部２０は、元のＪＳＰファイルに記述されている操作のうちで、操作Ｓが依存する他の操作であって、かつ集合［ＳＥＬ］、［ＭＯＶＥ］、［ＣＯＰＹ］のいずれにも含まれない操作Ｄを抽出し、これを集めた集合［ＤＥＰ］を定義し（ステップ６０３）、この集合［ＤＥＰ］に含まれる各操作に関して後ろ向き依存解析を行う（ステップ６０４）。
さらに、ＪＳＰ解析部２０は、元のＪＳＰファイルに記述されている操作のうちで、操作Ｓに依存する他の操作であって、かつ集合［ＳＥＬ］、［ＭＯＶＥ］、［ＣＯＰＹ］のいずれにも含まれない操作Ｄ’を抽出し、これを集めた集合［ＤＥＰ’］を定義し（ステップ６０５）、この集合［ＤＥＰ’］に含まれる各操作に関して前向き依存解析を行う（ステップ６０６）。
【００３９】
図７は、図６のステップ６０４に示した後ろ向き依存解析の詳細動作を説明するフローチャートである。
図７に示すように、集合［ＤＥＰ］の中から操作Ｄを１つずつ順次選択し、次の判断及び処理を実行する（ステップ７０１、７０２）。
ＪＳＰ解析部２０は、選択された操作Ｄに関して、まず、操作Ｄの実行結果がＪＳＰファイルの分割後も操作Ｓに伝播するか否かを判断する（ステップ７０３）。所定の操作の実行結果がＪＳＰファイルの分割後に他の操作に伝播する条件は、次の２つである。
・操作対象のＪａｖａ  ＢｅａｎｓのスコープがＡｐｐｌｉｃａｔｉｏｎ、Ｓｅｓｓｉｏｎ、Ｒｅｑｕｅｓｔである。
・分割後のＪＳＰが同一のサーブレットエンジンで実行される。
【００４０】
着目する操作Ｄの実行結果がＪＳＰファイルの分割後に操作Ｓに伝播するならば、当該操作Ｄを操作Ｓと一緒に分割する必要はないので、ステップ７０１に戻り、未処理の次の操作Ｄに着目する。
一方、着目する操作Ｄの実行結果がＪＳＰファイルの分割後に操作Ｓに伝播しない場合、次にＪＳＰ解析部２０は、操作Ｄに依存し、かつ集合［ＳＥＬ］もしくは集合［ＭＯＶＥ］に含まれない操作が存在するか否かを判断する（ステップ７０４）。そのような操作が、存在しなければ、操作Ｄは操作Ｓのみに必要な操作であるため、当該操作Ｄを操作Ｓと一緒に移動する操作と決定する。移動することが決定した操作Ｄに対しては、改めて分割操作解析（図６参照）を適用する（ステップ７０５）。
【００４１】
これに対し、操作Ｄに依存し、かつ集合［ＳＥＬ］もしくは集合［ＭＯＶＥ］に含まれない操作が存在する場合、次にＪＳＰ解析部２０は、操作Ｄがコピー可能か否かを判定する（ステップ７０６）。コピー可能である場合、操作Ｄをコピーする操作と決定して集合［ＣＯＰＹ］に入れ（ステップ７０７）、当該操作Ｄが依存する他の操作を新たに操作Ｄとして集合［ＤＥＰ］に入れ（ステップ７０８）、後ろ向き依存解析を再帰的に適用する（ステップ７０９）。
着目する操作Ｄがコピー不可能である場合、ＪＳＰ解析部２０は、当該操作Ｄを操作Ｓと一緒に移動する操作と決定し、当該操作Ｄに対して分割操作解析（図６参照）を適用する（ステップ７０５）。
【００４２】
以上の処理が、集合［ＤＥＰ］中の全ての操作（ステップ７０８により追加された操作を含む）に対して行われたならば、後ろ向き依存解析を終了する（ステップ７０１）。
なお、コピーする操作に対して後ろ向き依存解析を適用すると、コピーする操作に依存する操作は全てコピーする操作となる。これは、コピー可能な操作の特徴（副作用を持たず、それのみを移動しても無意味）から明らかである。例えば、Ｊａｖａ  Ｂｅａｎｓの宣言には依存する操作が存在しない。そして、Ｊａｖａ  Ｂｅａｎｓへの定義の操作が依存する操作は、Ｊａｖａ  Ｂｅａｎｓの宣言のみであるため、分割先のＪＳＰファイルへコピー可能である。
【００４３】
図８は、図６のステップ６０４に示した前向き依存解析の詳細動作を説明するフローチャートである。
図８に示すように、集合［ＤＥＰ’］の中から操作Ｄ’を１つずつ順次選択し、次の判断及び処理を実行する（ステップ８０１、８０２）。
ＪＳＰ解析部２０は、選択された操作Ｄ’に関して、まず、操作Ｓの実行結果がＪＳＰファイルの分割後も操作Ｄ’に伝播するか否かを判断する（ステップ８０３）。操作Ｓの実行結果が操作Ｄ’に伝播するならば、当該操作Ｄ’を操作Ｓと一緒に分割する必要はないので、当該操作Ｄ’に関して移動もコピーも行わずステップ８０１に戻り、未処理の次の操作Ｄ’に着目する。
【００４４】
一方、着目する操作Ｄ’に関して、操作Ｓの実行結果がＪＳＰファイルの分割後に操作Ｄ’に伝播しない場合、次にＪＳＰ解析部２０は、操作Ｄ’が集合［ＳＥＬ］、［ＭＯＶＥ］のいずれにも含まれない所定の操作に依存する、もしくは操作Ｄ’に依存する他の操作が存在するかを判断する（ステップ８０４）。操作Ｄ’が依存する全ての操作が分割先のＪＳＰファイルに移動されることが決定されており、かつ操作Ｄ’に依存する他の操作が存在しない場合は、当該操作Ｄ’を操作Ｓと一緒に移動する操作と決定する。そして、この操作Ｄ’を集合［ＭＯＶＥ］に入れる（ステップ８０５）。
【００４５】
着目する操作Ｄ’が、集合［ＳＥＬ］、［ＭＯＶＥ］のいずれにも含まれない所定の操作に依存するか、または当該操作Ｄ’に依存する他の操作が存在する場合、次にＪＳＰ解析部２０は、操作Ｄ’がコピー可能か否かを判定する（ステップ８０６）。コピー可能である場合、操作Ｄ’をコピーする操作と決定して集合［ＣＯＰＹ］に入れ（ステップ８０７）、当該操作Ｄ’が依存する他の操作を新たに操作Ｄ’として集合［ＤＥＰ］に入れ（ステップ８０８）、後ろ向き依存解析（図７参照）を適用する（ステップ８０９）。
着目する操作Ｄ’がコピー不可能である場合、ＪＳＰ解析部２０は、当該操作Ｄ’を操作Ｓと一緒に移動する操作と決定し、当該操作Ｄ’に対して分割操作解析（図６参照）を適用する（ステップ８１０）。
以上の処理が、集合［ＤＥＰ］中の全ての操作（ステップ７０８により追加された操作を含む）に対して行われたならば、後ろ向き依存解析を終了する（ステップ８０１）。
【００４６】
次に、ＪＳＰファイルとこれにより生成されるウェブページの具体例を挙げて、本実施の形態の作用を説明する。
図９はＪＳＰファイルの一例を示す図、図１０は図９のＪＳＰファイルから生成されるウェブページの例を示す図である。また、図１１及び図１２は、図９のＪＳＰファイルに対して分割しようとする操作を指定した場合に、一緒に分割される操作を示す図である。
図１１において、ＪＳＰファイルの記述のうち、実線で囲まれた操作１１０１は、ユーザにより分割するべく選択された（分割対象指示にかかる）部分である。ユーザは、ユーザインターフェイス制御部１０の制御によって表示装置４００に表示された当該ＪＳＰファイルに対し、マウス等の入力デバイス３００を使用して操作１１０１の部分を指定することにより分割対象指示を行う。
【００４７】
この選択された操作１１０１は、破線で囲まれた操作１１０２と一点鎖線で囲まれた操作１１０３とに依存している。したがって、本実施の形態におけるＪＳＰ解析部２０の解析処理の結果、操作１１０２、１１０３は、操作１１０１、１１０２を分割するのに伴って、一緒に分割すると判断される。このうち、操作１１０２（Ｊａｖａ  Ｂｅａｎｓの宣言、ページスコープのＪａｖａ  Ｂｅａｎｓへの値の定義）は、当該ＪＳＰファイルにおける他の部分にも依存し、かつコピー可能であるため、分割先のＪＳＰファイルにコピーされる部分である。一方、操作１１０３は、操作１１０１と共に分割先のＪＳＰファイルに移動される部分である。
ユーザインターフェイス制御部１０は、ＪＳＰ解析部２０の判断結果に基づいて、操作１１０１と一緒に分割される操作１１０２、１１０３を視覚的に識別できるように表示することができる。例えば、コピーされる操作１１０２の表示色を赤色とし、移動される操作１１０３の表示色を青色とする等である。このようにすれば、ユーザは、実際に分割を実行する前に、ＪＳＰファイルのどの部分がどのように分割するかを予め認識することができる。この後、ユーザがキーボード等の入力デバイス３００を使用して分割実行命令を入力することにより、分割実行部３０が実際にＪＳＰファイルの分割を行う。
【００４８】
図１２において、実線で囲まれた操作１２０１は、ユーザにより分割するべく選択された（分割対象指示にかかる）部分である。また、破線で囲まれた操作１２０２は、図１１における操作１１０２と同様に、操作１２０１と共に分割され、分割先のＪＳＰファイルにコピーされる部分である。一点鎖線で囲まれた操作１２０３は、図１１における操作１１０３と同様に、操作１２０１と共に分割先のＪＳＰファイルに移動される部分である。ここで、操作１２０２は、図１１に示した操作１１０２と同一の部分であるが、操作１２０３と図１１に示した操作１１０３の両方に依存しているため、コピーすると判断されている。
【００４９】
図１３は、図１２のようになされた分割対象指示に基づいて実際にＪＳＰファイルの分割を行った様子を示す図である。
元のＪＳＰファイル（図９に示したＪＳＰファイル）ｍａｉｎ．ｊｓｐは、分割された残りの部分（図１３（Ａ））と、分割先のＪＳＰファイルｓｐｌｉｔ１．ｊｓｐ（図１３（Ｂ））とに分割される。図１３（Ａ）に示すＪＳＰファイルｍａｉｎ．ｊｓｐには、ＪＳＰファイルｓｐｌｉｔ１．ｊｓｐを呼び出す操作＜ｊｓｐ：ｉｎｃｌｕｄｅ  ｓｒｃ＝”ｓｐｌｉｔ１．ｊｓｐ”／＞が挿入されている。したがって、ＪＳＰファイルｍａｉｎ．ｊｓｐを実行すれば、その実行の中でＪＳＰファイルｓｐｌｉｔ１．ｊｓｐも実行され、図１０に示したウェブページと同一のウェブページが得られる。
一方、ＪＳＰファイルｓｐｌｉｔ１．ｊｓｐも独立して実行可能なＪＳＰファイルとなっている。図１４は、ＪＳＰファイルｓｐｌｉｔ１．ｊｓｐを単独で実行した場合に生成されるウェブページの例を示す図である。
【００５０】
さて、図９に示したＪＳＰファイルを図１３に示したように分割した後、さらにＪＳＰファイルｍａｉｎ．ｊｓｐに対し、図１１に示したと同様の分割対象指示を行った場合を考える。
図１５は、この場合のＪＳＰファイルの表示例を示す図である。
図１５において、実線で囲まれた操作１５０１は、ユーザにより分割するべく選択された（分割対象指示にかかる）部分であり、図１１における操作１１０１と同一である。一点鎖線で囲まれた操作１５０２、１５０３は、操作１５０１の分割に伴って分割される部分であり、図１１における操作１１０２、１１０３に対応している。ただし、操作１５０２は、操作１１０２と異なり、分割先のＪＳＰファイルにコピーされるのではなく、移動される部分となっている。これは、図１１の時点では、図１２を参照して説明したように、操作１１０２（＝操作１２０２）が操作１２０３の部分にも依存していたためにコピーされる部分と判断されたのに対し、図１５の時点では、図１２の操作１２０３の部分がＪＳＰファイルｓｐｌｉｔ１．ｊｓｐに移動してしまい、ＪＳＰファイルｍａｉｎ．ｊｓｐは存在しないので、操作１５０１と共に移動可能であるためである。
【００５１】
以上のように、本実施の形態では、ＪＳＰファイルにおける依存関係やスコープを個別的に解析し、コピー可能な部分をコピーにて分割することにより、分割前後で同一の動作をすることを保証し、かつ分割によって新たに生成されるＪＳＰファイルに移動する部分を最小限にすることができる。これにより、ＪＳＰファイルを自動的にかつ適切に分割することが可能となる。
また、本実施の形態によるＪＳＰファイルの解析は、ランタイムエンジンに関わらず、ＪＳＰの機能的な特徴に基づいて行われるため、大きなオーバーヘッドが発生することもない。
さらに、上記の実施の形態では、サーバにおけるウェブページの自動生成機構をＪＳＰで実現する場合を例として説明したが、ＡＳＰ、その他の同種のアプリケーションロジックも、同種の機能的特徴を備えることから、同様の解析及び判断を行い、ファイルを自動的かつ適切に分割できることは言うまでもない。
【００５２】
【発明の効果】
以上説明したように、本発明によれば、サーバにおいてウェブページを動的に生成する機構を実現するアプリケーションロジックを、自動的にかつ適切に分割することが可能となり、かかる処理における作業効率を大幅に向上させることができる。
【図面の簡単な説明】
【図１】本実施の形態によるデータ処理方法を実現するコンピュータ装置の構成例を示す図である。
【図２】本実施の形態によるＪＳＰの分割処理を行うデータ処理システムの機能構成を示す図である。
【図３】ウェブページのテキストデータを出力するサーブレットプログラムの部分の例を示す図である。
【図４】本実施の形態において用いられる分割後も各ＪＳＰファイルから共通して参照可能な変数の一覧を示す図表である。
【図５】本実施の形態におけるＪＳＰ解析部による解析処理の全体的な流れを説明するフローチャートである。
【図６】図５に示した分割操作解析の詳細動作を説明するフローチャートである。
【図７】図６に示した後ろ向き依存解析の詳細動作を説明するフローチャートである。
【図８】図６に示した前向き依存解析の詳細動作を説明するフローチャートである。
【図９】ＪＳＰファイルの一例を示す図である。
【図１０】図９のＪＳＰファイルから生成されるウェブページの例を示す図である。
【図１１】図９のＪＳＰファイルに対して分割対象指示を行った場合におけるＪＳＰファイルを示す図である。
【図１２】図９のＪＳＰファイルに対して他の分割対象指示を行った場合におけるＪＳＰファイルを示す図である。
【図１３】図１２のようになされた分割対象指示に基づいて実際にＪＳＰファイルの分割を行った様子を示す図である。
【図１４】ＪＳＰファイルｓｐｌｉｔ１．ｊｓｐを単独で実行した場合に生成されるウェブページの例を示す図である。
【図１５】図１３のＪＳＰファイルｍａｉｎ．ｊｓｐに対し、さらに分割対象指示を行った場合におけるＪＳＰファイルを示す図である。
【符号の説明】
１０…ユーザインターフェイス制御部、２０…ＪＳＰ解析部、３０…分割実行部、４０…ファイル格納部、５０…制御部、１００…ＣＰＵ、２００…メインメモリ、３００…入力デバイス、４００…表示装置
【図１】
2004213220.tif 000003
【図２】
2004213220.tif 000004
【図３】
2004213220.tif 000005
【図４】
2004213220.tif 000006
【図５】
2004213220.tif 000007
【図６】
2004213220.tif 000008
【図７】
2004213220.tif 000009
【図８】
2004213220.tif 000010
【図９】
2004213220.tif 000011
【図１０】
2004213220.tif 000012
【図１１】
2004213220.tif 000013
【図１２】
2004213220.tif 000014
【図１３】
2004213220.tif 000015
【図１４】
2004213220.tif 000016
【図１５】
2004213220.tif 000017
【手続補正書】
【提出日】平成14年12月27日(2002.12.27)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３５
【補正方法】変更
【補正の内容】
【００３５】
ＪＳＰ解析部２０の処理を具体的に説明する。
１．サーバ側の実行環境から得られるデータに関する依存の除去。
すなわち、分割後のＪＳＰファイルから同様に利用可能な変数に関する依存を除去する。
図４は、分割後も各ＪＳＰファイルから共通して参照可能な変数（オブジェクト）の一覧を示す図表である。
図４に示した各変数（＿ｊｓｐｘＦａｃｔｏｒｙ、ｐａｇｅＣｏｎｔｅｘｔ、ｓｅｓｓｉｏｎ、ａｐｐｌｉｃａｔｉｏｎ、ｃｏｎｆｉｇ、ｏｕｔ）、あるいはそのクラス（ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｊｓｐ．ＪｓｐＦａｃｔｏｒｙ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｊｓｐ．ＰａｇｅＣｏｎｔｅｘｔ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｈｔｔｐ．ＨｔｔｐＳｅｓｓｉｏｎ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ＳｅｒｖｌｅｔＣｏｎｔｅｘｔ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ＳｅｒｖｌｅｔＣｏｎｆｉｇ、ｊａｖａｘ．ｓｅｒｖｌｅｔ．ｊｓｐ．ＪｓｐＷｒｉｔｅｒ）は、サーブレットコンテナから得ることが可能であり、そのメソッドは副作用（分割後に動作をしないあるいは正常でない動作をする等の作用）を持たない。そのため、ＪＳＰファイルにおいて、これらの変数に関してデータ依存がある箇所を分割しても、分割前と同じ動作をすることが保証される。したがって、ＪＳＰ解析部２０は、処理対象のＪＳＰファイルから生成されたサーブレットプログラム中に、図４に示した変数に関するデータ依存が存在しても、当該依存関係を無視して分割可能と判断し、この判断結果を後述の解析処理に反映させる。図４に示すテーブルは、例えば図１に示したメインメモリ２００に保持され、分割実行部３０に参照される。
なお、このような情報は、サーブレットコンテナのソースプログラムを詳細に解析することにより得られる。しかし、上記のようにテーブルを作成しておき、機械的に判断を行うことによって、そのような解析に要する手間を省き、効率良く処理を行うことができる。