JavaBeansのウォーキングツアー

前へ12ページ2 2/2ページ

JavaBeansとは何か、そしてそれは何をするのか

JavaBeansは、製品、プログラム、または開発環境ではありません。これはjava.beans、Beansが拡張機能を提供するために使用できるコアJavaパッケージ()であると同時に、パッケージ内のクラスとインターフェースを使用して「Beans機能」を実装する方法を説明するドキュメント(JavaBeans仕様)でもありますjava.beans。クラス仕様はJava1.1の基本リリースの一部であるため、使用するために追加のソフトウェアをインストールする必要はありません。Beanの追加では、Java言語自体にほとんど変更を加える必要はありませんでした。、ただし、Beans機能をサポートするために、いくつかの新しくて切実に必要なAPIがコアリリースに追加されました。仕様を読むことは有益ですが、気の利いたことです。幸い、JavaBeansパッケージを使用する方法と理由をすでに理解している場合は、オプションです。たとえば、JavaWorldのJavaBeansに関する面白くて啓発的な一連の記事を読んで、Beansをすでに理解しているかもしれません。

JavaBeansは、いくつかの新機能を提供することにより、クラスをソフトウェアコンポーネントに変換します。これらの機能の一部はBeanに固有です。その他には、直列化のように適用することができます任意のクラス、豆またはそうでない場合は、しかし、理解と豆の使用に不可欠です。

ソフトウェアコンポーネントには、オブジェクトの属性であるプロパティがあります。カスタマイズは、特定のタスク用にBeanを構成するプロセスです。Java 1.1の新しいイベント処理スキームは、Bean間の通信を容易にするために部分的に作成されました。 Beanは、イントロスペクションと呼ばれるプロセスを通じて、IDEまたは他のクラスによって分析される場合があります。 Beanは、送信または保存のためにバイトストリームに永続化(つまり、シリアル化)され、永続化されたBeanは、ダウンロードとアクセスを容易にするために「JARファイル」にパッケージ化されます。最後に、Beansは相互運用するように設計されています ActiveXやLiveConnectなどのレガシーコンポーネントテクノロジーを使用して簡単に実行でき、CORBAなどのObject RequestBrokerシステムとのトランザクションに参加できます。

これらの機能のそれぞれをもう少し詳しく見ていきましょう。

プロパティとカスタマイズ

上記のように、プロパティはBeanの属性です。視覚的なプロパティには、色や画面サイズが含まれる場合があります。他のプロパティには視覚的な表現がない場合があります。たとえば、BrowserHistory Beanには、保存するURLの最大数を指定するプロパティがある場合があります。Beanは、プロパティのsetterメソッドとgetterメソッド(「アクセサメソッド」と呼ばれます)を公開し、他のクラスまたはIDEがそれらの状態を操作できるようにします。設計時または実行時にBeanのプロパティを設定するプロセスは、カスタマイズと呼ばれます。

開発者は、Beansのプロパティへのアクセスと変更を大幅に制御できます。以下のために単純なプロパティ、開発者は、呼び出されたメソッドを書き込みsetProperty()、別のと呼ばれますgetProperty()

ここではアプレットを見たはずです が、何らかの理由で見ることができません。

棒グラフ

たとえば、Java対応のブラウザを使用している場合、左側にBarChart。という小さなクラスを使用するアプレットが表示されます。これBarChartは、2つのボタンの間の色付きのバーです。BarChartBeanになるための1つのことだけが欠けています。それは、インターフェースを実装していませんjava.io.Serializable(ほとんどのブラウザーはまだJava 1.1を処理していないため、サンプルアプレットは失敗します)。

Serializableであることを除いて、BarChartメソッドが非常に少ない単純なBeanです。それはvoid setPercent(int pct)、バーの下部のパーセントを赤で塗りつぶします。このメソッドint getPercent()は、Beanに格納されている現在のパーセンテージを返します(これはBeanの状態です)。このsetPercent()メソッドはrepaint()、パーセンテージが変更された場合にも呼び出すため、オブジェクトの視覚的表現は最新の状態に保たれます。

