0

Web サービスJava EEによるユーザーのログイン、ユーザーの管理などのサービスを提供するアプリケーション ("UserServices") を作成しています。アプリケーションまたはクライアント アプリケーションによって使用されることを意図しています。クライアント アプリケーションは、アプリケーションによって提供されるステートレス リモート (またはローカル) Bean を使用します。EJBRESTEJB

動的に計算されるログイン ユーザー数、ユーザーのアクティビティ、およびユーザー統計に関するデータを保持したいと考えています。

そして、私はそれを行う方法がわかりません。

データは、そのデータであるため、「UserServices」アプリケーションに保持する必要があります。したがって、それらを維持するために、ローカルおよびリモートインターフェースを備えたステートフル Bean を使用すると思います。ただし、すべてのクライアント アプリケーションは、「ログイン」や「ログアウト」などのサービスを呼び出すときにデータを変更する必要があります。

では、リモート (またはローカル) ステートレス Bean を使用するクライアント アプリケーションの内部から、「UserServices」アプリケーションで「生きている」データの状態を変更するにはどうすればよいでしょうか?

言い換えれば、アプリケーションに存在するステートフル Bean の状態を、別の (おそらくリモートの) アプリケーション内から変更する方法は?

と を使用Java EE 6EJB 3.1JBoss 7.1います。

4

2 に答える 2

0

私が理解しているように、異なるクライアントからの Bean 呼び出し間でいくつかのデータを共有したいと考えています。クライアントごとに 1 つのインスタンスが常に作成されるため、ステートフル セッション Bean の状態に別のセッション Bean からアクセスしようとすることはお勧めできません。データの永続性が必要ない場合は、EJB シングルトン Bean、またはシングルトン スコープの CDI Bean を使用できます (私は EJB シングルトンを好みます)。ユーザーのアクティビティ (Bean 呼び出し) を監視するには、インターセプターが役立つ場合があります。SFSB 呼び出しをインターセプトし、その方法でシングルトンをフィードできます。

于 2013-06-19T20:42:52.157 に答える
0

ログインしたユーザーの数をカウントするには、Bean を @Singleton として定義する必要があります。@Singlton は、コンテナの開始から終了までデータを保持します。

import javax.ejb.Singleton;
@Singleton

public class CounterBean {
private int loginUser = 1;

// Increment and return the number of users
public int countLoggedInUsers() {
    return loginUser++;
}
}

永続的にログインしたユーザーを保存するには、データベースまたはファイルを使用する必要があります。

于 2013-06-20T10:53:27.763 に答える