6

セッションBeanコードで静的変数を使用することはできません。この制限は恣意的ですか、それとも基本的ですか?なぜ?

よろしくお願いします

4

3 に答える 3

16

EJBの制限に関するFAQに記載されているように、 EJBを使用するための制限の1つは次のとおりです。

エンタープライズBeanは、非最終静的フィールドの読み取りまたは書き込みを行わないでください

静的フィールドに関する議論でさらに拡張されました:

非最終静的クラスフィールドは、EJBで許可されていません。これは、そのようなフィールドがエンタープライズBeanの配布を困難または不可能にするためです。静的クラスフィールドは、特定のクラスのすべてのインスタンス間で共有されますが、単一のJava仮想マシン(JVM)内でのみ共有されます。静的クラスフィールドを更新することは、クラスのすべてのインスタンス間でフィールドの値を共有する意図を意味します。ただし、クラスが複数のJVMで同時に実行されている場合、更新インスタンスと同じJVMで実行されているインスタンスのみが新しい値にアクセスできます。つまり、非最終静的クラスフィールドは、単一のJVMで実行されている場合と、複数のJVMで実行されている場合とでは動作が異なります。EJBコンテナは、エンタープライズBeanを複数のJVM(同じサーバーまたはサーバーのクラスターのいずれかで実行)に分散するオプションを予約します。

これらのフィールドがfinalとしてマークされている場合は、静的クラスフィールドを使用することをお勧めします。最終フィールドは更新できないため、エンタープライズBeanのインスタンスは、それらのフィールドの値が非同期になることを心配することなく、コンテナによって配布できます。

于 2012-02-04T14:58:38.080 に答える
5

それは基本です。この太陽の文書によると、

非最終静的クラスフィールドは、EJBで許可されていません。これは、そのようなフィールドがエンタープライズBeanの配布を困難または不可能にするためです。静的クラスフィールドは、特定のクラスのすべてのインスタンス間で共有されますが、単一のJava仮想マシン(JVM)内でのみ共有されます。*

于 2012-02-04T14:56:57.217 に答える
1

staticクラスまたはそのすべてのオブジェクトに対して一意であることを意味します。

現在、javabeansユーザー固有のデータがあるはずですが、staticフィールドはこれらには意味がありません。

1人のユーザーが変数を編集し、他のすべてのユーザーに対しても更新されます。(無料で:-))。

ただし、これらの静的な動作が必要な場合(つまり、すべてのユーザーに同じデータを使用する場合)、applicationその目的があります。

于 2012-02-04T14:55:03.333 に答える