NetBeans UML のカスタムコード生成
執筆: Craig Conover および
Bob May
2008 年 4 月 [リビジョン番号: V1-2]
このチュートリアルでは、NetBeans 6.1 リリースを使用します。
組み込みコード生成機構は、NetBeans 6.1 リリースの UML に加えられた重要な追加機能です。
「新規プロジェクト」ウィザードを使用して Java クラスを作成するとき、NetBeans IDE はコード生成テンプレートを使用してソースを生成しますが、その際にトークン変数を適切な情報 (作成者名、作成日、ライセンス、クラス名、コンストラクタ名、その他属性) に置き換えます。NetBeans 6.1 より前、これらのコード生成テンプレートでは、あなたが開発者として提供できたであろうカスタム動作がサポートされていませんでした。
一方、NetBeans 6.1 では、カスタムコード生成を支援する Freemarker というオープンソーステンプレートエンジンが採用されています。以前の NetBeans テンプレートと Freemarker を使用するテンプレートの違いは、スクリプトコードをテンプレート内で使用してコンテンツ生成をカスタマイズする機能にあります。この機能はほかの NetBeans 機能にも適用でき、UML モジュールコード生成機能を介してコードをカスタマイズするために、テンプレートを使用できるようになりました。これにより、UML 機能を使用して生成するコードの柔軟性が大幅に向上します。
目次
必要なソフトウェア
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
NetBeans 6.1 UML 機能を使用すると、Freemarker テンプレートファイルのセットが IDE に追加されます。Freemarker の情報については、http://freemarker.org/ を参照してください。Freemarker ソースと一緒に使用できる NetBeans Freemarker プラグインについては、http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=3755 を参照してください。
テンプレートを使用することで、標準 Java ソースファイルテンプレートを使用して標準 Java ソースファイル (クラス、インタフェース、および列挙) をモデル要素から生成できるようになります。Freemarker テンプレートには、NetBeans のほかのテンプレートと同様に、カスタマイズする目的でアクセスできます。http://wiki.netbeans.org/FaqFreeMarker も参照してください。
モデル駆動型開発
UML を Freemarker と組み合わせる主な利点は、モデル駆動型開発 (MDD) が行えることです。MDD は要素の属性を Freemarker テンプレートにマッピングすることで開発を行えることを意味するので、複雑なプログラミングデザインパターンの生成を可能にするステレオタイプでタグ付けされたモデル要素を作成できます。
たとえば、ejb-stateless というステレオタイプを伴う単一のクラス要素を使用し、EJB アプリケーションの Bean クラス、ホームインタフェース、リモートインタフェースのソースファイルを生成できます。
個々のメソッドを business のようにステレオタイプ化し、クライアントに対してメソッドを公開することを示せます。適用領域を限定した例を挙げると、ショッピングカート EJB の完全な実装を表すことができる、shopping-cart という名前のステレオタイプを使用できます。これらのステレオタイプは、必要なコードを生成する特定のテンプレートに個別にマッピングできます。
Freemarker テンプレートを正しく作成するための背景
この記事はスクリプト作成自体を中心とするものではありませんが、正常に動作するカスタムスクリプトの記述と対応するテンプレートの作成には、次の 3 つの技能が役立ちます。
Freemarker スクリプト作成の知識
ソースデータモデルの知識
ターゲット出力形式ドメインに精通していること
Freemarker スクリプト作成
1 つめの技能は、Freemarker スクリプト言語について、ある程度習熟していることです。Freemarker はほかのスクリプト作成言語に類似しています。Freemarker の詳細については、SourceForge Web サイトの Freemarker オンラインマニュアル を参照してください。
ソースデータモデル
使用するソースデータモデルは、複雑さによって異なることがあります。UML データモデルには 2 つの要素があり、1 つはモデル名が classInfo の ClassInfo 型の要素、もう 1 つは モデル名が modelElement の Classifier 型の要素です。これらの要素は、このあとの手順でテンプレートを使用してスクリプト作成を操作する際に確認します。
ターゲット出力形式ドメイン
出力形式は、コード生成の結果です。プログラミング言語のターゲットの設定は、簡易なタスクではありません。ユーザーは、言語パーサーが思考するのと同じように、思考しなければなりません。Java の場合、ターゲットとするものを package 宣言で始め、次に import 文、とする必要があります。クラス宣言には、スコープ、クラス名、extends 句、実装などの考慮すべき多数の変数があります。
また、コメントもクラス宣言に付随することがあります。属性、メソッド、それらの署名とコメントについても考慮する必要があります。空白についても同様に考慮が必要です。
しかし、もしユーザーがモデリングに打ち込み、ターゲット出力が何であるかを理解し続ければ、ソースコード生成時の実装を簡単に進めることができ、モデル駆動型開発の恩恵を得ることができるでしょう。
BankApp サンプルプロジェクトのカスタムコード生成での使用
次に進む前に、「必要なソフトウェア」で示された、配布用 ZIP が入手済みであることを確認する必要があります。この配布用 ZIP には、Freeemarker コード生成テンプレートと NetBeans プロジェクトが含まれます。また、IDE に付属する BankApp サンプルプロジェクトも使用します。
この記事には、カスタムコード生成に関するチュートリアルが含まれます。カスタムコード生成チュートリアルの開始点を作成するために、IDE の UML 機能に付属するサンプルプロジェクトを使用できます。
開始するには、次の手順に従って、付属の BankApp サンプルプロジェクト用の Java および UML プロジェクトを作成する必要があります。
IDE のメインメニューから「ファイル」>「新規プロジェクト」を選択します。
「プロジェクトを選択」ページの「カテゴリ」区画で、「サンプル」ノードを展開し、「UML」ノードを選択します。利用可能な UML サンプルプロジェクトが「プロジェクト」区画に反映されます。
「プロジェクト」区画で「UML Bank App Sample」を選択し、「次へ」をクリックします。
「名前と場所」ページで、Java プロジェクト名のデフォルト値 UMLBankAppSample をそのまま使用するか、そのプロジェクトがすでにある場合は変更します。
「完了」をクリックします。NetBeans IDE で、Java プロジェクトと UML プロジェクトの 2 つのプロジェクトが作成されます。デフォルトの名前を選択した場合、Java プロジェクトの名前は UMLBankAppSample となり、UML プロジェクトの名前は UMLBankAppSample-Model となります。
UML プロジェクトを展開し、「モデル」ノードのすべてのサブノードを表示します。ここには、bankpack という 1 つのパッケージ、いくつかのクラス要素、および 1 つのインタフェース要素があります。これらの要素は、Java プロジェクトからリバースエンジニアリングされたものです。
これらの要素のいずれかを右クリックし、「ソースにナビゲート」を選択すると、Java プロジェクト内のソースファイルが NetBeans エディタで開きます。
これらの要素に変更を加え、「コードを生成」を実行します - Java プロジェクト内のソースファイルは、適切に更新されます。Java プロジェクトと UML プロジェクトの関係を知っておくと役に立ちます。次は、これらの各要素のコードがどのように生成されるのかと、コードの生成をどのようにカスタマイズ出来るのかに焦点を当てます。
これから使用する Java および UML プロジェクトを作成しました。今度は、UML コード生成プロセスで使用するツールを見ていきましょう。
UML コード生成プロセスで使用される NetBeans UML ツール
カスタムテンプレートの作成と、それらのモデル要素へのマッピングの前に、これから使用する NetBeans IDE 内のツールとそれらの関係について理解することが重要です。
ツールには、次のパネル、カスタマイザ、およびダイアログが含まれます。
NetBeans テンプレートマネージャー。このツールは、テンプレートフォルダ内のテンプレートにアクセスするために使用します。
NetBeans UML テンプレートオプションパネル。このツールは、テンプレートファイルをモデル要素にマッピングするために使用します。
NetBeans UML プロジェクトカスタマイザ (プロジェクトプロパティー用)。このツールは、ドメインテンプレートを有効にするために使用します。
「コードを生成」ダイアログ。このダイアログは、コードをテンプレートから作成するために使用します。
これらの各ツールは、UML コード生成プロセスでのテンプレートの構成と使用のための役割を果たします。
NetBeans テンプレートマネージャーを使用するテンプレートファイルの管理
NetBeans 6.1 のすべてのテンプレートは、Freemarker テンプレートエンジンに基づいています。
IDE 内では、NetBeans テンプレートマネージャーを使用して Freemarker テンプレートを管理できます。テンプレートにアクセスするには、次の手順に従います。
IDE のメインメニューから「ツール」>「テンプレート」を選択します。IDE で「テンプレートマネージャー」ダイアログが表示されます。カテゴリテンプレートに使用されている多数のフォルダが表示されます。
「UML」フォルダとそのサブフォルダを展開します。
IDE に追加するテンプレートファイルには、Freemarker スクリプトを格納する必要はありません。したがって、テンプレートマネージャーにファイルを追加するときに、特定のファイル形式にする必要はありません。Java コードを生成するためのテンプレートは、コードを最大限に再利用する様に設計されています。
テンプレートファイルを追加するときは、次のことに留意してください。
CompilationUnit.java ファイルは、Java クラス、インタフェース、および列挙の各ソースファイルを生成するための唯一のテンプレートとして機能します。
そのほかのファイル (*Declaration.java ファイルおよび DeclLib.ftl ) は、 CompilationUnit.java ファイル内からリンクされています。
そのほかのフォルダに多数のテンプレートがあります。いくつかは、UML 生成用カスタムテンプレートで利用できる、有用なスクリプト作成例を含んでいるかもしれません。ただし、UML コード生成プロセスでは、UML/Code Generation とそのサブフォルダに一覧表示されるテンプレートのみが使用されます。
独自のカスタムサブフォルダを UML/Code Generation フォルダの下に作成してテンプレートを格納でき、これらのサブフォルダは UML コード生成プロセスでも使用できるようになります。
この記事では、Freemarker テンプレートエンジンのデフォルトで提供される NetBeans UML コード生成プロセスの機能を利用する、非常に簡単な Freemarker テンプレートスクリプト作成を使用します。
NetBeans UML のオプションパネルでのドメインテンプレートのマッピング
最初の手順は、カスタム Freemarker テンプレートファイルを作成することです。Java コード生成用に使用できるテンプレートが、すでにいくつかあります。
ただし、テンプレートファイルの使用時、これらのテンプレートファイルを自分のモデルのモデル要素にマッピングする必要があります。このマッピングは、NetBeans UML の「オプション」パネルで次の操作を実行して構成できます。
IDE のメインメニューから「ツール」>「オプション」を選択します。
「UML」オプションカテゴリをクリックします。
「テンプレート」タブをクリックします。
「Basic Class」ノードをツリーから選択します。
IDE は、Java/Basic Class ドメインテンプレートのプロパティーを表示し、これは型が「クラス」でステレオタイプを持たないモデル内のすべての要素が UML/Code Generation/Java/CompilationUnit.java の下のテンプレートファイルにマッピングされ、出力が要素名と同じ名前のファイルで拡張子として .java が付くことを示します。
ドメインオブジェクト用のコード生成のためのカスタムコードテンプレートファイルの使用
UML 機能には、数種類の要素 (クラス、インタフェース、アクターなど) があります。これらの要素は、特定の用途で機能する、または特定の動作を処理する要素を特定するために、ステレオタイプ化できます。ドメインオブジェクトは、DSL (Domain Specific Language) 特有のオブジェクトです。
たとえば、ATM 機ドメイン (このチュートリアルで使用されているドメインではない) に、次のようなドメインオブジェクトがいくつか含まれるとします。
Customer (顧客)
Account (口座)
Deposit (預金)
Withdrawal (払い戻し)
Bank (銀行)
これらのドメインオブジェクトは、それぞれ次のステレオタイプを持つクラス要素として UML クラス図に表せます。
customer
account
deposit
withdrawal
bank
ドメインオブジェクトのコードを生成するには、カスタムのコードテンプレートファイルを作成する必要があります。カスタムコードテンプレートファイルには、ソースファイルに生成される必須の属性とメソッドが含まれます。
テンプレートファイルを作成すると、コード生成プロセスで、要素とステレオタイプの組み合わせを適切なテンプレートファイルにマッピングする必要があります。ドメインテンプレートでは、モデル要素型とステレオタイプを 1 つまたは複数のテンプレートファイルにマッピングできます。
UML テンプレートオプションパネルを使用すると、必要に応じてカテゴリフォルダを作成でき、ドメインテンプレートをこれらのカテゴリに追加できます。カテゴリとドメインテンプレートは自由に編成できますが、テンプレートファイルにアクセスする NetBeans テンプレートマネージャーで作成するレイアウトに従うようにします。
UML テンプレートオプションパネルを使用した UML プロジェクトのためのドメインテンプレートの有効化
ドメインテンプレートを作成したら、個別の UML プロジェクトごとにテンプレートを有効または無効にする必要があります。デフォルトの Java ドメインテンプレートは、すべての UML プロジェクトに対して自動的に有効になります。ただし、カスタムのドメインテンプレートを UML テンプレートオプションパネルで作成した場合は、デフォルトではどの UML プロジェクトに対してもドメインテンプレートは有効になりません。
UML プロジェクトカスタマイザ (プロジェクトのプロパティー) を使用すると、UML プロジェクトに対して有効にするテンプレートをカスタマイズできます。
ドメインテンプレートを UML プロジェクトに対して有効にするには、次の手順に従います。
UML プロジェクトノード (デフォルトの名前は UMLBankAppSample-Model ) を右クリックします。
「プロパティー」を選択し、UML の「プロジェクトカスタマイザ」を開きます。
カスタマイザダイアログが表示されたら、「コード生成」カテゴリを選択します。
最下部のパネルで、Java ノードを展開します。
「プロジェクトプロパティー」パネルの理解と使用
この例では、「ターゲットプロジェクト」フィールドは空になっています。これは、この UML プロジェクトが、Java プロジェクトの UMLBankAppSample をリバースエンジニアリングしたものであるためです。
コードを最初に生成するとき、IDE はターゲットプロジェクトを構成せず、最下部の状態メッセージは有効なターゲットプロジェクトを選択する必要があることを警告します。
「プロジェクトプロパティー」パネルを使用するには、次の手順に従います。
「了解」をクリックし、ターゲットプロジェクトを指定せずにプロパティーを保存します。同じユーザーインタフェースは、このあとのワークフローの「コードを生成」ダイアログにも表示されますが、ワークフローのこの時点では、「了解」をクリックしてコードを生成する前に、ターゲットプロジェクトなどのすべての必須フィールドに入力する必要があります。
最下部の「テンプレート」区画にある Java ノードを展開し、3 つのデフォルトドメインテンプレートを表示します。
Basic Class
Basic Interface
Basic Enumeration
個別のテンプレートごとに、特定の要素のコード生成を無効にできます。たとえば、モデル内にステレオタイプがない列挙要素のコードを生成しない場合、「プロパティー」パネルのドメインテンプレートの選択を解除できます。
カスタムドメインテンプレートを追加した場合、このパネルでそれらのテンプレートのコード生成を有効にできます。また、プロジェクトカスタマイザの「コードを生成する前に問い合わせる」オプションが有効になっていれば、コード生成プロセスを呼び出す際の構成中にもこれらすべてのオプションを使用できます。デフォルトでは、このダイアログオプションは有効になります。
作成したモデルからのコードの生成
すべてのドメインテンプレートを設定し、作成した UML プロジェクトに対して適切に有効になるよう設定したら、モデルからコードを生成できます。これを実行するには、次の手順に従います。
UML プロジェクトノードを右クリックし、「コードを生成」アクションを選択します。IDE で、プロパティーが適切に構成されていることを確認するための「コードを生成」ダイアログが表示されます。デフォルトでは、「テンプレート」区画は表示されません。
「テンプレートを表示」ボタンをクリックし、次の画像に示すようにドメインテンプレートを表示します。
「了解」ボタンをクリックし、コード生成を開始します。メッセージが NetBeans の「出力」ウィンドウの「コードを生成 ログ」タブに表示されます。コード生成プロセスの状態がここに表示されます。メッセージを見て、コードが適切に生成されたことを確認します。
次の節では、現在の Java テンプレートを整理することで作成される EJB テンプレートを使用します。これらのテンプレートを作成する手順は、ここでは取り上げませんが、整理されて完成したテンプレートは、Java テンプレートよりも簡素化された見本になります。
エンタープライズ Java Bean 3.0 カスタムテンプレートの作成
UML プロジェクトから Java コードを生成する、デフォルトの Java コードテンプレートを構成したら、カスタムテンプレートを使用して、標準的なステートレスセッション EJB などのアプリケーションアーティファクトのためのソースファイルを生成できます。
堅牢なコード生成テンプレートを作成するのは、かなり複雑なタスクになることがあります。カスタムテンプレートの使用方法の学習を容易にするために、ステートレスセッション EJB 用の 3 つの必須コード生成テンプレートが作成され、配布用 ZIP で提供されています。これらのテンプレートは、ステートレスセッション EJB の完全なソリューションではありません。これらは、クラス要素からのメソッドを使用して適切にタグが付けられている場合、Bean クラスとホームインタフェースおよびリモートインタフェースのみを生成します。
より完全な実装では、個々の操作をローカル、リモート、またはその両方としてステレオタイプ化でき、どのインタフェースで操作を宣言するべきかを示すことができます。
コード生成テンプレートの取得と IDE への追加
コード生成テンプレートを IDE に追加するには、テンプレートをダウンロードし、テンプレートマネージャーを使用してそれらを次のように IDE に追加します。
この記事で提供されているソースを解凍し、次のテンプレートを取得したことを確認します。
StatelessBean.flt
StatelessRemote.ftl
StatelessLocal.ftl
これらのテンプレートを IDE に追加します。メインメニューから「ツール」>「テンプレート」を選択します。NetBeans テンプレートマネージャーが開きます。
UML/Code Generation フォルダに移動して選択します。
「新規フォルダ」ボタンをクリックし、フォルダに EJB 3.0 という名前を付けます。
「追加」ボタンをクリックします。
テンプレートファイルを展開したフォルダの場所に移動します。
いずれかのファイルを選択し、IDE に追加します。
残りの 2 つのテンプレートについて、手順 5 から 7 を繰り返します。
3 つのテンプレートをすべて選択します。「エディタで開く」ボタンをクリックします。IDE で新規テンプレートファイルが NetBeans エディタウィンドウに表示されます。
テンプレートスクリプトを閲覧して実行内容を理解します。これらの 3 つのテンプレートファイルは、Java クラスを生成するために使用する 3 つの個別のテンプレートファイルを組み合わせて作成されたもので、相互にリンクされており、スクリプトを再利用できます。これらのスクリプトを 1 つのテンプレートにまとめることで、スクリプトの流れががわかりやすくなります。
ここでも、3 つの基本デフォルトテンプレートが使用されます。テンプレートは次のとおりです。
DeclLib.ftl
CompilationUnit.java
NormalClassDeclaration.java
3 つの個別のテンプレートファイルがあるのは、UML プロジェクト内の 1 つのモデル要素を使用して 3 つの独立したソースファイルを生成しますが、生成するソースファイルには、1 つにつき最低 1 つのテンプレートファイルが必要なためです。つまり、1 つのモデル要素は、1 つのソースファイルを生成するために直接 1 つのテンプレートファイルを使用します。
標準の Java の型では、それぞれが CompilationUnit.java テンプレートファイルを使用し、このファイルからほかのテンプレートファイル (DeclLib.ftl と、ほかの 3 つ *Declaration.java ファイル) のいずれかが参照され、1 つのソースファイルが生成されます。
EJB のためのテンプレートの生成
ZIP ファイルには、EJB を生成できる 3 つのテンプレートが含まれています。これらのテンプレートでは、3 つのソースファイルを生成するために、1 つのモデル要素から 3 つの異なるテンプレートファイルが直接使用されます。
次の画像は、標準 Java クラスのコード生成と EJB Bean クラス生成の間の関係の違いを視覚化するのに役立ちます。
次の画像は、次のことを表しています。
このモデルには、クラス、インタフェース、および列挙の 3 つの要素があります。
各クラス要素は、CompilationUnit.java テンプレートファイルを使用する Basic Class ドメインテンプレート (ステレオタイプがない任意のクラス要素) を使用するためにマッピングされます。
CompilationUnit.java テンプレートファイル内のスクリプトによって、この要素がクラス型であり、NormalClassDeclaration.java テンプレートにリンクされていることが判定され、Java クラス固有のコード生成が実行されます。
同様に、インタフェース要素型と列挙要素型に対し、CompilationUnit.java 内のスクリプトによって特定の型の要素と該当するテンプレートへのリンクが判定され、Java、インタフェース、または列挙型固有のコード生成が行われます。
ステートレスクラス要素のマッピング
stateless としてステレオタイプ化されたクラス要素は、3 つのテンプレートファイルがある Stateless ドメインテンプレートにマッピングされます。
各テンプレートファイルから、それぞれのソースファイル (1 つの Java クラスと 2 つの Java インタフェース) が生成されます。次の図を参照してください。
新しいテンプレートの追加
新しいテンプレートを IDE に追加したら、「オプション」パネルを使用してこれらをドメインテンプレートとして追加します。実行するには、次の手順に従います。
IDE のメインメニューから「ツール」>「オプション」を選択します。
「カテゴリ」をクリックします。
「追加」をクリックして新しいカテゴリを追加します。
デフォルトのカテゴリの名前を「EJB 3.0」に変更します。
「追加」ボタンをクリックし、新しいドメインを追加します。
デフォルトのドメインに「Stateless」という名前を付けます。
「Stateless」を選択します。
「クラス」を「要素型」ドロップダウンメニューから選択します。
「ステレオタイプ」フィールドに「stateless」と入力します。
「テンプレートを追加」を選択します。
ダイアログに次の推奨エントリを入力します。
ファイル名形式: {name}Bean
拡張子: .java
フォルダ: 特定の場所にファイルを生成しない場合は空のまま
テンプレートファイル: EJB 3.0/StatelessBean.ftl
そのほかのテンプレートについて、それぞれ別の名前を指定して上記の入力を繰り返します。
EJB テンプレートのマッピング
テンプレートを IDE に追加し、「オプション」パネルを使用してそれらを追加したあとは、UML の「オプション」パネルを使用してモデル内のモデル要素にテンプレートをマッピングします。
IDE のメインメニューから「ツール」>「オプション」を選択します。
「UML」オプションカテゴリをクリックします。
「テンプレート」タブをクリックします。
「オプション」パネルの「EJB 3.0」ノードを展開します。
IDE によって EJB ドメインテンプレートのプロパティーが表示されます。次の図に示すとおり、EJB 3.0 ドメインテンプレートの下に、クラス要素型の Stateless ドメインテンプレートが、ステレオタイプ stateless 付きで表示されます。
出力パラメータには、Bean、Local、および Remote の 3 種類があり、それぞれに .java の拡張子が付けられています。
単一のモデル要素のための複数のドメインテンプレート
複数のドメインテンプレートには、単一のモデル要素をマッピングさせることができることがあります。たとえば、Java カテゴリの Basic Class ドメインテンプレートをステレオタイプがないクラス型の任意の要素とマッピングできます。
C++ という別のカテゴリを作成し、これにも Basic Class (または任意の名前) というドメインテンプレート名を付け、ステレオタイプがないクラス型の要素とマッピングし、このテンプレートファイルから Java でなく C++ クラスを生成するようにすることもできます。
コード生成アクションの実行時に、両方のテンプレートが有効化されている場合、1 つの要素から Java クラスと C++ クラスになる 2 つのファイルを生成できます。後者の例は一般的ではないかもしれませんが、可能です。
Calculator ステートレスセッション EJB の作成
テンプレートを NetBeans に適切に作成し、適切なドメインテンプレートを構成したら、エンタープライズ Java Bean 用の エンタープライズ Java Bean コードを生成する新しいテンプレートを利用する、UML モデルプロジェクトを作成できます。
UML モデルプロジェクトの作成後は、Calculator 要素を作成し、これにメソッドを追加します。
UML プロジェクトを作成するための最初の手順として、次の操作を行います。
メインメニューから「ファイル」>「新規プロジェクト」を選択します。
「UML」を選択し、「Java プラットフォームモデル」を選択します。
「次へ」をクリックして、「完了」をクリックします。
「図を作成」ダイアログが表示されたら、「クラス図」を選択し、「完了」をクリックします。これで、1 つのクラス図がある UML プロジェクトが作成されました。
次に、Calculator 要素を作成します。Calculator 要素を作成するには、次の手順に従います。
1 つのクラス要素を図に追加し、Calculator と名前を付けます。接頭辞が適切に作成されることがテンプレートで確認されます。つまり、該当するソースファイル名の Bean、Local、および Remote がテンプレートによって作成されます。
Calculator 要素が選択された状態で、ステレオタイププロパティーを編集し、stateless を追加します。
コードの生成プロセスで Calculator 要素が認識されるようになったため、これを Stateless ドメインテンプレートにマッピングします。ただし、コード生成を実行する前に、Calculator 要素にメソッドをいくつか追加する必要があります。
Calculator 要素へのメソッドの追加
UML 図エディタで、次に示す 3 つの操作を Calculator 要素に作成します。操作を作成するには、「操作」コンポーネント領域で「Calculator 」要素を右クリックし、「操作を追加」を選択します。次の操作を追加します。
public int add(int a, int b)
public int subtract(int a, int b)
public int multiply(int a, int b)
これら 3 つのメソッドのすべてが、作成する両方のインタフェースに露出することを望まない場合があります。public メソッドのみがインタフェース内で宣言できるため、これらすべてのメソッドの露出を望まない場合、public でないメソッドを除外する必要があります。
また、これらの public メソッドのすべてを両方のインタフェースで宣言したくない、またはどちらかで宣言したくない場合があります。その場合、3 つのソースファイルのそれぞれでどのメソッドを生成するかを識別するスクリプト上の仕組みが必要になります。ここでも、どのメソッドを追加するべきかを示すために、ステレオタイプを使用することができます。
Java プロジェクトの作成
これで、Calculator 要素は完了しました。次はコードの生成先である Java プロジェクトを作成する必要があります。実行するには、次の手順に従います。
IDE のメインメニューから「ファイル」>「新規プロジェクト」を選択します。
「Java」を選択し、「Java アプリケーション」を選択し、「次へ」をクリックします。
「プロジェクトを選択」ページで「Java」と「Java アプリケーション」を選択します。
「主クラスを作成」オプションを選択解除し、「完了」をクリックします。
「Calculator 」要素を右クリックし、「コードを生成」を選択します。
新しく作成された Java プロジェクトをターゲットプロジェクトとして選択します。
「テンプレートを表示」ボタンをクリックし、「EJB 3.0」ノードをツリーから展開します。
「Stateless」ドメインテンプレートを選択します。「了解」をクリックし、コードの生成を開始します。
「出力」ウィンドウにメッセージが表示され、IDE で 3 つの個別のテンプレートファイルが Calculator 要素のコード生成に使用されたことが示されます。
コードの生成プロセスの実行が完了したら、Java プロジェクトのソースフォルダを展開し、新しい Calculator ソースを検査します。次の 3 つの生成ファイルが表示されます。
CalculatorBean.java
CalculatorLocal.java
CalculatorRemote.java
各ファイルを開き、3 つのメソッドがすべてクラスと 2 つのインタフェース内に生成されていることを検査します。標準 Java プロジェクトには Java エンタープライズライブラリまたはほかのクラスが自動的に含まれるため、コンパイルエラーなどのエラーが表示される場合があります。このチュートリアルの目的は、作成したプロジェクトのコンパイルや実行ではないため、これらのエラーは無視して構いません。
生成されたコード内での図エディタの変更内容の確認
生成されたコードと Calculator 要素との同期が維持される方法は、図エディタを使用してこの要素を変更することで確認できます。図エディタで次の手順に従います。
次の新しい操作を追加します。
public float divide(int a, int b)
multiply 操作を削除します。
3 番目のパラメータを add 操作に追加します。
int c
Calculator 要素を右クリックし、「コードを生成」を選択します。
新しいソースの検査時と同様に 3 つのソースファイルを調べ、図エディタで Calculator 要素に対して行なった変更との同期をとるために、IDE でこれらがすべて更新されていることを確認します。
まとめ
Freemarker スクリプト作成環境では、NetBeans UML コード生成が大幅に強化され、生成するコードをカスタマイズできます。この記事では、概念的な背景を紹介し、コード生成テンプレートの作成、追加、およびカスタマイズ、一般的なコード生成、および EJB アーティファクトへの特定の参照を含むコード生成を可能にするためのチュートリアル情報を提供しています。コード生成テンプレートを使用すると、NetBeans UML コード生成のフレームワークの中でテンプレートの機能を活用でき、いくつかの要素を変更するだけで、多数のソースファイルのソースコードを管理することが可能になります。コード生成テンプレートをカスタマイズすることで、アプリケーションプロジェクトで使用できるコードの生成を、効率的かつ簡単な方法で実行できます。
次の手順
ページの先頭へ