- - PR -
なぜBeanなの?
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2002-07-19 12:04
>「Serializable であることは基本的に必要」
>とのことですが、明示的に implements Serializable ってしていなくてもいいんですか? J2EEテクノロジーのサポート製品は、Beansの形態を保っているであろうことを期待して設計がなされているという意味です。 すなわち、JavaBeans(TM) API specificationに準拠して作られているBeanを扱うように実装されて いるということです。当該SpecのSection5を読んでください。特に5.5 Summary of persistenceです。 以下に拙訳を記します。 ============================================================ 5.5 永続性に関する要約 すべてのbeansは直列化、もしくは、外在化が可能でなければなりません。アプリケーションがJava直列化APIを使用して、beansの状態を保存し回復することは常に有効です。(直列化APIは直列化可能で外在化可能なオブジェクトを扱います。) ツールは、もしbeansが“hidden-state"属性を指定していなければ、beansの状態を回復するために生成されたコードを使用する可能性があります。その場合には、beansは直列化および(または)外在化で保存され回復されるに違いありません。 ============================================================ 前の投稿で、実際に使えるか否かは実装に依存すると申し上げました。コンテナは指定された Beanのインスタンス生成を、以下のように記述している可能性があります。 ClassLoader cl = this.getClass().getClassLoader(); MutantWombat w = (MutantWombat) Beans.instantiate(cl,“acme.widgets.PurpleMutantWombat”); したがって、アプリケーション側で、Beanの永続性を利用する記述をしていて、利用するBeansが Serializableを実装していなければ、当該機能は利用できません。Beanの永続性を要求しない場合、 正しく動作するかどうかはコンテナの実装次第としか言いようがありません。 Beanの直列化が必要な場面は、たいていリモートか永続でしょう。したがって、EJBインタフェースは スーパーインタフェースとしてjava.io.Serializableが設定されているのです。EJB以外でも、 クラスタ化をサポートしているコンテナでは、セッションをリプリケートしている場合があり、 その際は直列化できなければ当該機能が利用できないでしょう。 永続性の方も、エンテティBeanという観点以外にも利用される場面はあると思います。コンテナの実装に よっては、セッションスコープに登録したBeanも、コンテナの停止時に保存される場合があります。 その場合、シリアライズできなければ保存できず、コンテナ再起動時に復元されることもありません。 以上のような経緯から、「BeanはSerializableであることが基本的に必要」と申し上げたわけです。 >「基本的」である割にそうしているものが私が見た限り少ないので。 お手本となるようなサンプルを見てみてください。さまざまなコンテナの実装で共通的に使われている ようなものを、です。オープンソースのフレームワークなどがよい例です。 たとえば、StrutsのActionFormBeanなども、しっかり public class ActionFormBean implements Serializable { とかかれています。Strutsを利用して当該クラスを継承していれば、Serializableを実装している ことになります。 Strutsのコミッタから聞いた話ですが、かつて、リリース前のStruts(1.0以前)で、WebLogicで 意図したとおりに動作しないというバグ報告があったそうです。 原因はSerializableを実装していなかったからだそうです。 _________________ _/ K.Nakagome mailto:nakagome@nakagome.co.jp [ メッセージ編集済み 編集者: nakagome 編集日時 2002-07-19 12:06 ] |
|
投稿日時: 2002-07-19 12:04
>サーバサイドのBeanの条件は、
「サーバサイドのBean」ということばがあいまいですね。 JavaBeanとEJBに関しては仕様書に定義があるはずです。 |
