为每个客户端维护一个有状态会话bean的单独实例

时间:2018-11-29 21:50:48

标签: java-ee stateful-session-bean session-bean

我用状态会话Bean创建了一个简单的Java Web应用程序。我希望它为其每个新客户端维护一个单独的整数列表。

我的远程界面

package Emote.ejb;

import java.util.List;
import javax.ejb.Remote;

@Remote
public interface EmoteRemote {


    void addElement(int e);
    void removeElement(int e);

    List<Integer> getElement();



}

我的状态豆

package Emote.ejb;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateful;

/**
 *
 * @author 
 */
@Stateful
public class EmoteStateful implements EmoteRemote{

   List<Integer> values = new ArrayList<>();

    @Override
    public void addElement(int e) {

        values.add(e);
    }



    @Override
    public void removeElement(int e) {

        values.remove(new Integer(e));
    }

    @Override
    public List<Integer> getElement() {

        return values;
    }
}

Jsp页面

<%@page import="java.util.List"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="Emote.ejb.EmoteRemote"%>
<!DOCTYPE html>
<%!    
    private static EmoteRemote values;

    public void jspInit() {

        try {

            InitialContext ic = new InitialContext();
            values = (EmoteRemote) ic.lookup("java:global/EmoteCaps/EmoteStateful");

        } catch (Exception e) {

            System.out.println(e.getMessage());
        }

    }

%>

<%
    if (request.getParameter("AddNum") != null) {

        int e = Integer.parseInt(request.getParameter("t1"));
        values.addElement(e);

    }

    if (request.getParameter("remNum") != null) {

        int e = Integer.parseInt(request.getParameter("t1"));
        values.removeElement(e);

    }


%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Welcome</h1>

        <form name="abc" method="post">

            <input type="text" name="t1"/><br>
            <input type="submit" value="Add" name="AddNum"><br>
            <input type="submit" value="Remove" name="remNum">

               <%
                if(values != null){

                    List<Integer> nums = values.getElement();

                    for(int value : nums){

                        out.println("<br>" + value);
                    }

                     out.println("<br> Size" + nums.size());
                }


            %>

        </form>
    </body>
</html>

首先,我运行程序并将值添加到列表中。然后,我打开另一个浏览器,并通过其URL调用相同的程序。我希望它会返回一个新的数组列表,该列表为空,相反,它会返回与在先前浏览器实例中创建的数组列表相同的列表。

但是我想为每个客户端维护一个单独的数组列表。

如何为每个客户端创建一个单独的有状态bean实例并进行维护?

先谢谢了。

0 个答案:

没有答案