+ 10%ボタンがクリックされると、アプレットコードが呼び出さsetPercent(getPercent()+10)れ、そのパーセンテージが増加します(100%未満の場合)。パーセントBeanプロパティの例であり、JavaBeans仕様に従って名前が付けられたsetterメソッドとgetterメソッドがあります。このシリーズが続くにつれて、この謙虚な部分を、さまざまなアプリケーションにプラグインできる便利なソフトウェアコンポーネントに変換します。BarChartBarChart

インデックス付きプロパティの値は配列です。インデックス付きプロパティのアクセサメソッドは、スカラーではなく値の配列を受け取り、返します。アクセサメソッドは、チェックされた例外をスローしてエラー状態を報告する場合があります。

オブジェクトの特定のプロパティが変更されたときにアクションが発生すると便利な場合があります。バインドされたプロパティにより、プロパティの値が変更されたときにイベントが他のオブジェクトに送信され、受信者が何らかのアクションを実行できるようになる可能性があります。したがって、SpreadSheet Beanは、スプレッドシートデータが変更されるたびに自分自身を再描画するようにPieChartBeanに指示するように構成されている可能性があります。

多くの場合、他のBeanの状態に基づいて、プロパティの特定の値は不正です。 Beanは、他のBeanのこれらの制約されたプロパティを「リッスン」するように設定でき、「拒否」は気に入らない変更を行います。たとえば、原子炉のControlRodArray Beanは、制御棒が引き抜かれた場合に、DrainReactorCorePumpBeanの状態をONに変更しようとする誰かに干渉したい場合があります。 (自宅でこれをしようとしないでください。おそらく誰もがこのようなアプリケーションのためのJavaBeansを使用すべきではないだけまだ。)

開発者がBeanを接続してアプリケーションを作成する場合、IDEはすべてのBeanのプロパティとその現在の値を含むプロパティシートを表示できます。 (プロパティシートは、メニューの[オプション...]を選択して取得するもののように、プロパティを設定および/または表示するために使用されるダイアログボックスです。)開発者はプロパティをグラフィカルに設定し、IDEはこれをBeansのセッターメソッドの呼び出しに変換します。 Beansの状態を変更します。これにより、特定のアプリケーション用にBeanがカスタマイズされます。

プロパティのリストを使用することが、Beanのカスタマイズを処理するための最良の方法であるとは限りません。一部のBeanには、この方法で簡単に操作するには複雑すぎる状態があります。他のBeanは、より直感的な設定方法があれば、単にクールになります。単に売上レポートを見たいだけで、プロパティシートの[リモートODBCデータソース]テキストボックスに何を入力するかを考えなければならない貧しいマネージャーを想像してみてください。彼女がDataSourceBeanのアイコン(もちろん「SalesData」というラベルでカスタマイズされている)をDataConnection Beanにドラッグアンドドロップするだけで、自動的に構成できるとしたら、もっとクールではないでしょうか。 Beans開発者はプロパティシートをBean自体に埋め込むことができ、IDEはこの「カスタマイザー」を使用してBeanをカスタマイズします。

プロパティの操作とカスタマイズに関連するクラスはjava.beansパッケージに含まれています。

イベント処理

Bean間のこの相互作用はすべて、Beanが通信するための何らかの方法を前提としています。JDK 1.1は、クラス(Beansだけでなく!)が通信に使用する新しいイベントモデルを定義します。実際、この新しいイベントモデルは、Javaで最も広く使用されているパッケージの1つに組み込まれていますjava.awt

新しいイベントモデルでは、クラスはリスナーインターフェイスを介して別のクラスのアクティビティへの関心を登録します。事実上、ターゲットオブジェクト(関係者)はソースオブジェクト(関心のあるオブジェクト)に「そのようなことが起こったらいつでも知らせてください」と伝えます。そのようなことが発生すると、ソースオブジェクトEventObjectは、引数としてのサブクラスを使用してターゲットのイベントハンドラーを呼び出すことにより、ターゲットでイベントを「発生」させます。

イベントを使用して、バインドされたプロパティと制約されたプロパティを実装できます。上記のPieChartとSpreadSheetの例では、PieChartは、SpreadSheetの(たとえば)DataListプロパティへの変更に対する関心を「登録」します。SpreadSheetがDataListプロパティを変更しようとすると、変更内容を示すDataListChangedEvent(からサブクラス化されたEventObject)が、関係するすべてのリスナーのイベントハンドラメソッドに渡されます。次に、ターゲット(PieChart)はイベントを調べ、適切なアクションを実行します。

