2012-04-18 18 views
3

私はEJBを初めて使い、最近EJB(3.0)で作業を始めました。私は6年間Javaを使用してきましたが、以前はEJBを使用していませんでした。私は、EJBビジネス全体の複雑さが圧倒的に言わざるを得ません。私は実際にどこの概念を適用できるのか分からない。ステートレスセッションBeanとステートレスシングルトン

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

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

+0

これは議論の余地がありますが、私はいつもEJBのものをSpringのようなものに置き換えることはできませんし、私が理解していることは、私が書いたことが必ずしも他のアプリケーションサーバーに移植可能であるとは限りません。私はGeronimo、TomEE、GlassFish、JBossでJPAとしてHibernateを操作する簡単なEntity Beanを得るために様々な問題に遭遇しました。 JBossで問題なく使えるようになっただけです。主に、WEB-INF/lib/ –

答えて

10

ステートレスセッションBeanには状態があります。しかし、会話州がないかもしれません。だから、(悪い習慣が)以下のんのセッションBeanメソッドという完全に受け入れます:

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

プールのほか、EJBコンテナはステートレスBeanといくつかのサービスを提供しています。

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

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

+0

にパッケージ化されたHibernate Jarsをロードすることに問題がありました。 1つの一般的な「一時的な状態」は注入されたEntityManagerです。これは「1つの作業単位」としてのみ使用する必要があります。 – Puce

4

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

対照的に、1つのユーザーセッションに対してステートフルセッションBeanがあり、その状態がセッションにバインドされています。

0

任意のクラスでEntityManagerを処理できますが、本当の問題はソリューションの設計方法です。

EJBを使用するEJBの複雑さを除いて、よりスケーラブルなソリューションが提供されます。

前述のように、EJBはトランザクションベースのアプリケーションを開発するときに便利です。 アプリケーションサーバーは、トランザクション管理、EJBプーリング、セキュリティなどの機能を提供します。

もちろん、すべてのことを「共有クラス」で実装することはできますが、すでにすべてのものが空いているときにホイールを再作成したいのですが?

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

EJBはBusinnessロジックで重要な役割を果たします。あなたは2つの選択肢があります SLSBとSFSB。最初のものは拡張性が高く、Application Serverによってプールされますが、その状態を保持することはできません。 2番目のスケーラビリティはスケーラビリティが低く、各クライアントセッションに1つのSFSBがあります。これらは、クライアントとビジネスロジックの間の会話、たとえばSFSBへの1つのメソッド呼び出しで完了できないオペレーションを保持する必要がある場合に使用されます。 SLSBとSFSBは、永続性を管理するためにSLSBのみを使用することを提案しても、EntityManagerへの参照を保持してエンティティ永続性を管理できます。 EJB3とJPAは素晴らしいソリューションです。 希望します。

関連する問題