1

GlassFish 3.0 で実行されているサーバー

@Stateless(mappedName="messengerservice")
public class MessengerService implements MsnService{

    int count;


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        count = count+1;
        return count;
    }
}

クライアント

  for(int i=0;i<5;i++){
      MsnService br = (MsnService) ctx.lookup("java:global/EJbTutorial/MessengerService");
      System.out.println(br.getCount());
  }

出力

1
2
3
4
5

EJB 仕様によると、サーバーはセッション Bean のプールを維持し、1 つのインスタンスで値をインクリメントし、うまくいけば新しいインスタンスを取得し、インスタンス変数の値が維持されているようです。

どのように可能ですか?サーバーが毎回同じインスタンスを返し続けない限り、またはそうです。

ループで実行しても同じ結果になりました。いくつかの光を当てることができますか

4

2 に答える 2

1

テストするために、ステートレスBeanが実際にプールされている場合、Tom Andersonが提案したように、並列スレッドを実行してみました

クライアント

ExecutorService service =  Executors.newFixedThreadPool(10);           

for(int i=0; i<5;i++){
  Future future=  service.submit(new MessengerClient("Thread "+i+" :"));
  }        

service.shutdown();

出力

Thread 0 :1
Thread 1 :1
Thread 3 :1
Thread 4 :1
Thread 2 :1
Thread 1 :2
Thread 2 :3
Thread 3 :4
Thread 4 :5
Thread 0 :6
Thread 1 :7
Thread 2 :8
Thread 3 :9
Thread 4 :10
Thread 0 :11
Thread 1 :2
Thread 2 :12
Thread 3 :13
Thread 4 :14
Thread 2 :15
Thread 1 :16
Thread 3 :17
Thread 4 :18
Thread 0 :19
Thread 0 :20

これは、実際に新しいインスタンスがスレッドによって使用されていることを証明しています

于 2013-02-03T06:52:12.013 に答える
1

このリンクから参照された正しい出力が得られます。

ステートレス Bean を使用すると、EJB コンテナにステートレス Bean をプールする機能がある限り、クライアントはインスタンス化された Bean の使用可能なインスタンスを呼び出すことができます。これにより、Bean のインスタンス化の数を減らすことができるため、必要なリソースを減らすことができます。

Bean プーリング 現在呼び出されていないステートレス セッション Bean メソッド インスタンスはすべて、EJB
コンテナまたはアプリケーション サーバーによって呼び出され、クライアントの要求にサービスを提供します。これにより、EJB コンテナはステートレス Bean インスタンスをプールし、
パフォーマンスを向上させることができます。

スケーラビリティ ステートレス セッション Bean は複数のクライアントにサービスを提供できるため、アプリケーションに多数のクライアントがある場合、よりスケーラブルになる傾向があります。ステートフル セッション Bean と比較すると、ステートレス セッション Bean は通常、インスタンス化が少なくて済みます。

パフォーマンス EJB コンテナーは、ステートレス セッション Bean を RAM からセカンダリ ストレージに移動することはありません。したがって、ステートレス セッション Bean は、ステートフル セッション Bean よりも優れたパフォーマンスを提供する場合があります。

ステートレス セッション Bean とステートフル セッション Bean の違いについて詳しく読む...

于 2013-02-02T16:42:22.730 に答える