原子炉の例も同様に機能します。ただし、その場合、ターゲットは例外をスローして変更を拒否します。したがって、世界は広範囲にわたる放射性破壊から救われます。

EventObjectクラスは、作成するために拡張することができ、ユーザ定義のイベントを。クラスは、新しいイベントタイプを定義および使用して、相互にメッセージを送信できるようになりました。これは、同じコンテナ内で実行されているBeanが、メッセージを渡すことによって通信できることを意味します。これは、オブジェクト間の依存関係を切り離すのに役立ちます。これは非常に良いことです。

ユーザー定義(およびその他の)イベントは、クラスから派生しjava.util.EventObjectます。

内省

かなり奇妙な用語のイントロスペクションは、クラスのパブリックメソッドとメンバーをプログラムで分析するプロセスのJavaスピークです。このプロセスは、ディスカバリーとも呼ばます。オブジェクトを分析してその内容の説明を返すことができるJavaコアの新しいリフレクションメカニズムにより、イントロスペクションが可能になります。 (Javaは内省的でさえ反射的かもしれませんが、omphaloskepsisはまだコアディストリビューションの一部ではありません。)

この機能の1つのアプリケーションにすでに遭遇しました。上記では、開発者に提示するBeanプロパティのリストを作成できるIDEについて説明しました。 IDEは、Beanが持つプロパティをどのように知ることができますか? IDEは、2つの方法のいずれかでBeanのプロパティを検出します。つまり、Beanにそのプロパティの説明を要求するか、Beanをイントロスペクトして分析します。

典型的なIDEは、特にBeanのプロパティを説明するBeanInfoオブジェクトをBeanに要求することから始まります。次に、IDEはBeanInfoオブジェクトを使用してプロパティシートを作成します。 (これは、Beanが独自のカスタマイザーを提供しないことを前提としています。)BeanがBeanInfoオブジェクトを返す方法を知らない場合、IDEはBeanをイントロスペクトし、メソッドのリストをスキャンして、setおよび取得します。 (慣例により)これらのメソッドはプロパティのアクセサーであると想定し、存在するアクセサーメソッドとそれらのメソッドが取る引数のタイプに基づいて新しいプロパティシートを作成します。 IDEの発見方法が好きなのであれば、setColor(Color)Color getColor()setSize(Size)、そしてSize getSize()、それがプロパティを持つプロパティシートを作成します。サイズ、およびそれらを設定するための適切に入力されたウィジェット。

つまり、開発者がアクセサメソッドの命名規則に従うだけで、IDEはコンポーネントのカスタマイズプロパティシートを作成する方法を自動的に決定できます。

イントロスペクションを実行するリフレクションメカニズムは、新しい言語コアパッケージに含まれていますjava.lang.reflect

永続性とパッケージング

オブジェクトの状態をデータのブロブに変換して後で使用するためにパックするか、ネットワークを介して送信して他の場所で処理することにより、オブジェクトを「フリーズドライ」すると便利なことがよくあります。このプロセスはシリアル化と呼ば、Javaコアの新機能です。

シリアル化の最も簡単な使用法の1つは、カスタマイズされたBeanの状態を保存することです。これにより、新しく構築されたBeanのプロパティを実行時に正しく設定できます。

また、シリアル化はコンポーネントテクノロジの主力であり、CORBAなどの分散処理スキームを可能にします。オブジェクトがタスクを実行するために必要な情報をローカルに持っていない場合、オブジェクトはリクエストブローカーに送信できます。リクエストブローカーはオブジェクトをシリアル化し、処理のために別の場所に送信します。リモートエンドでは、オブジェクトが再構成され、最初に要求された操作が実行されます。これは、負荷分散を実現する方法でもあります(つまり、高価なタスクの場合、シリアル化と逆シリアル化は安価ではないことがよくあります)。

このように「酸洗い」された凍結乾燥豆のグループをどこに保管しますか?もちろん、JARではなぜです!JavaBeans仕様では、JARファイルを複数のシリアル化されたオブジェクト、ドキュメント、イメージ、クラスファイルなどを含む構造化ZIPファイルとして記述し、JARの内容を記述するマニフェストを備えています。多くの圧縮された小さなファイルを含むJARファイルは、すべて1つの部分にダウンロードして、クライアント側で解凍できるため、(たとえば)アプレットのダウンロードがより効率的になります。(JARは明らかにUnix tarファイル形式での遊びです。)

