(57)【要約】【課題】効率的なシステム開発を支援する。【解決手段】データアクセス部品生成手段１ａは、データベース２に格納されたテーブル２ａ，２ｂ，２ｃの情報に基づいて、各テーブルそれぞれについて所定の操作を行うためのデータアクセス部品４ａ，４ｂ，４ｃを生成する。共通部品記憶手段１ｂは、所定の操作に伴って実行させる各データアクセス部品の間で共通の処理を定義した共通部品４ｄを記憶する。登録情報生成手段１ｃは、データアクセス部品生成手段１ａが生成した各データアクセス部品をプログラム実行環境４に登録するための情報と、共通部品記憶手段１ｂに記憶された共通部品４ｄで定義された処理が各データアクセス部品による所定の操作の際にプログラム実行環境４上で実行されるようにするための情報とを含む登録情報３を生成する。【選択図】図１
2010079803.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
データベースに格納された複数のテーブルの情報に基づいて、前記複数のテーブルそれぞれについて、アクセス要求を受け付けて当該テーブルに対し所定の操作を行うプログラム部品であるデータアクセス部品を生成するデータアクセス部品生成手段、
前記所定の操作に伴って実行させる複数の前記データアクセス部品の間で共通の処理を定義した共通部品を記憶する共通部品記憶手段、
前記データアクセス部品生成手段が生成した前記データアクセス部品をプログラム実行環境に登録するための情報と、前記共通部品記憶手段に記憶された前記共通部品で定義された処理が前記データアクセス部品による前記所定の操作の際に前記プログラム実行環境上で実行されるようにするための情報とを含む登録情報を生成する登録情報生成手段、
として機能させることを特徴とするソフトウェア開発支援プログラム。
【請求項２】
前記コンピュータを、更に、データ型をパラメタ化して前記所定の操作を定義した汎用データアクセス部品を記憶する汎用部品記憶手段として機能させ、
前記データアクセス部品生成手段が生成する前記データアクセス部品は、前記汎用部品記憶手段に記憶された前記汎用データアクセス部品を、前記テーブルに応じたデータ型を前記パラメタとして指定して利用するプログラム部品である、
ことを特徴とする請求項１記載のソフトウェア開発支援プログラム。
【請求項３】
前記コンピュータを、更に、前記汎用データアクセス部品で定義された前記所定の操作以外の操作を記述するためのクエリ文書を生成するクエリ文書生成手段として機能させ、
前記登録情報生成手段は、生成する前記登録情報に、前記クエリ文書生成手段が生成した前記クエリ文書に記述された操作を前記プログラム実行環境上で実行可能にするための情報を含める、
ことを特徴とする請求項２記載のソフトウェア開発支援プログラム。
【請求項４】
前記コンピュータを、更に、前記複数のテーブルそれぞれについて、前記アクセス要求を行うアプリケーションプログラムが使用するデータのデータ型と前記テーブルに含まれるデータのデータ型とを対応付けたマッピング情報を生成するマッピング情報生成手段として機能させ、
前記登録情報生成手段は、生成する前記登録情報に、前記マッピング情報生成手段が生成した前記マッピング情報に基づいて前記データアクセス部品による前記所定の操作が実行されるようにするための情報を含める、
ことを特徴とする請求項１記載のソフトウェア開発支援プログラム。
【請求項５】
前記コンピュータを、更に、前記データアクセス部品に対して前記アクセス要求を行うアプリケーションプログラムを生成するアプリケーション生成手段として機能させ、
前記登録情報生成手段は、生成する前記登録情報に、前記アプリケーション生成手段が生成した前記アプリケーションプログラムを前記プログラム実行環境に登録するための情報を含める、
ことを特徴とする請求項１記載のソフトウェア開発支援プログラム。
【請求項６】
前記コンピュータを、更に、前記データベースと接続するための接続情報を受け付け、前記データベースに接続して前記複数のテーブルの情報を取得するテーブル情報取得手段として機能させ、
前記データアクセス部品生成手段は、前記テーブル情報取得手段が取得した前記複数のテーブルの情報に基づいて、前記データアクセス部品を生成する、
ことを特徴とする請求項１記載のソフトウェア開発支援プログラム。
【請求項７】
前記コンピュータを、更に、
前記複数のテーブルそれぞれについて、前記アクセス要求を行うアプリケーションプログラムが使用するデータのデータ型と前記テーブルに含まれるデータのデータ型とを対応付けたマッピング情報を取得するマッピング情報取得手段、
前記マッピング情報取得手段が取得した前記マッピング情報に基づいて、前記データベースにテーブルを構築するためのテーブル定義情報を生成して、前記データベースに出力するテーブル定義情報生成手段、
として機能させ、
前記データアクセス部品生成手段は、前記マッピング情報取得手段が取得した複数の前記マッピング情報に基づいて、前記データアクセス部品を生成する、
ことを特徴とする請求項１記載のソフトウェア開発支援プログラム。
【請求項８】
前記共通部品記憶手段に記憶された前記共通部品は、前記データベースとのコネクションの管理、トランザクション管理、ログ出力および例外処理のうち少なくとも１つの処理を定義していることを特徴とする請求項１記載のソフトウェア開発支援プログラム。
【請求項９】
データベースに格納された複数のテーブルの情報に基づいて、前記複数のテーブルそれぞれについて、アクセス要求を受け付けて当該テーブルに対し所定の操作を行うプログラム部品であるデータアクセス部品を生成するデータアクセス部品生成手段と、
前記所定の操作に伴って実行させる複数の前記データアクセス部品の間で共通の処理を定義した共通部品を記憶する共通部品記憶手段と、
前記データアクセス部品生成手段が生成した前記データアクセス部品をプログラム実行環境に登録するための情報と、前記共通部品記憶手段に記憶された前記共通部品で定義された処理が前記データアクセス部品による前記所定の操作の際に前記プログラム実行環境上で実行されるようにするための情報とを含む登録情報を生成する登録情報生成手段と、
を有することを特徴とするソフトウェア開発支援装置。
【請求項１０】
コンピュータによるソフトウェア開発支援方法であって、
データアクセス部品生成手段が、データベースに格納された複数のテーブルの情報に基づいて、前記複数のテーブルそれぞれについて、アクセス要求を受け付けて当該テーブルに対し所定の操作を行うプログラム部品であるデータアクセス部品を生成し、
登録情報生成手段が、前記データアクセス部品生成手段が生成した前記データアクセス部品をプログラム実行環境に登録するための情報と、前記所定の操作に伴って実行させる複数の前記データアクセス部品の間で共通の処理であって共通部品記憶手段に記憶された共通部品で定義された処理が、前記データアクセス部品による前記所定の操作の際に前記プログラム実行環境上で実行されるようにするための情報とを含む登録情報を生成する、
ことを特徴とするソフトウェア開発支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発支援プログラム、ソフトウェア開発支援装置およびソフトウェア開発支援方法に関し、特にデータベースにアクセスするソフトウェアの開発を支援するソフトウェア開発支援プログラム、ソフトウェア開発支援装置およびソフトウェア開発支援方法に関する。
【背景技術】
【０００２】
現在、コンピュータシステムの大規模化や複雑化が進む一方、システム開発の低コスト化や短納期化が求められている。この点、システム開発を効率化するため、頻繁に出現するソフトウェアの機能を部品（コンポーネント）化して再利用性を高め、コンポーネントをシステム開発基盤として提供するという手法が考えられる。再利用性を高めるのに役立つ技術として、例えば、依存性注入（ＤＩ：Dependency Injection）やアスペクト指向プログラミング（ＡＯＰ：Aspect Oriented Programming）などの技術がある。
【０００３】
ＤＩでは、コンテナと呼ばれるプログラム実行環境において、コンポーネント間の依存関係を実行時に注入することができる。これにより、個々のコンポーネントの独立性をより高めることができる。また、ＡＯＰでは、例外処理やログ出力など、システム内で横断的に利用される機能をコンポーネントとして切り出しておき、プログラム実行環境がこれら機能を事後的にシステムに付加することを可能にする。
【０００４】
このように、ＤＩやＡＯＰの技術を用いることで、コンポーネント間の依存関係を疎に保つことができ、コンポーネントの再利用性を高めることができる。このような再利用性の高いコンポーネントは、システム固有の業務ロジックから分離されたものであり、一定のパターン化が可能なものも多い。そこで、システム開発をより効率化する観点から、コンポーネントの作成を支援する方法が考えられている。例えば、データベースに登録されたテーブルにアクセスするためのデータアクセスオブジェクト（ＤＡＯ：Data Access Object）を、データベースに関する情報から自動生成する技術がある（例えば、特許文献１，２参照）。
【特許文献１】特開２００６−２６８１２４号公報
【特許文献２】特開２００６−２６８１２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ここで、再利用性を高めたコンポーネントを他のプログラムから利用可能にするため、これらコンポーネントをプログラム実行環境に登録することになる。しかし、コンポーネントを実際に運用可能な状態にしてシステム開発基盤を用意する作業は、多大な工数を要するという問題がある。例えば、データベースのテーブル数が多いシステムでは、ＤＡＯを登録するための工数が大きな問題となる。また、ログ出力処理や例外処理などのシステム横断的な処理を組み込むための工数も問題となる。
【０００６】
本発明はこのような点に鑑みてなされたものであり、効率的なシステム開発を支援するソフトウェア開発支援プログラム、ソフトウェア開発支援装置およびソフトウェア開発支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、ソフトウェア開発支援プログラムが提供される。このソフトウェア開発支援プログラムを実行するコンピュータは、データアクセス部品生成手段、共通部品記憶手段および登録情報生成手段を有する。データアクセス部品生成手段は、データベースに格納された複数のテーブルの情報に基づいて、複数のテーブルそれぞれについて、アクセス要求を受け付けて該当のテーブルに対し所定の操作を行うプログラム部品であるデータアクセス部品を生成する。共通部品記憶手段は、所定の操作に伴って実行させる複数のデータアクセス部品の間で共通の処理を定義した共通部品を記憶する。登録情報生成手段は、データアクセス部品生成手段が生成したデータアクセス部品をプログラム実行環境に登録するための情報と、共通部品記憶手段に記憶された共通部品で定義された処理がデータアクセス部品による所定の操作の際にプログラム実行環境上で実行されるようにするための情報とを含む登録情報を生成する。
【０００８】
また、上記課題を解決するために、上記ソフトウェア開発支援プログラムを実行するコンピュータと同様の機能を有するソフトウェア開発支援装置が提供される。また、上記ソフトウェア開発支援プログラムにより実現される処理と同様の処理を行うソフトウェア開発支援方法が提供される。
【発明の効果】
【０００９】
上記ソフトウェア開発支援プログラム、ソフトウェア開発支援装置およびソフトウェア開発支援方法によれば、効率的なシステム開発を支援することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本実施の形態を図面を参照して詳細に説明する。
図１は、本実施の形態の概要を示す図である。コンピュータ１は、データベース２に登録されたテーブルにアクセスするためのプログラム部品（例えば、ＤＡＯクラス）を自動生成する。コンピュータ１は、データアクセス部品生成手段１ａ、共通部品記憶手段１ｂおよび登録情報生成手段１ｃを有する。
【００１１】
データアクセス部品生成手段１ａは、データベース２に格納されたテーブル２ａ，２ｂ，２ｃの情報に基づいて、各テーブルそれぞれについて、アクセス要求を受け付けて該当のテーブルに対し所定の操作を行うプログラム部品であるデータアクセス部品４ａ，４ｂ，４ｃを生成する。ここで、データアクセス部品生成手段１ａは、例えば、データベース２に対する所定の接続情報に基づいてデータベース２に接続し、データベース２に登録されたテーブル２ａ，２ｂ，２ｃそれぞれのテーブル情報を取得する。そして、取得したテーブル情報からデータアクセス部品４ａ，４ｂ，４ｃを生成する。
【００１２】
共通部品記憶手段１ｂは、所定の操作に伴って実行させるデータアクセス部品４ａ，４ｂ，４ｃの間で共通の処理を定義した共通部品４ｄを記憶する。共通部品４ｄには、例えば、データベース２への接続処理、例外処理およびログ出力処理など、データアクセス部品４ａ，４ｂ，４ｃの実行に必要となるコンポーネントが含まれる。
【００１３】
登録情報生成手段１ｃは、データアクセス部品生成手段１ａが生成したデータアクセス部品４ａ，４ｂ，４ｃをプログラム実行環境４に登録するための情報と、共通部品記憶手段１ｂに記憶された共通部品４ｄで定義された処理がデータアクセス部品４ａ，４ｂ，４ｃによる所定の操作の際にプログラム実行環境４上で実行されるようにするための情報とを含む登録情報３を生成する。
【００１４】
プログラム実行環境４は、データアクセス部品４ａ，４ｂ，４ｃおよび共通部品４ｄを実行する。プログラム実行環境４は、登録情報３に基づいてデータアクセス部品４ａ，４ｂ，４ｃと共通部品４ｄとを関連付ける。プログラム実行環境４は、例えば、登録情報３に基づいてデータアクセス部品４ａ，４ｂ，４ｃの実行前後に共通部品４ｄを呼び出して実行する。
【００１５】
このようなコンピュータ１によれば、データベース２に格納されたテーブル２ａ，２ｂ，２ｃの情報に基づいて、テーブル２ａ，２ｂ，２ｃに対するデータアクセス部品４ａ，４ｂ，４ｃが生成される。そして、プログラム実行環境４がデータアクセス部品４ａ，４ｂ，４ｃを実行する際に、共通部品記憶手段１ｂに記憶された共通部品４ｄを実行するようデータアクセス部品４ａ，４ｂ，４ｃをプログラム実行環境４に登録するための登録情報３が生成される。
【００１６】
このため、データアクセス部品４ａ，４ｂ，４ｃを共通部品４ｄと関連付けるためのコーディングや登録情報３の作成に要する工数が削減される。そして、データアクセス部品４ａ，４ｂ，４ｃを共通部品４ｄと共に即座に動作可能な状態とすることができる。
【００１７】
これにより、開発者は、システム固有の業務ロジックの開発に注力することが可能となり、システム開発作業を効率的に行うことができる。
なお、データアクセス部品生成手段１ａは、データアクセス部品４ａ，４ｂ，４ｃを利用するプログラム（例えば、サンプル用の簡易なプログラム）を更に生成してもよい。このようにすると、このプログラムによるデータアクセス部品４ａ，４ｂ，４ｃを介したテーブル２ａ，２ｂ，２ｃへのアクセスに関する動作確認を即座に開始することができるようになる。
【００１８】
ところで、コンピュータ１は、オブジェクト指向言語によるシステム開発を行う際に特に有用となる。以下では、Ｊａｖａ（登録商標）を用いたシステム開発を例に挙げて、本実施の形態を更に詳細に説明する。
【００１９】
［第１の実施の形態］
図２は、第１の実施の形態のコンピュータのハードウェア構成を示す図である。コンピュータ１００は、システム開発において、システム基盤となるプログラムを自動生成する。コンピュータ１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ＨＤＤインタフェース１０３、グラフィック処理装置１０４、入力インタフェース１０５および通信インタフェース１０６が接続されている。
【００２０】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションのプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。
【００２１】
ＨＤＤ１０３は、データを記憶するためのディスク装置である。ＨＤＤ１０３には、ＯＳのプログラムやアプリケーションのプログラムが格納される。また、ＨＤＤ１０３には、ＣＰＵ１０１による処理に必要な各種データが格納される。
【００２２】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００２３】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介してＤＢ（DataBase）サーバ２００と通信を行う。
コンピュータ１００は、通信インタフェース１０６およびＤＢサーバ２００を介してデータベース２１０にアクセスする。
【００２４】
図３は、第１の実施の形態のコンピュータの機能を示す第１のブロック図である。コンピュータ１００は、ＯＲＭ（Object Relational Mapping）ファイル生成部１１０、ＯＲＭファイル記憶部１１５、ＯＲＭクラス生成部１２０、ＯＲＭクラス記憶部１２５、テンプレート記憶部１３０、ＤＡＯクラス生成部１４０、ＤＡＯクラス記憶部１４５、クエリ記述ファイル生成部１５０、クエリ記述ファイル記憶部１５５、共通部品記憶部１６０、コンテキストファイル生成部１７０、コンテキストファイル記憶部１７５、サンプルクラス生成部１８０およびサンプルクラス記憶部１８５を有する。
【００２５】
ＯＲＭファイル生成部１１０は、ＤＢ接続情報２０とＤＢサーバ２００を介して取得するデータベース２１０のテーブル構成とに基づいてＯＲＭを実行する。ここで、ＯＲＭとは、オブジェクト指向言語で扱う「オブジェクト」のデータと「リレーショナルデータベース（ＲＤＢ：Relational DB）」のレコードとを対応付けることを示す。データベース２１０のテーブル構成を示す情報には、例えば、ＤＤＬ（Data Definition Language）がある。ＯＲＭを行うことで、業務サービスを実行するクラスからデータベース２１０へのテーブルアクセスを行うために必要となるコーディング作業を軽減することができる。ＯＲＭファイル生成部１１０は、ＯＲＭにより生成したＯＲＭファイルをＯＲＭファイル記憶部１１５に格納する。ＯＲＭファイル生成部１１０の機能を実現するアプリケーションとして、例えば、Middlegenを用いることができる。
【００２６】
ＯＲＭファイル記憶部１１５は、ＯＲＭファイル生成部１１０が生成したＯＲＭファイルを記憶する。
ＯＲＭクラス生成部１２０は、ＯＲＭファイル記憶部１１５に記憶されたＯＲＭファイルに基づいてＯＲＭクラスを生成する。ＯＲＭクラスは、ＯＲＭファイルに含まれるデータをカプセル化するためのクラスである。ＯＲＭクラス生成部１２０は、生成したＯＲＭクラスをＯＲＭクラス記憶部１２５に記憶する。ＯＲＭファイル生成部１１０の機能を実現するアプリケーションとして、例えば、Hibernateを用いることができる。
【００２７】
ＯＲＭクラス記憶部１２５は、ＯＲＭクラス生成部１２０が生成したＯＲＭクラスを記憶する。
テンプレート記憶部１３０は、ＤＡＯクラス生成部１４０、クエリ記述ファイル生成部１５０、コンテキストファイル生成部１７０およびサンプルクラス生成部１８０で自動生成されるプログラムのテンプレート（雛形）を記憶する。ＤＡＯクラス生成部１４０、クエリ記述ファイル生成部１５０、コンテキストファイル生成部１７０およびサンプルクラス生成部１８０は、テンプレートエンジンなどを使用してプログラムを自動生成する。テンプレートエンジンとしては、例えば、Velocityを用いることができる。
【００２８】
ＤＡＯクラス生成部１４０は、ＯＲＭクラス記憶部１２５に記憶されたＯＲＭクラスとテンプレート記憶部１３０に記憶されたＤＡＯクラス用テンプレートとに基づいてＤＡＯクラスを生成する。ＤＡＯクラスは、業務サービスの要求に応じてＯＲＭクラスを介してデータベース２１０にアクセスするためのクラスである。ＤＡＯクラス生成部１４０は生成したＤＡＯクラスをＤＡＯクラス記憶部１４５に格納する。
【００２９】
ＤＡＯクラス記憶部１４５は、ＤＡＯクラス生成部１４０が生成したＤＡＯクラスを記憶する。また、ＤＡＯクラス記憶部１４５は、汎用ＤＡＯクラスを記憶する。汎用ＤＡＯクラスは、ＤＡＯクラス生成部１４０が生成したＤＡＯクラスにデータベース２１０のテーブルに対する基本的な操作を提供するクラスである。ここで、テーブルに対する基本的な操作とは、例えば、ＣＲＵＤ（Create / Read / Update / Delete）などの操作である。汎用ＤＡＯクラスに関しては、図１７で詳述する。
【００３０】
クエリ記述ファイル生成部１５０は、ＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスおよびテンプレート記憶部１３０に記憶されたクエリ記述用テンプレートに基づいてクエリ記述ファイルを生成する。クエリ記述ファイルには、汎用ＤＡＯクラスで提供されるテーブルの基本操作以外の操作、例えば、業務処理で要求される複雑なテーブル処理のクエリを設定することができる。クエリ記述ファイル生成部１５０は、生成したクエリ記述ファイルをクエリ記述ファイル記憶部１５５に格納する。
【００３１】
クエリ記述ファイル記憶部１５５は、クエリ記述ファイル生成部１５０が生成したクエリ記述ファイルを記憶する。
共通部品記憶部１６０は、ＤＡＯクラス生成部１４０が生成したＤＡＯクラスやサンプルクラス生成部１８０が生成したサービスの処理で共通的に利用されるコンポーネントを記憶する。このようなコンポーネントは、例えば、例外処理やログ出力などを行うコンポーネントである。また、データベース２１０とのコネクションを管理するコンポーネントやデータベース２１０に対するコミットやロールバックなどのトランザクションを管理するコンポーネントが含まれる。
【００３２】
コンテキストファイル生成部１７０は、テンプレート記憶部１３０に記憶されたコンテキスト用テンプレートに基づいて、ＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスおよび共通部品記憶部１６０に記憶された共通コンポーネントを登録したコンテキストファイルを生成する。コンテキストファイルは、共通コンポーネントのクラスやＤＡＯクラスおよび後述するサンプルクラスの関連付けを定義したファイルである。コンテキストファイル生成部１７０は、生成したコンテキストファイルをコンテキストファイル記憶部１７５に格納する。
【００３３】
コンテキストファイル記憶部１７５は、コンテキストファイル生成部１７０が生成したコンテキストファイルを記憶する。
サンプルクラス生成部１８０は、ＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスおよびテンプレート記憶部１３０に記憶されたサンプルクラス用テンプレートに基づいてＤＡＯクラスを利用するサンプルのサービスであるサンプルクラスを生成する。サンプルクラス生成部１８０は、生成したサンプルクラスをサンプルクラス記憶部１８５に格納する。
【００３４】
サンプルクラス記憶部１８５は、サンプルクラス生成部１８０が生成したサンプルクラスを記憶する。
このように、コンピュータ１００は、データベース２１０のテーブルにアクセスするために必要となる定義ファイル（ＯＲＭファイルやクエリ記述ファイル）、ＤＡＯクラスおよびサンプルクラスを順次生成する。
【００３５】
次に、生成されたクラスに基づいてサービスを実行する構成に関して説明する。
図４は、第１の実施の形態のコンピュータの機能を示す第２のブロック図である。コンピュータ１００は、図３で示した構成に加えて、配置部１９０および実行部１９５を有する。
【００３６】
配置部１９０は、コンテキストファイル記憶部１７５に記憶されたコンテキストファイルに基づき、ＯＲＭクラス記憶部１２５に記憶されたＯＲＭクラス、ＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラス、汎用ＤＡＯクラスおよびサンプルクラス記憶部１８５に記憶されたサンプルクラスをメモリ上に配置する。このとき、配置部１９０は、各クラスで必要となる定義ファイル（ＯＲＭファイルやクエリ記述ファイル）を読み込む。更に、共通部品記憶部１６０に記憶された共通コンポーネントのクラスをメモリ上に配置する。
【００３７】
実行部１９５は、コンテキストファイルに基づき、メモリ上に配置された各クラスを関連付けてサービスを実行する。実行部１９５は、いわゆるコンテナである。
配置部１９０および実行部１９５の機能は、例えば、ＤＩやＡＯＰの手法を組み込んだSpring Frameworkと呼ばれるフレームワークを用いて実現することができる。以下では、配置部１９０や実行部１９５の機能をSpring Frameworkを用いて実現することを想定とした例を示す。
【００３８】
図５は、ＤＢ接続情報の例を示す図である。ＤＢ接続情報２０には、ドライバクラス２１、ＤＢ接続先情報２２、ＤＢ接続ユーザ名２３、パスワード２４、マッピング対象テーブル２５，２６が設定されている。
【００３９】
ドライバクラス２１には、データベース２１０へのアクセスに用いるＪＤＢＣドライバクラスを指定する情報（例えば、“com.mysql.jdbc.Driver”）が設定される。
ＤＢ接続先情報２２には、ＤＢサーバ２００を示す接続先情報（例えば、“jdbc:mysql://database/testdb”）が設定される。
【００４０】
ＤＢ接続ユーザ名２３には、データベース２１０へのアクセスに用いるユーザ名を指定する情報（例えば、“jim”）が設定される。
パスワード２４は、ＤＢ接続ユーザ名２３に対応するパスワードを示す情報（例えば、“0123”）が設定される。
【００４１】
マッピング対象テーブル２５，２６には、ＯＲＭファイル生成部１１０によるＯＲＭの実行対象となるテーブル名（例えば、“Grouptbl”や“Ikisakitbl”）が設定される。
ＯＲＭファイル生成部１１０は、ＤＢ接続情報２０に基づいて、データベース２１０にアクセスし、ＯＲＭを実行する。
【００４２】
なお、ＤＢ接続情報２０には、上記で説明した情報以外の情報を含んでいてもよい。例えば、データベースのスキーマ情報や接続先データベースのＳＱＬ方言（Dialect）を示す情報を含んでいてもよい。
【００４３】
図６は、データベースに格納されるテーブル構造の例を示す図である。テーブル２１１は、データベース２１０に格納される“Grouptbl”テーブルの構造を示している。テーブル２１１には、カラム名、データ型、制約および主キーを示す項目が示されている。各項目の横方向に並べられた情報同士が互いに関連付けられて、１つのカラムについての属性情報を構成する。
【００４４】
カラム名を示す項目には、カラムの名称を示す情報が設定される。データ型を示す項目には、登録するデータの型を示す情報が設定される。制約を示す項目には、登録するデータを制御する情報が設定される。主キーを示す項目には、該当のカラムがテーブル２１１の主キーであるか否かを示す情報が設定される。
【００４５】
テーブル２１１には、例えば、カラム名が“GRCD”、データ型が“varchar（8）”、制約が“NOT NULL”、主キーが“○”という情報が設定される。これは、カラム名“GRCD”には、可変長文字型８桁で非“NULL”であるデータを登録可能であり、“GRCD”は主キーであることを示している。なお、主キーではないカラムである“GRNAME”や“USERID”の主キーの項目には、“−（ハイフン）”が設定されている。
【００４６】
なお、このようなテーブル構造は、例えば、所定のＤＤＬファイルにより記述される。
図７は、テンプレート記憶部に格納されるファイルの例を示す図である。テンプレート記憶部１３０には、ＤＡＯクラス用テンプレートファイル１３１、クエリ記述用テンプレートファイル１３２、コンテキスト用テンプレートファイル１３３およびサンプルクラス用テンプレートファイル１３４が記憶される。
【００４７】
ＤＡＯクラス用テンプレートファイル１３１は、ＤＡＯクラス生成部１４０が生成するＤＡＯクラスの雛形である。
クエリ記述用テンプレートファイル１３２は、クエリ記述ファイル生成部１５０が生成するクエリ記述ファイルの雛形である。
【００４８】
コンテキスト用テンプレートファイル１３３は、コンテキストファイル生成部１７０が生成するコンテキストファイルの雛形である。
サンプルクラス用テンプレートファイル１３４は、サンプルクラス生成部１８０が生成するサービスクラスの雛形である。
【００４９】
これらのテンプレートファイルは、予めテンプレート記憶部１３０に格納される。
図８は、ＤＡＯクラス用テンプレートファイルの例を示す図である。ＤＡＯクラス用テンプレートファイル１３１は、ＤＡＯインタフェースの雛形である。ＤＡＯクラス用テンプレートファイル１３１は、コード１３１ａ，１３１ｂ，１３１ｃを有する。ＤＡＯクラス生成部１４０は、コード１３１ａ，１３１ｂ，１３１ｃに含まれる文字列“｛０｝、｛１｝、｛２｝、｛３｝”で示される箇所を適切な文字列で置換することによりＤＡＯクラスのインタフェースを生成することができる。
【００５０】
コード１３１ａは、ＤＡＯクラスが所属するパッケージを指定する。ＤＡＯクラス生成部１４０は、文字列“｛２｝”をＤＡＯクラスのパッケージ名に置換する。
コード１３１ｂは、インポートするＯＲＭクラスを指定する。ＤＡＯクラス生成部１４０は、文字列“｛３｝”をＯＲＭクラスのパッケージ名に置換し、文字列“｛０｝”をＤＡＯクラスに対応するＯＲＭクラス名で置換する。
【００５１】
コード１３１ｃは、ＤＡＯクラスのインタフェースを定義する。ＤＡＯクラス生成部１４０は、文字列“０”をＤＡＯクラスに対応するＯＲＭクラス名で置換し、文字列“｛１｝”を該当のＯＲＭクラスの主キークラス名で置換する。ＤＡＯクラスの名称は、例えば、ＯＲＭクラス名の後に“Ｄａｏ”の文字列を付加した名称とする。
【００５２】
なお、ＤＡＯクラス生成部１４０が生成するＤＡＯクラスは、インタフェースのみでよく、実装（Implement）は不要である。メソッドは、汎用ＤＡＯクラス（“GenericDao”クラス）に定義されたものを複数のＤＡＯクラスで共通的に利用することができる。
【００５３】
ここで、“GenaricDao”には、ＯＲＭクラスのデータ型と該当のＯＲＭクラスに対応するテーブルの主キーの型を設定することができる。これによって、各ＤＡＯクラスに入力されるデータや主キーの型の不一致をＤＡＯクラスの生成段階で未然に防止することができる。すなわち、ＤＡＯクラスの型安全性を確保することができる。
【００５４】
なお、動的に変化するクエリを扱うＤＡＯクラスの場合には、該当のＤＡＯクラスで個別に実装クラスを作成することで対応が可能である。
図９は、クエリ記述用テンプレートファイルの例を示す図である。クエリ記述ファイル生成部１５０は、クエリ記述用テンプレートファイル１３２に記述された内容に基づいて、クエリ記述ファイルを生成する。開発者は、生成されたクエリ記述ファイルに汎用ＤＡＯクラスで定義されない複雑なテーブル操作用のクエリを業務ロジックに応じてタグ１３２ａに記述することができる。
【００５５】
図１０は、コンテキスト用テンプレートファイルの例を示す第１の図である。コンテキスト用テンプレートファイル１３３には、サービスの実行に用いる複数のビーン（Bean）が定義される。コンテキスト用テンプレートファイル１３３には、タグ１３３ａ，１３３ｂ，１３３ｃが設けられる。
【００５６】
タグ１３３ａには、“dataSourceMain”ビーンが定義される。“dataSourceMain”は、データベース２１０に対する接続情報を管理する。“dataSourceMain”には、例えば、ＤＢ接続情報２０のドライバクラス２１、ＤＢ接続先情報２２、ＤＢ接続ユーザ名２３およびパスワード２４などの情報が設定される。
【００５７】
タグ１３３ｂには、“sessionFactory”ビーンが定義される。“sessionFactory”は、“dataSourceMain”を参照して、データベース２１０の各テーブルに対する操作を行う。“sessionFactory”には、処理に必要な定義情報であるＯＲＭファイル（例えば、“（ＯＲＭクラス名）.hbm.xml”のファイル名で指定される）やクエリ記述ファイル（例えば、“（ＯＲＭクラス名）.hql.xml”のファイル名で指定される）が設定される。
【００５８】
タグ１３３ｃには、“transactionManager”ビーンが定義される。“transactionManager”は、“sessionFactory”を参照して、データベース２１０とのトランザクションの管理を行う。ここで、トランザクションの管理とは、データベース２１０に対するコミットやロールバックの制御などを示す。
【００５９】
図１１は、コンテキスト用テンプレートファイルの例を示す第２の図である。コンテキスト用テンプレートファイル１３３には、更に、タグ１３３ｄ，１３３ｅ，１３３ｆが設けられる。
【００６０】
タグ１３３ｄには、“txAttribute”ビーンが定義される。“txAttribute”は、メソッドに対するトランザクションの属性を管理する。“txAttribute”には、例えば、“read”や“get”などの文字列で始まるメソッドに対し、新たなトランザクションを開始する、読み取り専用とするなど、トランザクションを制御するための属性が定義される。
【００６１】
タグ１３３ｅには、“txInterceptor”ビーンが定義される。“txInterceptor”は、トランザクション管理の機能を他のクラスの実行時に呼び出すためのビーンである。“txInterceptor”は、タグ１３３ｃの“transactionManager”やタグ１３３ｄの“txAttribute”を参照する。
【００６２】
タグ１３３ｆには、“applicationLoggingInterceptor”ビーンが定義される。“applicationLoggingInterceptor”は、ログ出力用の機能を他のクラスの実行時に呼び出すためのビーンである。
【００６３】
図１２は、コンテキスト用テンプレートファイルの例を示す第３の図である。コンテキスト用テンプレートファイル１３３には、更に、タグ１３３ｇ，１３３ｈ，１３３ｉが設けられる。
【００６４】
タグ１３３ｇには、“serviceThrowsAdvice”ビーンが定義される。“serviceThrowsAdvice”は、サービスクラスにおける例外処理を行う機能をサービスクラスの実行時に呼び出すためのビーンである。
【００６５】
タグ１３３ｈには、“daoThrowsAdvice”ビーンが定義される。“daoThrowsAdvice”は、ＤＡＯクラスにおける例外処理を行う機能をＤＡＯクラスの実行時に呼び出すためのビーンである。
【００６６】
タグ１３３ｉには、“autoProxyCreator”ビーンが定義される。“autoProxyCreator”は、サービスクラスの実行時に、タグ１３３ｅ，１３３ｆ，１３３ｇで定義した各ビーンを呼び出すためのビーンである。
【００６７】
図１３は、コンテキスト用テンプレートファイルの例を示す第４の図である。コンテキスト用テンプレートファイル１３３には、更に、タグ１３３ｊ，１３３ｋ，１３３ｌ，１３３ｍが設けられる。タグ１３３ｊ，１３３ｋ，１３３ｌ，１３３ｍには、ＤＡＯクラスの実行時に共通的に呼び出されるビーンが定義される。
【００６８】
タグ１３３ｊには、“finderIntroductionAdvisor”ビーンが定義される。“finderIntroductionAdvisor”は、各ＤＡＯクラスのメソッドのうち汎用ＤＡＯクラスが利用できない場合に、該当のＤＡＯクラスに対応するクエリ記述ファイルを呼び出すためのビーンである。
【００６９】
タグ１３３ｋには、“abstractDaoTarget”ビーンが定義される。“abstractDaoTarget”は、共通部品記憶部１６０に記憶された汎用ＤＡＯクラスのインスタンスを各ＤＡＯクラスで再利用可能とするためのビーンである。
【００７０】
タグ１３３ｌには、“abstractDao”ビーンが定義される。“abstractDao”は、各ＤＡＯクラスに“finderIntroductionAdvisor”の機能を付加するためのビーンである。
タグ１３３ｍには、“daoAutoProxyCreator”が定義される。“daoAutoProxyCreator”は、各ＤＡＯクラスの実行時に、タグ１３３ｆ，１３３ｈで定義した各ビーンを呼び出すためのビーンである。
【００７１】
図１４は、コンテキスト用テンプレートファイルの例を示す第５の図である。コンテキスト用テンプレートファイル１３３には、更に、タグ１３３ｎ，１３３ｏが設けられる。
タグ１３３ｎには、ＤＡＯクラスのビーンが、ＤＡＯクラス毎に定義される。ビーンの識別情報を示す“bean id”には、適切な文字列が置換されて設定される。プロパティ“proxyInterfaces”には、ＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスを指定する適切な文字列が置換されて設定される。また、“abstractDaoTarget”のコンストラクタに該当のＤＡＯクラスに対応するＯＲＭクラスを設定する。
【００７２】
なお、タグ１３３ｎでは、実装が不要なＤＡＯクラスのビーンを定義しているが、例えば、処理要求に応じて可変なクエリを扱う場合には実装が必要となる。この場合は、コンテキスト用テンプレートファイル１３３に実装が必要なＤＡＯクラスのビーンを直接定義することが可能である。
【００７３】
タグ１３３ｏには、“sampleService”ビーンが定義される。“sampleService”は、サービスクラスのビーンである。“sampleService”には、ＤＡＯクラスを設定するためのプロパティタグが設けられており、ＤＡＯクラス毎の名称が設定される。
【００７４】
図１５は、サンプルクラス用テンプレートファイルの例を示す図である。サンプルクラス用テンプレートファイル１３４には、コード１３４ａ，１３４ｂ，１３４ｃが設けられている。
【００７５】
コード１３４ａは、インポートするＤＡＯクラスやＯＲＭクラスを指定する。サンプルクラス生成部１８０は、コード１３４ａに全てのＤＡＯクラスやＯＲＭクラスを示す適切な文字列を設定する。
【００７６】
コード１３４ｂは、各ＤＡＯクラスのオブジェクト変数を定義する。サンプルクラス生成部１８０は、コード１３４ｂに全てのＤＡＯクラスとそのオブジェクト名とを示す適切な文字列を設定する。
【００７７】
コード１３４ｃは、定義したオブジェクト変数に関するメソッド（例えば、ＤＩにより、ＤＡＯクラスのインスタンスへの参照を設定するためのメソッド）を定義する。サンプルクラス生成部１８０は、全てのオブジェクト変数に関してメソッドを定義する。
【００７８】
図１６は、共通部品記憶部に格納されるファイルの例を示す図である。共通部品記憶部１６０には、各クラスで再利用可能なコンポーネントのファイルが記憶される。共通部品記憶部１６０は、ＤＢコネクション管理用クラス１６１、ＤＢトランザクション管理用クラス１６２、ログ出力用クラス１６３および例外処理用クラス１６４が記憶される。
【００７９】
ＤＢコネクション管理用クラス１６１は、データベース接続用のクラスである。ＤＢコネクション管理用クラス１６１には、例えば、コンテキスト用テンプレートファイル１３３のタグ１３３ａの“dataSourceMain”ビーンやタグ１３３ｂの“sessionFactory”ビーンなどのクラスが含まれる。
【００８０】
ＤＢトランザクション管理用クラス１６２は、データベースに対するコミットやロールバックなどのトランザクションを管理するためのクラスである。ＤＢトランザクション管理用クラス１６２には、例えば、コンテキスト用テンプレートファイル１３３のタグ１３３ｃの“transactionManager”ビーン、タグ１３３ｄの“txAttribute”ビーンおよびタグ１３３ｅの“txInterceptor”ビーンなどのクラスが含まれる。
【００８１】
ログ出力用クラス１６３は、ログを出力するためのクラスである。ログ出力用クラス１６３には、例えば、コンテキスト用テンプレートファイル１３３のタグ１３３ｆの“applicationLoggingInterceptor”ビーンのクラスが含まれる。
【００８２】
例外処理用クラス１６４は、実行時の例外処理用のクラスである。例外処理用クラス１６４には、例えば、コンテキスト用テンプレートファイル１３３のタグ１３３ｇの“serviceThrowsAdvice”ビーンやタグ１３３ｈの“daoThrowsAdvice”ビーンなどのクラスが含まれる。
【００８３】
図１７は、汎用ＤＡＯクラスの例を示す図である。汎用ＤＡＯクラス１４５ａは、ＤＡＯクラス記憶部１４５に予め格納される。汎用ＤＡＯクラス１４５ａは、複数のＤＡＯクラスで共通的に利用される主要な機能を定義する。汎用ＤＡＯクラス１４５ａには、例えば、ＣＲＵＤの処理や排他有主キー検索および排他開放待ち無主キー検索が定義される。
【００８４】
ここで、排他有主キー検索とは、データをロックして主キー検索を行う機能である。
また、排他無主キー検索も同様にデータをロックして主キー検索を行う機能である。但し、排他無主キー検索では、該当のデータが他の処理で既にロックされている場合、ロックの開放を待たずに例外処理を行う。
【００８５】
このように、各ＤＡＯクラスにおいて、データベース２１０に対するこれらの処理を行う場合には、汎用ＤＡＯクラス１４５ａに定義された機能を用いて処理を実行させることで、各ＤＡＯクラスで実装を不要とすることができる。
【００８６】
次に、以上のような構成を備えるコンピュータ１００において実行される処理の詳細を説明する。
図１８は、第１の実施の形態のプログラム生成処理の手順を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
【００８７】
［ステップＳ１］ＯＲＭファイル生成部１１０は、ＤＢ接続情報およびデータベース２１０のテーブル構造に基づいてＯＲＭを実行し、ＯＲＭファイルを生成する。ＯＲＭファイル生成部１１０は、生成したＯＲＭファイルをＯＲＭファイル記憶部１１５に格納する。
【００８８】
［ステップＳ２］ＯＲＭクラス生成部１２０は、ＯＲＭファイル記憶部１１５に記憶されたＯＲＭファイルに基づいて、データベース２１０の各テーブルに値を格納または、各テーブルから値を読み出すためのＯＲＭクラスを生成する。ＯＲＭクラス生成部１２０は、生成したＯＲＭクラスをＯＲＭクラス記憶部１２５に格納する。
【００８９】
［ステップＳ３］ＤＡＯクラス生成部１４０は、テンプレート記憶部１３０に記憶されたＤＡＯクラス用テンプレートファイル１３１とＯＲＭクラス記憶部１２５に記憶されたＯＲＭクラスの名称とに基づいて、ＤＡＯクラスを生成する。ＤＡＯクラス生成部１４０は、生成したＤＡＯクラスをＤＡＯクラス記憶部１４５に格納する。
【００９０】
［ステップＳ４］クエリ記述ファイル生成部１５０は、テンプレート記憶部１３０に記憶されたクエリ記述用テンプレートファイル１３２とＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスの名称とに基づいて、クエリ記述ファイルを生成する。クエリ記述ファイル生成部１５０は、生成したクエリ記述ファイルをクエリ記述ファイル記憶部１５５に格納する。
【００９１】
［ステップＳ５］コンテキストファイル生成部１７０は、テンプレート記憶部１３０に記憶されたコンテキスト用テンプレートファイル１３３とＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスの名称とに基づいて、コンテキストファイルを生成する。コンテキストファイル生成部１７０は、生成したコンテキストファイル記憶部１７５に格納する。
【００９２】
［ステップＳ６］サンプルクラス生成部１８０は、テンプレート記憶部１３０に記憶されたサンプルクラス用テンプレートファイル１３４とＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスの名称とに基づいて、サンプルのアプリケーションであるサンプルクラスを生成する。サンプルクラス生成部１８０は、生成したサンプルクラスをサンプルクラス記憶部１８５に格納する。
【００９３】
［ステップＳ７］配置部１９０は、コンテキストファイル記憶部１７５に記憶されたコンテキストファイルに基づいて、ＤＡＯクラス、サンプルクラスおよび共通コンポーネントなどの各クラスをメモリ上に配置する。実行部１９５は、コンテキストファイルに基づいて、配置部１９０が配置したクラス間の関連付けを行い、サンプルクラスを実行する。
【００９４】
このようにして、ＤＡＯクラスやサンプルクラスが自動生成される。このとき、実行時に必要となるデータベース２１０への接続、トランザクションの管理、ログ出力および例外処理の機能が予め用意され、各クラスの実行時に自動的に呼び出されるよう構成される。このため、開発者は、これらの機能を呼び出すためのコーディングをＤＡＯクラス毎に行う必要がなくなる。これにより、アプリケーションが扱うテーブルが多数存在する場合でも、これら機能を組み込むための工数を削減することができる。また、生成した各クラスを実行環境に登録するためのコンテキストファイルを作成する工数を削減することができる。
【００９５】
次に、上記処理手順の各ステップにおける処理の手順を更に詳しく説明する。
図１９は、第１の実施の形態のＯＲＭファイル生成処理の手順を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ１の処理を詳細に説明したものである。
【００９６】
［ステップＳ１１］ＯＲＭファイル生成部１１０は、ＤＢ接続情報２０に設定された情報に基づいて、データベース２１０に接続する。
［ステップＳ１２］ＯＲＭファイル生成部１１０は、ＤＢ接続情報２０に設定されたＯＲＭの対象テーブルからＯＲＭファイル未作成のテーブル情報（例えば、ＤＤＬ）を１つ取得して、データベース２１０における該当のテーブル情報を参照する。
【００９７】
［ステップＳ１３］ＯＲＭファイル生成部１１０は、参照したテーブル情報に含まれるカラムの情報を抽出する。
［ステップＳ１４］ＯＲＭファイル生成部１１０は、参照したテーブル情報に含まれる全てのカラムの情報を抽出したか否かを判定する。全てのカラムの情報を抽出済みの場合、処理がステップＳ１５に移される。未抽出のカラムが存在する場合、処理がステップＳ１３に移される。
【００９８】
［ステップＳ１５］ＯＲＭファイル生成部１１０は、抽出したカラムの情報に基づいて、ＯＲＭファイルを生成し、ＯＲＭファイル記憶部１１５に出力する。
［ステップＳ１６］ＯＲＭファイル生成部１１０は、ＤＢ接続情報２０に設定された全てのテーブルに関してＯＲＭファイルを生成済みであるか否かを判定する。全てのテーブルに関してＯＲＭファイルを生成済みである場合、処理が完了する。ＯＲＭファイルを未生成のテーブルが存在する場合、処理がステップＳ１２に移される。
【００９９】
このようにして、データベース２１０に存在する各テーブルのカラムが参照され、それぞれのカラムの情報が、テーブル毎に生成されるＯＲＭファイルにマッピングされる。ＯＲＭファイルのファイル形式は、例えば、ｘｍｌ形式である。
【０１００】
図２０は、第１の実施の形態のＯＲＭクラス生成処理の手順を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ２の処理を詳細に説明したものである。
【０１０１】
［ステップＳ２１］ＯＲＭクラス生成部１２０は、ＯＲＭファイル記憶部１１５に記憶されたＯＲＭファイルのうち、未処理のＯＲＭファイルを１つ取得する。
［ステップＳ２２］ＯＲＭクラス生成部１２０は、ＯＲＭファイルに設定されたカラムのうち未処理のカラムを１つ抽出する。
【０１０２】
［ステップＳ２３］ＯＲＭクラス生成部１２０は、抽出したカラムの属性を取得し、該当のカラムの属性情報を生成する。
［ステップＳ２４］ＯＲＭクラス生成部１２０は、抽出したカラムに設定された情報を取得するためのＧｅｔｔｅｒメソッドを生成する。
【０１０３】
［ステップＳ２５］ＯＲＭクラス生成部１２０は、抽出したカラムに情報を設定するためのＳｅｔｔｅｒメソッドを生成する。
［ステップＳ２６］ＯＲＭクラス生成部１２０は、ＯＲＭファイルに含まれる全てのカラムに関して、属性情報、ＧｅｔｔｅｒメソッドおよびＳｅｔｔｅｒメソッドを生成済みであるか否かを判定する。全てのカラムに関して処理済みである場合、処理がステップＳ２７に移される。未処理のカラムが存在する場合、処理がステップＳ２２に移される。
【０１０４】
［ステップＳ２７］ＯＲＭクラス生成部１２０は、生成したカラムの属性情報、ＧｅｔｔｅｒメソッドおよびＳｅｔｔｅｒメソッドを設定したＯＲＭクラスをＯＲＭクラス記憶部１２５に出力する。
【０１０５】
［ステップＳ２８］ＯＲＭクラス生成部１２０は、全てのＯＲＭファイルについてＯＲＭクラスを生成したか否かを判定する。全てのＯＲＭファイルについてＯＲＭクラスを生成した場合、処理が完了する。ＯＲＭクラスを未生成のＯＲＭファイルが存在する場合、処理がステップＳ２１に移される。
【０１０６】
このようにして、各ＯＲＭファイルに対するＯＲＭクラスが生成される。
図２１は、第１の実施の形態のＤＡＯクラス生成処理の手順を示すフローチャートである。以下、図２１に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ３の処理を詳細に説明したものである。
【０１０７】
［ステップＳ３１］ＤＡＯクラス生成部１４０は、ＯＲＭクラス記憶部１２５に記憶されたＯＲＭクラスのファイルリストを取得する。
［ステップＳ３２］ＤＡＯクラス生成部１４０は、取得したファイルリストから未処理のＯＲＭクラスを１つ取得する。
【０１０８】
［ステップＳ３３］ＤＡＯクラス生成部１４０は、ＯＲＭクラスのソースコードを参照する。
［ステップＳ３４］ＤＡＯクラス生成部１４０は、参照したソースコードからＯＲＭクラスの名称を抽出する。具体的には、例えば参照したソースコードに含まれる各行について、行頭の“public class”の文字列の後に続いて定義されるクラス名を抽出する。
【０１０９】
［ステップＳ３５］ＤＡＯクラス生成部１４０は、該当のＯＲＭクラスに含まれる主キークラス名を抽出する。具体的には、例えば参照したソースコードに含まれる各行について、最初に現れる行頭の“private”の文字列の後に続いて定義されるクラス名を抽出する。
【０１１０】
［ステップＳ３６］ＤＡＯクラス生成部１４０は、テンプレート記憶部１３０に記憶されたＤＡＯクラス用テンプレートファイル１３１を読み込む。
［ステップＳ３７］ＤＡＯクラス生成部１４０は、ＤＡＯクラス用テンプレートファイル１３１に取得した情報を設定する。具体的には、ＤＡＯクラス用テンプレートファイル１３１の文字列“｛０｝”を上記ステップＳ３４で取得したＯＲＭクラス名に置換する。同様に、文字列“｛１｝”を上記ステップＳ３５で取得した主キークラス名に置換する。また、文字列“｛２｝”をＤＡＯのパッケージ名に置換し、文字列“｛３｝”をＯＲＭのパッケージ名に置換する。
【０１１１】
［ステップＳ３８］ＤＡＯクラス生成部１４０は、ＤＡＯクラス用テンプレートファイル１３１を置換して生成したＤＡＯクラスをＤＡＯクラス記憶部１４５に出力する。
［ステップＳ３９］ＤＡＯクラス生成部１４０は、ファイルリストに含まれる全てのＯＲＭクラスに関して、ＤＡＯクラスを生成済みであるか否かを判定する。全てのＯＲＭクラスに関してＤＡＯクラスを生成済みである場合、処理が完了する。ＤＡＯクラスを未生成のＯＲＭクラスが存在する場合、処理がステップＳ３２に移される。
【０１１２】
このようにして、各ＯＲＭクラスに対するＤＡＯクラスが生成される。
図２２は、第１の実施の形態のクエリ記述ファイル生成処理の手順を示すフローチャートである。以下、図２２に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ４の処理を詳細に説明したものである。
【０１１３】
［ステップＳ４１］クエリ記述ファイル生成部１５０は、ＤＡＯクラス記憶部１２５に記憶されたＤＡＯクラスのファイルリストを取得する。
［ステップＳ４２］クエリ記述ファイル生成部１５０は、取得したファイルリストから未処理のＤＡＯクラスを１つ取得する。
【０１１４】
［ステップＳ４３］クエリ記述ファイル生成部１５０は、ＤＡＯクラスのファイル名からＯＲＭクラス名を取得する。
［ステップＳ４４］クエリ記述ファイル生成部１５０は、テンプレート記憶部１３０に記憶されたクエリ記述用テンプレートファイル１３２を読み込む。
【０１１５】
［ステップＳ４５］クエリ記述ファイル生成部１５０は、クエリ記述用テンプレートファイル１３２に記述された内容を複製してＯＲＭクラス名に対応付けたクエリ記述用ファイルを生成し、クエリ記述ファイル記憶部１５５に出力する。
【０１１６】
［ステップＳ４６］クエリ記述ファイル生成部１５０は、ファイルリストに存在する全てのＤＡＯクラスに関してクエリ記述ファイルを生成したか否かを判定する。全てのＤＡＯクラスに関してクエリ記述ファイルを生成した場合、処理が完了する。クエリ記述ファイルを未生成のＤＡＯクラスが存在する場合、処理がステップＳ４２に移される。
【０１１７】
このようにして、各ＤＡＯクラスについてクエリ記述ファイルが生成される。
図２３は、第１の実施の形態のコンテキストファイル生成処理の手順を示すフローチャートである。以下、図２３に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ５の処理を詳細に説明したものである。
【０１１８】
［ステップＳ５１］コンテキストファイル生成部１７０は、ＤＡＯクラス記憶部１２５に記憶されたＤＡＯクラスのファイルリストを取得する。
［ステップＳ５２］コンテキストファイル生成部１７０は、取得したファイルリストから未取得のＤＡＯクラスを１つ取得する。
【０１１９】
［ステップＳ５３］コンテキストファイル生成部１７０は、ＤＡＯクラスのファイル名からＯＲＭクラス名とＤＡＯクラス名とを取得する。
［ステップＳ５４］コンテキストファイル生成部１７０は、取得したファイルリストに含まれる全ＤＡＯクラスについてＯＲＭクラス名とＤＡＯクラス名とを取得済みか否かを判定する。取得済みである場合、処理がステップＳ５５に移される。未取得のＤＡＯクラスが存在する場合、処理がステップＳ５２に移される。
【０１２０】
［ステップＳ５５］コンテキストファイル生成部１７０は、テンプレート記憶部１３０に記憶されたコンテキスト用テンプレートファイル１３３を読み込む。
［ステップＳ５６］コンテキストファイル生成部１７０は、タグ１３３ａで定義されるビーンである“dataSourceMain”にＤＢ接続パラメタを設定する。
【０１２１】
［ステップＳ５７］コンテキストファイル生成部１７０は、タグ１３３ｂで定義されるビーンである“sessionFactory”に、上記ステップＳ５２〜Ｓ５４で取得したＯＲＭクラス名に対応するＯＲＭファイルおよびクエリ記述ファイルを設定する。
【０１２２】
［ステップＳ５８］コンテキストファイル生成部１７０は、タグ１３３ｎで定義されるＤＡＯクラスのビーンに、上記ステップＳ５２〜Ｓ５４で取得した各ＯＲＭクラス名および各ＤＡＯクラス名を設定する。
【０１２３】
［ステップＳ５９］コンテキストファイル生成部１７０は、タグ１３３ｏで定義されるサンプルのサービスクラスのビーンである“sampleService”タグに上記ステップＳ５２〜Ｓ５４で取得したＤＡＯクラス名を設定する。
【０１２４】
［ステップＳ６０］コンテキストファイル生成部１７０は、コンテキスト用テンプレートファイル１３３に基づいて生成したコンテキストファイルをコンテキストファイル記憶部１７５に出力し、処理が完了する。
【０１２５】
このようにして、コンテキスト用テンプレートファイル１３３のデータベース２１０への接続やサンプルクラスのビーンの定義情報にＯＲＭクラスやＤＡＯクラスを自動的に設定する。また、コンテキスト用テンプレートファイル１３３には、共通コンポーネントであるトランザクション管理用のクラスやログ出力用のクラスなどが予め設定される。
【０１２６】
図２４は、第１の実施の形態のサンプルアプリケーション生成処理の手順を示すフローチャートである。以下、図２４に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ６の処理を詳細に説明したものである。
【０１２７】
［ステップＳ６１］サンプルクラス生成部１８０は、ＤＡＯクラス記憶部１２５に記憶されたＤＡＯクラスのファイルリストを取得する。
［ステップＳ６２］サンプルクラス生成部１８０は、取得したファイルリストから未取得のＤＡＯクラスを１つ取得する。
【０１２８】
［ステップＳ６３］サンプルクラス生成部１８０は、ＤＡＯクラスのファイル名からＯＲＭクラス名とＤＡＯクラス名とを取得する。
［ステップＳ６４］サンプルクラス生成部１８０は、取得したファイルリストに含まれる全ＤＡＯクラスについてＯＲＭクラス名とＤＡＯクラス名とを取得済みか否かを判定する。取得済みである場合、処理がステップＳ６５に移される。未取得のＤＡＯクラスが存在する場合、処理がステップＳ６２に移される。
【０１２９】
［ステップＳ６５］サンプルクラス生成部１８０は、テンプレート記憶部１３０に記憶されたサンプルクラス用テンプレートファイル１３４を読み込む。
［ステップＳ６６］サンプルクラス生成部１８０は、サンプルクラス用テンプレートファイル１３４に、上記ステップＳ６２〜Ｓ６４で取得したＯＲＭクラスやＤＡＯクラスのメソッドを追加し、サンプルのアプリケーションであるサンプルクラスを生成する。
【０１３０】
［ステップＳ６７］サンプルクラス生成部１８０は、生成したサンプルクラスをサンプルクラス記憶部１８５に出力し、処理が完了する。
このようにして、サンプルクラス用テンプレートファイル１３４に自動的にＯＲＭクラス名やＤＡＯクラス名が設定されてサンプルクラスが生成される。生成されたサンプルクラスは、コンテキストファイルに含まれる全てのＤＡＯクラスの定義に対して矛盾なく動作可能であるため、サンプルクラスを用いて即座にデータベース２１０に対するアクセス処理の動作確認を行うことができる。また、実際の業務サービスを作成する場合には、コンテキストファイルと矛盾無く生成されたサンプルクラスを複写して利用することができるので、効率良くコーディング作業を行うことができる。
【０１３１】
図２５は、第１の実施の形態のサンプルアプリケーション実行処理の手順を示すフローチャートである。なお、サンプルのアプリケーションとは、ＤＡＯクラスとそれを用いるサンプルクラスとを実行部１９５により関連付けて、サンプルクラスの一連の処理を実行可能としたものである。以下、図２５に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ７の処理を詳細に説明したものである。
【０１３２】
［ステップＳ７１］配置部１９０は、コンテキストファイル記憶部１７５に記憶されたコンテキストファイルを読み込む。
［ステップＳ７２］配置部１９０は、コンテキストファイルの内容に基づいて、ＯＲＭクラス記憶部１２５に記憶されたＯＲＭクラス、ＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスおよびサンプルクラス記憶部１８５に記憶されたサンプルクラスをメモリ上に配置する。実行部１９５は、配置部１９０がメモリ上に配置した各クラスや共通コンポーネントのクラスの関連付けを行い、サンプルのアプリケーションが稼動状態となる。
【０１３３】
［ステップＳ７３］実行部１９５は、サンプルクラスがデータベース２１０に対する処理要求を受け付けたか否かを判定する。受け付けた場合、処理がステップＳ７４に移される。受け付けていない場合、処理がステップＳ７８に移される。
【０１３４】
［ステップＳ７４］実行部１９５は、処理要求の内容に応じてＳＱＬ文を生成する。このとき、テーブルに対する単純なＣＲＵＤなどの処理に関しては、汎用ＤＡＯクラス１４５ａに基づいてＳＱＬ文を生成する。また、汎用ＤＡＯクラスでサポートされない複雑なクエリに関しては、該当のＤＡＯクラスに対するクエリ記述ファイルに基づいてＳＱＬ文を生成する。
【０１３５】
［ステップＳ７５］実行部１９５は、ＤＡＯクラスおよびＯＲＭクラスを介してデータベース２１０における処理対象のテーブルに接続する。
［ステップＳ７６］実行部１９５は、上記ステップＳ７４で生成したＳＱＬ文に基づいてテーブルに対する処理を実行する。
【０１３６】
［ステップＳ７７］実行部１９５は、サンプルクラスがＯＲＭクラスおよびＤＡＯクラスを介して処理結果の応答を受け付けると、処理要求に基づく一連の処理が完了したことを認識し、処理がステップＳ７３に移される。
【０１３７】
［ステップＳ７８］実行部１９５は、サンプルのアプリケーションの終了要求を受け付けたか否かを判定する。受け付けた場合、処理が完了する。受け付けていない場合、処理がステップＳ７３に移される。
【０１３８】
このようにして、生成された各クラスに基づいてサンプルのアプリケーションが実行される。各クラスの処理に必要な機能は、実行部１９５によって呼び出され、各クラスの実行時に付加される。また、処理要求に応じたＳＱＬ文が生成されてデータベース２１０の各テーブルに対する処理が実行される。
【０１３９】
図２６は、テンプレートから生成されるファイルの一覧の例を示す図である。このリストは、コンピュータ１００により生成されるファイルの一覧を示している。リスト中に示される生成ファイルは、ＤＢ接続情報２０のマッピング対象テーブルに、“Grouptbl”および“Ikisakitbl”を指定した場合の例である。
【０１４０】
ＯＲＭファイル生成部１１０は、ＯＲＭファイルとして“Grouptbl.hbm.xml”および“Ikisakitbl.hbm.xml”を生成する。
ＯＲＭクラス生成部１２０はＯＲＭクラスとして、“Grouptbl.java”および“Ikisakitbl.java”を生成する。
【０１４１】
ＤＡＯクラス生成部１４０は、ＤＡＯクラス用テンプレートファイル１３１である“TemplateDAO.java”に基づいて、ＤＡＯクラス“GrouptblDAO.java”および“IkisakitblDAO.java”を生成する。
【０１４２】
クエリ記述ファイル生成部１５０は、クエリ記述用テンプレートファイル１３２である“template.hql.xml.vm”に基づいて、クエリ記述ファイル“Grouptbl.hql.xml”および“Ikisakitbl.hql.xml”を生成する。
【０１４３】
コンテキストファイル生成部１７０は、コンテキスト用テンプレートファイル１３３である“template-application-context.vm”に基づいて、コンテキストファイル“sample-application-context.xml”を生成する。
【０１４４】
サンプルクラス生成部１８０は、サンプルクラス用テンプレートファイル１３４である“SampleServiceImpl.java.vm”に基づいて、サンプルクラス“SampleServiceImpl.java”を生成する。
【０１４５】
図２７は、生成されたＯＲＭファイルの例を示す図である。ＯＲＭファイル１１５ａは、“Grouptbl.hbm.xml”の例を示している。ＯＲＭファイル１１５ａでは、各テーブルのカラムの属性情報が設定される。
【０１４６】
図２８は、生成されたＯＲＭクラスの例を示す図である。ＯＲＭクラス１２５ａは、“Grouptbl.java”の例を示している。ＯＲＭクラス１２５ａでは、ＯＲＭファイル１１５ａに設定された各カラムの属性情報と、ＧｅｔｔｅｒメソッドやＳｅｔｔｅｒメソッドが定義される。
【０１４７】
図２９は、生成されたＤＡＯクラスの例を示す図である。ＤＡＯクラス１４５ａは、“GrouptblDAO.java”の例を示している。ＤＡＯクラス１４５ａは、ＤＡＯクラス用テンプレートファイル１３１のコード１３１ａ，１３１ｂ，１３１ｃに含まれる“｛０｝、｛１｝、｛２｝、｛３｝”が適切な文字列に置換されて生成されたものである。
【０１４８】
図３０は、生成されたクエリ記述ファイルの例を示す図である。クエリ記述ファイル１５５ａは、“Grouptbl.hql.xml”の例を示している。クエリ記述ファイル１５５ａには、クエリ記述用テンプレートファイル１３２に記述された内容が設定される。クエリ記述ファイル１５５ａには、汎用ＤＡＯクラス１４５ａで実行可能な処理以外の業務処理に応じたクエリを記述することができる。
【０１４９】
図３１は、生成されたコンテキストファイルの例を示す第１の図である。コンテキストファイル１７５ａは、“sample-application-context.xml”の例を示している。コンテキストファイル１７５ａは、コンテキスト用テンプレートファイル１３３に基づいて生成される。なお、コンテキストファイル１７５ａでは、コンテキスト用テンプレートファイル１３３においてＤＢ接続情報２０で設定したマッピング対象テーブルに応じて設定が挿入されるタグ１３３ａ，１３３ｂに対応する箇所のみを示している。
【０１５０】
図３２は、生成されたコンテキストファイルの例を示す第２の図である。コンテキストファイル１７５ａには、更に、コンテキスト用テンプレートファイル１３３のタグ１３３ｎ，１３３ｏに対応する箇所にＤＡＯクラスの情報が設定される。
【０１５１】
図３３は、生成されたサンプルクラスの例を示す図である。サンプルクラス１８５ａは、“SampleServiceImpl.java”の例を示している。サンプルクラス生成部１８０は、サンプルクラス用テンプレートファイル１３４のコード１３４ａ，１３４ｂ，１３４ｃをＯＲＭクラス名およびＤＡＯクラス名により置換することで、サンプルクラス１８５ａを生成する。
【０１５２】
このように、各クラスがデータベースへの接続情報とテーブルの選択のみで自動的に生成される。サンプルクラス１８５ａは、コンテキストファイル１７５ａに含まれる全てのＤＡＯクラスの定義に対して矛盾なく動作可能である。このため、サンプルクラス１８５ａを用いて即座にデータベース２１０に対する処理の動作確認を行うことができる。また、実際の業務サービスを作成する際には、サンプルクラス１８５ａを複写して利用することで、コンテキストファイル１７５ａにおけるＤＡＯクラスの設定に対して矛盾が生じないため、効率良くコーディング作業を行うことができる。
【０１５３】
以下では、生成されたクラスファイルの実行時の関連性を詳しく説明する。以下の説明では、生成されたクラスファイルを業務サービスを提供するＷｅｂアプリケーションとしてアプリケーションサーバ上で動作させる場合を例に挙げて説明する。
【０１５４】
図３４は、Ｗｅｂシステムの構成を示す図である。このＷｅｂシステムは、端末装置５０、ＤＢサーバ２００、データベース２１０およびアプリケーションサーバ３００を有する。
【０１５５】
端末装置５０は、ユーザが利用する情報処理装置である。ユーザは、端末装置５０の画面に出力されるブラウザを操作してアプリケーションサーバ３００に対する処理要求を入力することができる。
【０１５６】
ＤＢサーバ２００は、データベース２１０をアプリケーションサーバ３００からの要求に応じて操作するサーバである。
アプリケーションサーバ３００は、端末装置５０から受け付けた処理要求に応じてＳＱＬ文を生成し、ＤＢサーバ２００にデータベース２１０の操作を依頼する。アプリケーションサーバ３００は、処理の役割に応じた３つの層（レイヤ）を有する。具体的には、Ｗｅｂ層３１０、サービス層３２０およびデータアクセス層３３０である。
【０１５７】
Ｗｅｂ層３１０は、端末装置５０のブラウザを介して業務サービスに対する処理要求を受け付ける。Ｗｅｂ層３１０は、Ｗｅｂ層コンポーネント３１１を有する。
Ｗｅｂ層コンポーネント３１１は、業務サービスの端末装置５０に対するインタフェースである。Ｗｅｂ層コンポーネント３１１は、端末装置５０からの業務サービスに対する処理要求を受け付けてサービスクラス３２１に出力する。また、Ｗｅｂ層コンポーネント３１１は、サービスクラス３２１から業務サービスに対する処理要求の結果を受け付けて端末装置５０のブラウザに応答する。
【０１５８】
サービス層３２０は、業務ロジックを実行するための層である。サービス層３２０は、サービスクラス３２１を有する。
サービスクラス３２１は、Ｗｅｂ層コンポーネント３１１からの業務処理要求に基づいて、業務処理を実行する。サービスクラス３２１は、業務処理要求に応じたテーブル操作をＤＡＯクラス３３１に依頼する。また、サービスクラス３２１は、ＤＡＯクラス３３１がＯＲＭクラス３３２によってカプセル化したデータを受け付け、業務処理を実行する。更に、サービスクラス３２１は、処理後のデータをＯＲＭクラス３３２によってカプセル化して、ＤＡＯクラス３３１に出力すると共に、データベース２１０のテーブル操作を依頼する。
【０１５９】
サービスクラス３２１は、例えば、上述のサンプルクラス１８５ａに対応する。
データアクセス層３３０は、データベース２１０にアクセスするための層である。データアクセス層３３０は、ＤＡＯクラス３３１およびＯＲＭクラス３３２を有する。
【０１６０】
ＤＡＯクラス３３１は、サービスクラス３２１からのテーブル操作依頼に基づいてデータベース２１０上のテーブルを操作するためのＳＱＬ文を生成し、ＤＢサーバ２００に送信する。そして、ＤＡＯクラス３３１は、例えば、ＤＢサーバ２００からデータの取得結果を取得すると、ＯＲＭクラス３３２によって取得したデータをカプセル化してサービスクラス３２１に出力する。
【０１６１】
ＤＡＯクラス３３１は、例えば、上述のＤＡＯクラス１４５ａに対応する。また、ＯＲＭクラス３３２は、例えば、ＯＲＭクラス１２５ａに対応する。
ここで、サービスクラス３２１、ＤＡＯクラス３３１およびＯＲＭクラス３３２は、コンテナ３５０上で実行される。
【０１６２】
コンテナ３５０は、ＤＩやＡＯＰの手法を組み込んだ各クラスの実行環境である。コンテナ３５０は、各クラス間の関連付けを行う。コンテナ３５０は、必要に応じて各クラスで共通的に利用可能なコンポーネントを共通部品記憶部３４０から呼び出し、各クラスの呼び出し前後にその機能を付加したり、各クラスから他のクラスを参照したりすることを可能とする。例えば、コンテナ３５０は、サービスクラス３２１の実行時に、ＤＢサーバ２００との接続処理、ログ出力処理および例外処理などのコンポーネントを実行し、これらの機能をサービスクラス３２１に付加する。同様に、ＤＡＯクラス３３１の実行時に、ログ出力処理や例外処理などのコンポーネントを実行し、これらの機能をＤＡＯクラス３３１に付加する。コンテナ３５０は、実行部１９５に対応する。
【０１６３】
図３５は、コンテナによるオブジェクト間の関連付けを示す図である。コンテナ３５０では、各オブジェクトがコンテキスト情報３５４に基づいて関連付けられる。例えば、コンテナ３５０上では、コンテキスト情報３５４に基づいて、オブジェクト３５１，３５２，３５３が生成される。そして、コンテキスト情報３５４に基づいて、例えば、オブジェクト３５１からオブジェクト３５２，３５３への参照や呼び出しが行われる。コンテキスト情報３５４は、コンテキストファイル１７５ａに対応する。
【０１６４】
このようにして、サービスクラス３２１、ＤＡＯクラス３３１、ＯＲＭクラス３３２および共通コンポーネントのクラスの間の関連付けが行われる。
以上、説明したようにコンピュータ１００によれば、データベース２１０に格納された複数のテーブルの情報に基づいて、各テーブルに対応するＯＲＭクラス、ＤＡＯクラスがそれぞれ自動生成される。また、生成された各クラスと各クラスで共通的に利用される共通のコンポーネントとの関連付けを定義したコンテキストファイルが自動的に生成される。このため、各クラスと共通コンポーネントとを関連付けるためのコーディングを削減することができ、ＤＡＯクラスの生成後に実行可能とするまでに要していた工数が削減される。これにより、開発者は、システム固有の業務ロジックの開発に注力することが可能となり、システム開発作業を効率的に行うことができる。
【０１６５】
また、コンピュータ１００は、生成したＤＡＯクラスを利用するサンプルクラスを自動生成し、サンプルクラスをコンテキストファイルに設定する。開発者は、このサンプルクラスを利用することで、生成したＤＡＯクラスを介したデータベース２１０のテーブルアクセスを伴う処理の動作確認を即座に開始することができる。
【０１６６】
［第２の実施の形態］
次に、第２の実施の形態を図面を参照して詳細に説明する。前述の第１の実施の形態との相違点を中心に説明し、同様の事項については説明を省略する。
【０１６７】
第１の実施の形態では、データベース２１０が既に構築済みの場合の例を示した。これに対し、第２の実施の形態では、データベース２１０に新規にテーブルを構築する場合に関して説明する。
【０１６８】
第２の実施の形態のコンピュータのハードウェア構成は、図２に示す第１の実施の形態のコンピュータ１００のハードウェア構成と同一のため、説明を省略する。
図３６は、第２の実施の形態のコンピュータの機能を示すブロック図である。コンピュータ１００ａは、ＯＲＭファイル取得部１１０ａ、ＯＲＭファイル記憶部１１５、ＤＤＬファイル生成部１１６、ＯＲＭクラス生成部１２０、ＯＲＭクラス記憶部１２５、テンプレート記憶部１３０、ＤＡＯクラス生成部１４０、ＤＡＯクラス記憶部１４５、クエリ記述ファイル生成部１５０、クエリ記述ファイル記憶部１５５、共通部品記憶部１６０、コンテキストファイル生成部１７０、コンテキストファイル記憶部１７５、サンプルクラス生成部１８０およびサンプルクラス記憶部１８５を有する。なお、ＯＲＭファイル取得部１１０ａおよびＤＤＬファイル生成部１１６以外の構成（配置部１９０および実行部１９５を含む）に関しては、第１の実施の形態のコンピュータ１００の構成と同一のため、説明を省略する。
【０１６９】
ＯＲＭファイル取得部１１０ａは、ＯＲＭファイル２０ａを取得する。ＯＲＭファイル２０ａは、データベース２１０に格納する新規テーブル毎に、開発者により予め作成される。ＯＲＭファイル取得部１１０ａは、取得したＯＲＭファイル２０ａをＯＲＭファイル記憶部１１５に格納する。
【０１７０】
ＤＤＬファイル生成部１１６は、ＯＲファイル記憶部１１５に記憶されたＯＲＭファイルを取得する。そして、ＤＤＬファイル生成部１１６は、生成したＤＤＬファイルをＤＢサーバ２００に送信する。ＤＢサーバ２００は、取得したＤＤＬファイルに基づいてデータベース２１０に新たなテーブルを構築する。ＤＤＬファイル生成部１１６の機能を実現するアプリケーションとして、例えば、Hibernateを用いることができる。
【０１７１】
次に、以上のような構成を備えるコンピュータ１００ａにおいて実行される処理の詳細を説明する。
図３７は、第２の実施の形態のプログラム生成処理の手順を示すフローチャートである。以下、図３７に示す処理をステップ番号に沿って説明する。
【０１７２】
［ステップＳ１１０］ＯＲＭファイル取得部１１０ａは、ＯＲＭファイル２０ａを取得し、取得したＯＲＭファイル２０ａをＯＲＭファイル記憶部１１５に格納する。
［ステップＳ１２０］ＤＤＬファイル生成部１１６は、ＯＲＭファイル記憶部１１５に記憶されたＯＲＭファイル２０ａに基づいて、データベース２１０を構築するためのＤＤＬファイルを生成する。ＤＤＬファイル生成部１１６は、生成したＤＤＬファイルをＤＢサーバ２００に出力する。なお、ＤＢサーバ２００は、このＤＤＬファイルに基づいてデータベース２１０を構築する。
【０１７３】
［ステップＳ１３０］ＯＲＭクラス生成部１２０は、ＯＲＭファイル記憶部１１５に記憶されたＯＲＭファイル２０ａに基づいて、データベース２１０の各テーブルに値を格納または、各テーブルから値を読み出すためのＯＲＭクラスを生成する。ＯＲＭクラス生成部１２０は、生成したＯＲＭクラスをＯＲＭクラス記憶部１２５に格納する。
【０１７４】
［ステップＳ１４０］ＤＡＯクラス生成部１４０は、テンプレート記憶部１３０に記憶されたＤＡＯクラス用テンプレートファイル１３１とＯＲＭクラス記憶部１２５に記憶されたＯＲＭクラスの名称とに基づいて、ＤＡＯクラスを生成する。ＤＡＯクラス生成部１４０は、生成したＤＡＯクラスをＤＡＯクラス記憶部１４５に格納する。
【０１７５】
［ステップＳ１５０］クエリ記述ファイル生成部１５０は、テンプレート記憶部１３０に記憶されたクエリ記述用テンプレートファイル１３２とＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスの名称とに基づいて、クエリ記述ファイルを生成する。クエリ記述ファイル生成部１５０は、生成したクエリ記述ファイルをクエリ記述ファイル記憶部１５５に格納する。
【０１７６】
［ステップＳ１６０］コンテキストファイル生成部１７０は、テンプレート記憶部１３０に記憶されたコンテキスト用テンプレートファイル１３３とＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスの名称とに基づいて、コンテキストファイルを生成する。コンテキストファイル生成部１７０は、生成したコンテキストファイル記憶部１７５に格納する。
【０１７７】
［ステップＳ１７０］サンプルクラス生成部１８０は、テンプレート記憶部１３０に記憶されたサンプルクラス用テンプレートファイル１３４とＤＡＯクラス記憶部１４５に記憶されたＤＡＯクラスの名称とに基づいて、サンプルのサービスクラスを生成する。サンプルクラス生成部１８０は、生成したサービスクラスをサンプルクラス記憶部１８５に格納する。
【０１７８】
［ステップＳ１８０］配置部１９０は、コンテキストファイル記憶部１７５に記憶されたコンテキストファイルに基づいて、ＤＡＯクラス、サービスクラスおよび共通コンポーネントなどの各クラスをメモリ上に配置する。そして、実行部１９５は、コンテキストファイルに基づいて、配置部１９０が配置したクラス間の関連付けを行い、サンプルのサービスを実行する。
【０１７９】
このようにして、データベース２１０にテーブルを構築するためのＤＤＬファイルと共にＤＡＯクラスやサンプルのサービスクラスなどが自動生成される。なお、上記ステップＳ１２０の処理は、ステップＳ１３０〜Ｓ１７０の処理と非同期で行うことも考えられる。
【０１８０】
次に、上記ステップＳ１２０の処理を更に詳しく説明する。なお、ステップＳ１３０〜Ｓ１８０の処理の詳細は、図１９で示したステップＳ２〜Ｓ７の処理の詳細と同一であるため、説明を省略する。
【０１８１】
図３８は、第２の実施の形態のＤＤＬファイル生成処理の手順を示すフローチャートである。以下、図３８に示す処理をステップ番号に沿って説明する。なお、以下の処理は、上記ステップＳ１２０の処理を詳細に説明したものである。
【０１８２】
［ステップＳ１１１］ＤＤＬファイル生成部１１６は、ＯＲＭファイル記憶部１１５に記憶されたＤＤＬファイル未作成のＯＲＭファイルを読み出す。
［ステップＳ１１２］ＤＤＬファイル生成部１１６は、参照したＯＲＭファイルに含まれるカラムのうち、未抽出であるカラムを抽出し、そのカラムの属性情報を取得する。
【０１８３】
［ステップＳ１１３］ＤＤＬファイル生成部１１６は、参照したテーブルに含まれる全てのカラムの情報を抽出したか否かを判定する。全てのカラムの情報を抽出済みの場合、処理がステップＳ１１４に移される。未抽出のカラムの情報が存在する場合、処理がステップＳ１１２に移される。
【０１８４】
［ステップＳ１１４］ＤＤＬファイル生成部１１６は、抽出したカラムの情報に基づいて、ＤＤＬファイルを生成し、ＤＢサーバ２００に送信する。
［ステップＳ１１５］ＤＤＬファイル生成部１１６は、ＯＲＭファイル記憶部１１５に記憶された全てのＯＲＭファイルに関してＤＤＬファイルを生成済みであるか否かを判定する。全てのＯＲＭファイルに関してＤＤＬファイルを生成済みである場合、処理が完了する。ＤＤＬファイルを未生成のＯＲＭファイルが存在する場合、処理がステップＳ１１１に移される。
【０１８５】
このようにして、ＯＲＭファイルで定義されるテーブルのカラムが参照され、それぞれのカラムの情報が、該当のテーブルを構築するためのＤＤＬファイルにマッピングされる。
【０１８６】
図３９は、生成されたＤＤＬファイルの例を示す図である。ＤＤＬファイル１１６ａは、図６に示す“Grouptbl”テーブルのＤＤＬである“grouptbl.ddl”の例を示している。ＤＢサーバ２００は、ＤＤＬファイル１１６ａに基づいてデータベース２１０に“Grouptbl”テーブルを構築する。
【０１８７】
このように、データベース２１０を構築するためのＤＤＬファイルと共にＤＡＯクラスやサンプルのサービスクラスなどが自動生成される。これにより、第１の実施の形態で示した効果と同様の効果を得ることができる。更に、データベース２１０や対象のテーブルが構築されていない場合にも、データベース２１０の構築と共にデータベース２１０にアクセスするＤＡＯクラスおよびサンプルのサービスクラスを生成することが可能となる。このため、開発者は、データベース２１０にテーブルを構築した直後から、データベース２１０のテーブルに対する操作を行うことができる。そして、サンプルのサービスクラスに基づいて、容易に他のアプリケーションを作成することができ、開発の効率を向上することができる。
【０１８８】
以上、本発明のソフトウェア開発支援プログラム、ソフトウェア開発支援装置およびソフトウェア開発支援方法を図示の実施の形態に基づいて説明したが、これらに限定されるものではなく、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。更に、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【０１８９】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、コンピュータが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【０１９０】
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体には、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ＨＤＤ、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）などがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc - Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto - Optical disk）などがある。
【０１９１】
上記プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータに格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１９２】
上記プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラム若しくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【図面の簡単な説明】
【０１９３】
【図１】本実施の形態の概要を示す図である。
【図２】第１の実施の形態のコンピュータのハードウェア構成を示す図である。
【図３】第１の実施の形態のコンピュータの機能を示す第１のブロック図である。
【図４】第１の実施の形態のコンピュータの機能を示す第２のブロック図である。
【図５】ＤＢ接続情報の例を示す図である。
【図６】データベースに格納されるテーブル構造の例を示す図である。
【図７】テンプレート記憶部に格納されるファイルの例を示す図である。
【図８】ＤＡＯクラス用テンプレートファイルの例を示す図である。
【図９】クエリ記述用テンプレートファイルの例を示す図である。
【図１０】コンテキスト用テンプレートファイルの例を示す第１の図である。
【図１１】コンテキスト用テンプレートファイルの例を示す第２の図である。
【図１２】コンテキスト用テンプレートファイルの例を示す第３の図である。
【図１３】コンテキスト用テンプレートファイルの例を示す第４の図である。
【図１４】コンテキスト用テンプレートファイルの例を示す第５の図である。
【図１５】サンプルクラス用テンプレートファイルの例を示す図である。
【図１６】共通部品記憶部に格納されるファイルの例を示す図である。
【図１７】汎用ＤＡＯクラスの例を示す図である。
【図１８】第１の実施の形態のプログラム生成処理の手順を示すフローチャートである。
【図１９】第１の実施の形態のＯＲＭファイル生成処理の手順を示すフローチャートである。
【図２０】第１の実施の形態のＯＲＭクラス生成処理の手順を示すフローチャートである。
【図２１】第１の実施の形態のＤＡＯクラス生成処理の手順を示すフローチャートである。
【図２２】第１の実施の形態のクエリ記述ファイル生成処理の手順を示すフローチャートである。
【図２３】第１の実施の形態のコンテキストファイル生成処理の手順を示すフローチャートである。
【図２４】第１の実施の形態のサンプルアプリケーション生成処理の手順を示すフローチャートである。
【図２５】第１の実施の形態のサンプルアプリケーション実行処理の手順を示すフローチャートである。
【図２６】テンプレートから生成されるファイルの一覧の例を示す図である。
【図２７】生成されたＯＲＭファイルの例を示す図である。
【図２８】生成されたＯＲＭクラスの例を示す図である。
【図２９】生成されたＤＡＯクラスの例を示す図である。
【図３０】生成されたクエリ記述ファイルの例を示す図である。
【図３１】生成されたコンテキストファイルの例を示す第１の図である。
【図３２】生成されたコンテキストファイルの例を示す第２の図である。
【図３３】生成されたサンプルクラスの例を示す図である。
【図３４】Ｗｅｂシステムの構成を示す図である。
【図３５】コンテナによるオブジェクト間の関連付けを示す図である。
【図３６】第２の実施の形態のコンピュータの機能を示すブロック図である。
【図３７】第２の実施の形態のプログラム生成処理の手順を示すフローチャートである。
【図３８】第２の実施の形態のＤＤＬファイル生成処理の手順を示すフローチャートである。
【図３９】生成されたＤＤＬファイルの例を示す図である。
【符号の説明】
【０１９４】
１  コンピュータ
１ａ  データアクセス部品生成手段
１ｂ  共通部品記憶手段
１ｃ  登録情報生成手段
２  データベース
２ａ，２ｂ，２ｃ  テーブル
３  登録情報
４  プログラム実行環境
４ａ，４ｂ，４ｃ  データアクセス部品
４ｄ  共通部品
【図１】
2010079803.tif 000003
【図２】
2010079803.tif 000004
【図３】
2010079803.tif 000005
【図４】
2010079803.tif 000006
【図５】
2010079803.tif 000007
【図６】
2010079803.tif 000008
【図７】
2010079803.tif 000009
【図８】
2010079803.tif 000010
【図９】
2010079803.tif 000011
【図１０】
2010079803.tif 000012
【図１１】
2010079803.tif 000013
【図１２】
2010079803.tif 000014
【図１３】
2010079803.tif 000015
【図１４】
2010079803.tif 000016
【図１５】
2010079803.tif 000017
【図１６】
2010079803.tif 000018
【図１７】
2010079803.tif 000019
【図１８】
2010079803.tif 000020
【図１９】
2010079803.tif 000021
【図２０】
2010079803.tif 000022
【図２１】
2010079803.tif 000023
【図２２】
2010079803.tif 000024
【図２３】
2010079803.tif 000025
【図２４】
2010079803.tif 000026
【図２５】
2010079803.tif 000027
【図２６】
2010079803.tif 000028
【図２７】
2010079803.tif 000029
【図２８】
2010079803.tif 000030
【図２９】
2010079803.tif 000031
【図３０】
2010079803.tif 000032
【図３１】
2010079803.tif 000033
【図３２】
2010079803.tif 000034
【図３３】
2010079803.tif 000035
【図３４】
2010079803.tif 000036
【図３５】
2010079803.tif 000037
【図３６】
2010079803.tif 000038
【図３７】
2010079803.tif 000039
【図３８】
2010079803.tif 000040
【図３９】
2010079803.tif 000041