0

ステートレス セッション Bean がありますが、何らかのプロセスを実行するために別の Bean への参照を追加したいと考えています。したがって、別の Bean への参照を追加すると、次のようにインスタンス レベル変数に表示されます。

@Stateless
public class AccountFacade extends AbstractFacade<Account> implements AccountFacadeRemote         {
    @EJB
    private BillerFacadeRemote billerFacade;

    public AccountFacade() {
    super(Account.class);
    }

    ... all other methods...
}

質問

ここで、定義により、ステートレス Bean にはインスタンス レベルの変数を含めることはできません。だから私はこれをどこに置くべきかについてかなり混乱していprivate BillerFacadeRemote billerFacade;ますか?

4

2 に答える 2

2

あなたのコードは問題ありません。

@EJB アノテーションは Bean をクラスに注入し、アプリケーション サーバーがその有効期間を管理します。

かなり長い Java EEチュートリアルを読むか、スキミングすることをお勧めします。

「EJB コンテナは通常、ステートレス セッション Bean のプールを作成および維持し、ステートレス セッション Bean のライフサイクルを開始します。コンテナは依存性注入を実行し、@PostConstruct アノテーションが付けられたメソッドが存在する場合はそれを呼び出します。Bean は現在、ビジネスを行う準備ができています。クライアントによって呼び出されるメソッド。」

于 2012-05-19T00:33:28.627 に答える
1

ステートレス Bean が依存関係を表すインスタンス変数を持つことは問題ありません。

実際、これは奨励されています。インスタンス変数がなければ、多くの場合、代わりにユーティリティ クラスで静的メソッドを使用できます。

ただし、推奨されていないのは、クライアントの観察可能な状態を表すインスタンス変数を持つことです。それは間違っていますが、エンティティ マネージャー、jms キュー、JDBC 接続、およびステートレス サービスが (一部の) 作業を委譲する他のサービスなどの依存関係はまったく問題ありません。

インジェクションは、インスタンス変数の真のインスタンス インジェクションであることに注意してください。クラス レベルの (静的) インジェクションではありません。

于 2012-05-19T17:12:07.143 に答える