将用户特定数据存储在Web应用程序的静态变量中是否可行

时间:2012-08-31 09:40:42

标签: java

我正在开发一个WebApplication,一次可以同时访问7000个用户。

所以在这个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 
}
}

请告诉我是否可以在WebAplication中使用此逻辑,该WebAplication一次由近7000个用户同时使用。 我关心的是使用静态变量。

或者请建议,如果这是一个更好的方法来继续这个。

3 个答案:

答案 0 :(得分:2)

由于它是一个Web应用程序,我会为每个用户创建一个会话并将其特定信息放在那里。这就是它的用途。

您没有说明信息的内容:凭据,ACL等。如果清楚,您可以更轻松地评论您的数据结构选择。

答案 1 :(得分:0)

目前尚不清楚您的arraylist是否包含用户信息或用户列表,因为makeCall会在其中查找“ID”。

无论如何,在并发环境中将内容存储在静态变量中通常是个坏主意。如果您在Web应用程序中,我建议您将用户信息存储在HttpSession中作为属性:

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

答案 2 :(得分:0)

最好的方法是使用HttpSession并让容器为您处理。 只需用@SessionScoped注释包含用户信息的类(当然这取决于您使用的框架),让容器为您处理所有事情。而不是做容易出错的设计;)