0

一度に約 7000 人のユーザーが同時にアクセスできる WebApplication を開発しています。

したがって、このWebアプリケーションでは、以下のロジックを使用しています

ユーザーが正常にログインすると、示されているように、彼に関連する情報を ArrayList に格納しています。

クラス 1 :

if(successfullyloggedin)  
{
ArrayList accounts = getInfoForUser(customerId);
userinfo.accountsinfor  = accounts;
}


public ArrayList getInfoForUser(String custId)
{
ArrayList  users  = getDataFromDatabase();
return users;
}

クラス 2 :

public class UserInfo {
public static ArrayList accountsinfor;
}

クラス 3 :

クラス 3 はサービス クラスであり、ユーザーが存在するかどうかを確認して電話をかけます。

class services 
{


public String MakeCall(String Id)
{

    ArrayList accounts = UserInfo.accountsinfor;

if(!ID.contains(accounts ))
// Throw an Exception
}

else
{
// Its fine 
}
}

一度に約 7000 人のユーザーが同時に使用する WebAplication でこのロジックを使用できるかどうか教えてください。私の懸念は、静的変数の使用です。

または、これを進めるためのより良いアプローチがあるかどうかを提案してください。

4

3 に答える 3

2

これはWebアプリケーションなので、ユーザーごとにセッションを作成し、そこに特定の情報を入れます。それが目的です。

クレデンシャル、ACLなどの情報は何も言いません。それが明確であれば、データ構造の選択についてコメントする方が簡単です。

于 2012-08-31T09:47:00.327 に答える
0

配列リストにユーザー情報が含まれているか、makeCallが「ID」を検索するユーザーリストが含まれているかは明確ではありません。

とにかく、並行環境で静的変数にデータを格納することは通常悪い考えです。Webアプリケーションを使用している場合は、ユーザー情報をHttpSessionに属性として保存することをお勧めします。

http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpSession.html#setAttribute%28java.lang.String,%20java.lang.Object%29

于 2012-08-31T09:50:13.047 に答える
0

最善の方法は、HttpSession を使用して、コンテナーに処理させることです。ユーザー情報を保持しているクラスに注釈を付けるだけです@SessionScoped(もちろん、使用するフレームワークによって異なります)、コンテナがすべてを処理します。エラーが発生しやすい設計を行う代わりに;)

于 2012-08-31T09:58:19.780 に答える