0

我正在开发一个 WebApplication ,一次可能有近 7000 个用户同时访问它。

所以在这个 Web 应用程序中,我使用下面的逻辑

当用户成功登录时,我将与他相关的信息存储在 ArrayList 中,如图所示。

第一类:

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 回答