このjava.ioパッケージは、オブジェクトのシリアル化を提供します。JavaBeans仕様では、JARファイルの形式について説明しています。

相互運用

あるワグはかつて、標準の良いところはたくさんの選択肢があることだと言っていました。コンポーネント技術も例外ではありません。OLE(またはその最新の化身であるActiveX)、OpenDoc、およびLiveConnectに基づく多くの既存のシステムがあります。JavaBeansは、(少なくとも最終的には)これらの他のコンポーネントテクノロジと相互運用するように設計されています。

開発者が他のテクノロジーへの既存の投資を放棄し、Javaですべてを再実装することを期待するのは現実的ではありません。Java 1.1のリリース以降、最初のBeans / ActiveX「ブリッジ」キットが利用可能になり、開発者はBeansとActiveXコンポーネントを同じアプリケーションにシームレスにリンクできるようになりました。Javaクラスが既存のCORBAシステムで動作できるようにするJavaIDLインターフェースは、今年リリースされる予定です。

Beans / ActiveXブリッジとJavaIDLは標準のJavaBeansディストリビューションの一部ではありませんが、ポータブルコンポーネントソフトウェア向けの強力なオープンテクノロジーとしてのJavaBeansの機能を完成させています。

結論

私たちは多くの分野をカバーしてきました。この記事では、ソフトウェアコンポーネントとは何か、そしてそれらがなぜ価値があるのか​​を学びました。次に、プロパティ、カスタマイズ、イベント、イントロスペクション、永続性、パッケージ化、レガシーコンポーネントシステムとの相互運用など、JavaBeansのさまざまなプロパティについて学習しました。

このシリーズの次の記事では、JavaBeansの使用を開始し、Beanプロパティの詳細(動作方法、およびBeansをカスタマイズ可能にする方法)について説明します。進むにつれて、Beansを可能にする新しいJavaコア機能について説明します。このシリーズの今後の記事では、今月説明したトピックの詳細について詳しく説明します。

Mark Johnsonは、パデュー大学(1986)でコンピューターおよび電気工学の理学士号を取得しています。彼はCで15年、C ++で2年のプログラミングの経験があり、オブジェクト指向アーキテクチャ、理論上のソフトウェアコンポーネント、および実際のJavaBeansにおけるデザインパターンアプローチの熱狂的な信者です。過去数年間、彼はメキシコシティのコダック、ブーズアレン、ハミルトン、EDSに勤務し、メキシコ連邦選挙研究所とメキシコ税関向けにOracleとInformixデータベースアプリケーションを開発しました。彼は昨年、コロラド州ボールダーにあるインターネットのスタートアップであるNETdeliveryで働いていました。Markは染められたUnixプログラマーであり、Javaを今やユビキタスなデスクトップクライアントシステムとオープンで分散型のスケーラブルなエンタープライズバックエンド。彼は現在、コロラド州フォートコリンズでObjectProductsのデザイナーおよび開発者として働いています。

このトピックの詳細

  • JavaBeansとActiveXの優れた比較は、MerlinHughesのJavaWorldカバーストーリー「JavaBeansとActiveXが直接対決する」にあります。

    //www.javaworld.com/javaworld/jw-03-1997/jw-03-avb-tech.html

  • Sun Microsystemsは、JavaBeansのWebサイトを管理しています。このサイトでは、最新のBDK(Beans Developer's Kit)をダウンロードし、JavaBeans仕様を読み、オンラインチュートリアルを閲覧し、Beansの最新情報を確認できます。//java.sun.com/beans
  • JavaBeansの顧問、豆のニュースや開発のヒントを含む不定期の電子ニュースレターは、にアーカイブされ

    //splash.javasoft.com/beans/Advisor.html

  • JavaBeansのよくある質問は日によって維持であります

    //splash.javasoft.com/beans/FAQ.html

  • 最後に、omphaloskepsisは、へその激しい熟考を伴う内省的な瞑想の一形態です。Word A DayのWebサイトをチェックして、毎日のスピーチをあいまいな参照で埋めてください。//www.wordsmith.org/awad/index.html

このストーリー「JavaBeansのウォーキングツアー」は、もともとJavaWorldによって公開されました。