目次 | 前 | 次
3. シナリオ
ビーンズの機能を説明するため,3.では二つのビーン使用例(参考)を示す。
3.は,規定ではなく,参考であることに注意。
ビーンズの使用法は,3.で示すものがすべてではない。
アプリケーションビルダは,それぞれ異なるアプリケーション構成シナリオを提供する。
次の二つのシナリオは,アプレット作成についてだが,javaアプリケーション作成でも,
同じ段階を踏む。
3.1 アプレット作成のためのアプリケーションビルダの使用
このシナリオでは,ユーザがアプリケーションビルダを使って,アプレットを作成する。
アプリケーションビルダは,ソースコードの一部分を生成し,ユーザがソースコードを付加できる
テンプレートを提供する。
- a) ツールの購入
- 1) ユーザは,Javaアプリケーションビルダである WombatBuilder を購入し,
インストールする。
- 2) ユーザは,アルの部品安売り屋から,Java Beans部品を購入する。JARファイルで,
ビーンズが収められたWin32ディスケットを手に入れる。この中には,“ボタン”部品及び
“データベースビューア”部品が入っている。
- 3) ユーザは,計算機にディスケットを挿入し,WombatBuilderの“ビーン追加...”
という対話を使って,WombatBuilderに,ビーンズについての情報を送り込む。
WombatBuilderは,ビーンズをビーンコレクションにコピーする。
(WombatBuilderは,ビーンズの属性を知るために,この時点でそれを検査してもよいし,
ビーンズが実際に使用されるまで待機してもよい。)
- b) アプレットの配置
- 1) ユーザは,WombatBuilder内の,“Foobaz”と呼ぶ,
新しいカスタムアプレットの生成にとりかかる。まず,何もないアプレットテンプレートから開始する。
WombatBuilderは,Foobaz.javaファイルを生成して,このアプレットの状態を示す。
- 2) ユーザは,WombatBuilder ビーンズメニューから“button”を選択し,
それをテンプレートにドロップする。
WombatBuilderは,"newButton()"を使って新しいボタンのインスタンスを割り付ける。
WombatBuilderは,この新しいボタンを,クラスFoobazのメンバーに追加する。
- 3) ユーザは,WombatBuilderビーンズメニューから“database viewer”を選択し,
それをアプレットのテンプレートにドロップする。データベースビューアは,
かなり複雑なビーンなので,初期化前の直列化された状態になっている。
そのため,WombatBuilderツールは,再度,メソッド“Beans.instantiate”を使って,
直列化されたオブジェクトインスタンスを読み取る。WombatBuilderは,
この新しいデータベースビューアオブジェクトを,クラスFoobazのメンバとして追加する。
- c) ビーンズのカスタム化
- 1) ユーザは,ボタンを選択して,WombatBuilderに編集を依頼する。
WombatBuilderは,Introspector.getBeanInfoを使って,ビーンを記述した
BeanInfoオブジェクトを獲得し,このビーンには,カスタマイザが定義されていないこと
を確認する。そこで,BeanInfo情報を使って,ビーンの読書き特性の名前を調べ,
その特性の名前及びその現在値を含む単純特性シートを生成する。ユーザは,
特性シートと相互作用して,ボタンの見かけをカスタム化する。更新は,ビーンに適用される。
- 2) ユーザは,データベースビューアを選択し,WombatBuilderに編集を依頼する。
Introspector.getBeanInfoを使って,WombatBuilderは,データベースビューアがクラス
Customizerをもっていることを知る。Wombatbuilderは,そのカスタマイザクラスの
インスタンスを生成し,部品のカスタム化をそのカスタマイザに依頼する。
データベースビューアのカスタマイザは,一連の対話を表示し,
ユーザに対象データベースの選択,表示するテーブル及びレコードを識別させる。
データベースビューアのカスタマイザは,パッケージの私的メソッドを使って,
データベースビューアビーンの状態を設定する。
- d) ビーンズの接続
- 1) ユーザは,ボタンにデータベースビューア起動機能をもたせることを決定する。
ユーザは,スクリーン上のボタンを選択して,WombatBuilderの“events”メニューから
イベント類を見つけ出し,“action”イベントを選択する。
WombatBuilderは,テンプレートメソッド“Foobaz.button1Action”を生成し,
テキストエディタを起動して,ユーザがメソッドのテキストを書けるようにする。
- 2) ユーザは,メソッドのプログラムをする。この場合には,
単にデータベースビューア部品のメソッド“update”を呼び出す。自動的に生成されたFoobazは,
次のとおりとなる。
class Foobaz extends WombatBuilderApplet{
public Button button1;
public DatabaseViewer databaseViewer1;
void button1Action(java.awt.event.ActionEvent evt) {
databaseViewer1.update( );
}
}
- 3) さらに,WombatBuilderは,裏でアダプタクラスを生成し,
ボタンをFoobazに接続する。これは次のとおりになる。
class Hookup1234 implements java.awt.event.ActionListner {
public Foobaz target;
public void actionPerformed(java.awt.event.ActionEvent evt){
target.button1Action(evt);
}
}
- 4) WombatBuilderは,クラスHookup1234の新しいインスタンスを生成し,
その“target”フィールドにアプレットを割り当てる。それから,
このHookup1234のインスタンスを,button1の“addActionListner”メソッドで登録する。
これで接続は完了した。
- e) アプレットのパッケージ化
- 1) 作業が完了したら,ユーザは“make it so”を押す。WombatBuilderは,
Java直列化を使って,Foobaz.serという備蓄ファイルに,
Foobazオブジェクトを保存する。その保存処理の一部として,
二つのビーンズインスタンス(button1及びdatabaseViewer1メンバ)も保存する。
WombatBuilderは,イベント接続を再構成する初期化コードも生成する。
- 2) WombatBuilderは,備蓄ファイル,hookup1234.classを含むアプレットで必要な
.class ファイル及びビーンズそれ自体のための .class ファイルを保持する
Foobaz.jarファイルを生成する。
- 3) WombatBuilderは,アプレットタグを使って,Foobaz.jarファイルから備蓄した
Foobaz.serをロードする例示HTMLページも生成する。
- f) 試行
- 1) ユーザは,Space Warsウェブブラウザでアプレットをテストする。
htmlページを開くと,アプレットは,Foobaz.jarファイルの内部の
Foobaz.serから直列化された状態で読み取ることで,初期化される。
この動作の一部として,様々なクラスも,Foobaz.jarファイルの内部の
.classファイルからロードされる。
- 2) その結果,アプレットが実行され,
ボタンにデータベースビューアがイベント接続され,ユーザが,
WombatBuilderツールでカスタム化した状態になる。
- 3) Joy,Happiness 及び Banana Mochas一巡する(注1)。
注1 Printers Inc. Cafe, California Avenue, Palo Alto, CA の参照実装を,確認すること。
3.2 手書きアプレット作成でのビーンズ使用
このシナリオでは,手書きのアプレット形式のJava Beans部品をいくつか使用する。
このシナリオは,既存の簡単なAWT部品を使ってアプレットを作成するのと,
かなり類似しており,特別なツールを用いずに,どのようにビーンズを使用するかを示す。
- a) ツールのロード
- 1) ユーザは,JDKをダウンロードし,インストールする。JDKは,javacコンパイラを含む。
- 2) ユーザは,Dave's Freeware Component
ページのJava Bean部品のいくつか有効なものに着目し,
ビーンズのjarファイルをftpを使って取得する。
- 3) ユーザは,“jar”コマンドを使って,jarファイルの内容を抽出し,
それを,ユーザの“class”ディレクトリに入れる。これには“Button”部品及び
“DatabaseViewer”部品が含まれる。
- b) アプレットの配置
- 1) ユーザは,新しいアプレットに対応するコード入力する。
アプレットの“init”メソッド内で,標準メソッド Beans.instantiate
を呼び出すことによって,ユーザは,dave.Button及びdave.DatabaseViewerを生成する。
シーンの背後で,Beans.instantiateは,これら二つのビーンズのどちらかに対して,
直列化オブジェクト状態での読込み処理を行う。
class MyApplet extends java.awt.Applet {
public void init( ) {
try {
ClassLoader cl = this.getClass().getClassLoder( );
btn = (Button)Beans.instantiate(cl, "dave.Button");
add(btn);
dbViewer = (DatabaseViewer)Beans.instantiate(cl,
"dave.DatabaseViewer");
add(dbViewer);
} catch (Exception ex) {
throw new Error("Could'nt create bean " + ex);
}
}
private DatabaseViewer dbViewer;
private Button btn;
}
- c) ビーンズのカスタム化
- 1) ユーザは,部品の見かけ及び振舞いを微調整したいので,
メソッドMyApplet.initに,ビーンズの特性アクセサメソッド呼出しを追加する。
btn.setBackground(java.awt.Color.red);
dbViewer.setURL("jdbc:msql://aardvark.eng/stuff");
- d) ビーンズの接続
- 1) ユーザは,データベースビューア起動をボタンにつなぐことを決定する。
ボタンは,java.awt.event.ActionListnerインタフェースでイベントを起動する。
ボタンが一つしかない単純アプレットしかないので,ユーザは,ActionListner
を直接に実装するクラスMyAppletを作成し,インタフェースActionListner
が要求するメソッド“actionPerformed”を追加する。
void actionPerformed(java.awt.event.ActionEvent) {
dbViewer.update( ); //prod the DB viewer.
}
- 2) 実行時にイベントを接続するために,ユーザはメソッド
MyApplet.initに次の行を追加する。
btn.addActionListner(this);
- e) アプレットのパッケージ化
- 1) 作業が完了したら,ユーザは,MyApplet.javaファイルをコンパイルし,
MyApplet.classファイルがクラスディレクトリに追加されていることを確認する。
- 2) ユーザは,アプレットタグを使い,適当なコードベースで,
MyAppletを参照するテスト用のHTMLページを作成する。
- f) 試行
- 1) ユーザは,Space Warsウェブブラウザで,アプレットを試行する。
htmlページを開くと,アプレットは,メソッドMyApplet.initを実行し,初期化される。
- 2) メソッドMyApplet.initは,ボタン及びデータベースビューアのために
Beans.instantiate を呼び出す。シーンの背後で,Beans.instantiate は,
Button ビーンの"new"を実行し,Java直列化を使用して,初期化された
DatabaseViewer ビーンを読み取る。
- 3) メソッドinitは,様々なメソッド setXXX を呼び出してビーンズをカスタム化し,
ボタン addActionListnerを呼び出して,ボタンイベントに接続する。
- 4) その結果,アプレットが実行され,
ボタンからデータベースビューアへのイベント接続が可能となる。
- 5) Restrained Joy,Limited Happiness 及び decaffe coffeeを一巡する。
手書きのアプレットに対するサンプルコードは,次のとおり。
class MyApplet extends java.awt.Applet implements
java.awt.event.ActionListner {
// Applet initialization.
public void init( ) {
try {
ClassLoader cl = this.getClass().getClassLoader();
btn = (Button)Beans.instantiate(cl, "dave.Button");
add(btn);
dbViewer = (DatabaseViewer)Beans.instantiate(cl,
"dave.DatabaseViewer");
add(dbViewer);
} catch (Exception ex) {
throw new Error("Couldn't make bean " + ex);
}
btn.setBackground(java.awt.Color.Red);
dbViewer.setURL("jdbc:msql://aardvark.eng/stuff");
// Hookup the button to fire action events at us.
btn.addActionListner(this);
}
// Method that catches action events from the button.
void actionPerformed(java.awt.event.ActionEvent evt) {
dbViewer.update( ); //prod the DB viewer.
}
private DatabaseViewer dbViewer;
private Button btn;
}
目次 | 前
| 次