3

私は EJB を初めて使用し、最近 EJB (3.0) の作業を開始しました。私は Java を 6 年間使用していますが、これまで EJB を使用したことはありませんでした。控えめに言っても、EJB ビジネス全体の複雑さに圧倒されています。いくつかの概念を実際に適用できる場所を理解できていません。

ステートレス セッション Bean を理解した後に頭に浮かぶ 1 つの質問は、ステートレス セッション Bean を常にローカル メンバーのないクラスの共有インスタンスに置き換えることができるとは限らない (事実上ステートレスにする) ことです。ステートレス セッション Bean に対して行われているインスタンス プーリングについて読みました。状態がない場合、単純に 1 つのインスタンスを使用することはできませんか?

サンプルを OpenEJB にデプロイしていますが、ステートレス セッション Bean を使用しなければならなかった場所の 1 つは、EntityManager と対話することでした。任意のクラスで EntityManager へのハンドルを取得できるかどうかはわかりません。それとは別に、ステートレス セッション Bean がどのような問題を解決しようとしているのか、まだ戸惑っています。

4

3 に答える 3

10

ステートレス セッション Bean には状態がある場合があります。ただし、会話状態ではない場合があります。したがって、セッション Bean メソッドが次のことを行うことは完全に許容されます (悪い習慣ですが)。

public void foo() {
    this.someVar = bar();
    this.someOtherVar = baz();
    zing();
}

プーリング以外にも、EJB コンテナーはステートレス Bean を使用していくつかのサービスを提供します。

  • 依存性注入
  • 宣言的トランザクション境界
  • 宣言的セキュリティ
  • EJB コンテキストへのアクセス

したがって、ステートレス セッション Bean は、単純なステートレス シングルトンよりもはるかに便利です。

于 2012-04-18T08:19:18.917 に答える
4

いいえ、ステートレス セッション Bean は状態を持つことができますが、その状態は永続化されておらず、セッションにバインドされていません。その状態の一部は、注入された EJB またはステートフル Bean などである可能性のある他の POJO です。したがって、リクエストごとにステートレス セッション Bean が必要です。

対照的に、1 つのユーザー セッション専用のステートフル セッション Bean があるため、その状態はセッションにバインドされます。

于 2012-04-18T08:18:44.203 に答える
0

任意のクラスで EntityManager を処理できますが、実際の問題は、ソリューションをどのように設計するかです。

EJB を使用した EJB の複雑さを除けば、よりスケーラブルなソリューションが得られます。

前に述べたように、EJB はトランザクション ベースのアプリケーションを開発する場合に役立ちます。アプリケーション サーバーは、トランザクション管理、EJB プーリング、セキュリティなどの機能を提供します。

もちろん、「共有クラス」を使用してすべてを実装できますが、すでにすべてが無料であるのに、なぜ車輪を再発明したいのでしょうか?

ステートレス セッション Bean は、アプリケーションのコア部分であるビジネス ロジックを実装するために使用されます。Java EE 階層型アーキテクチャーには、3 つの層があります。1. プレゼンテーション 2. ビジネス 3. データ

EJB は、ビジネス ロジックにおいて重要な役割を果たします。SLSB と SFSB の 2 つの選択肢があります。最初のものはよりスケーラブルで、Application Server によってプールされますが、状態を維持できません。2 つ目はスケーラビリティが低く、クライアント セッションごとに 1 つの SFSB があります。これらは、クライアントとビジネス ロジックの間で会話を保持する必要がある場合に使用されます。たとえば、SFSB への 1 つのメソッド呼び出しだけでは完了できない操作などです。SLSB と SFSB は、エンティティの永続性を管理するために EntityManager への参照を保持できますが、SLSB のみを使用して永続性を管理することをお勧めします。EJB3 と JPA は優れたソリューションです。これがあなたを助けることを願っています

于 2012-08-08T07:46:59.553 に答える