当前位置: 首页 > 知识库问答 >
问题:

何时使用会话Bean

伏子辰
2023-03-14

大家好,我对我的应用程序使用哪个会话bean感到困惑。我正在尝试构建一个像Facebook这样的移动网络应用程序,它可以同时允许多个用户。我上网冲浪以获取更多信息。从我从stack overflow和其他教程中收集到的信息来看,有状态会话bean维护事务内部和事务之间的状态(会话状态),并且它是针对客户端的。无状态不支持,但支持多个客户机来共享bean实例。而Singleton有点类似于无状态bean。

我的问题是我要为应用程序使用哪个会话bean。感谢您的快速回复。

注意:客户端(移动电话)与servlet通信,servlet与EJB通信以从数据库中提取数据。

public class LoginServlet extends HttpServlet {

@EJB
CampusianDataBaseBeanLocal campusianDataBaseBean;

Campusian campusian;
Gson gson;


@Override
public void init() throws ServletException {
    super.init();
    campusian = new Campusian();
    gson = new Gson();
}


/**
 * Processes requests for both HTTP
 * <code>GET</code> and
 * <code>POST</code> methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        String username = request.getParameter("campusianUserName");
        String password = request.getParameter("campusianPassword");
        String gsonString;

        campusian.setUserName(username);
        campusian.setPassword(password);

        System.out.println("First time: "+username);

        /**
         * This check if the username and password entered by user is correct.
         * If yes set campusian setSuccess to true and convert the object to string using gson
         * Else set object campusian method to false
         */
        if (campusianDataBaseBean.login(campusian)) {
            campusian.setSuccess(true);
            System.out.println("Connected to the database");
            /**
            try {
                connection.connect();
                connection.login(username, password);
                if (connection.isAuthenticated()) {
                    System.out.println("Connected: "+connection.getServiceName());
                    campusian.setConnection(connection);
                    campusian.setSuccess(true);
                }else {
                    campusian.setSuccess(false);
                }
            } catch (XMPPException ex) {
                Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
            **/
            gsonString = gson.toJson(campusian);
        }else {
            campusian.setSuccess(false);
            gsonString = gson.toJson(campusian);
        }

        //this sends the gson string to the mobile user
        out.print(gsonString);

    } finally {            
        out.close();
    }
}

}

共有1个答案

高泳
2023-03-14

对于所有不保留状态的类,都需要一个单例bean。在您的情况下,对于数据库通信,您需要一个单例。

对于用户身份验证,通常将用户对象或用户令牌存储在会话本身的某个位置。根据您的实现,您将拥有某种类型的SessionContext/SessionStore,其中会维护登录状态。

维护用户会话不需要会话范围的bean!

 类似资料:
  • 问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该

  • “您可以决定创建多个会话...如果出于可伸缩性的原因需要多个会话。”

  • 问题内容: 如果一个用户已经登录并尝试在新实例中再次登录,我希望它注销另一个用户实例。我不希望同一用户在我的应用程序上登录两次。 当前会话存储在Redis存储中,我正在使用express / connect处理会话存储。可以用来破坏会话的可用功能之一如下: 但是,我需要在调用.destroy()之前找到该会话ID。在Redis中,用户名存储为会话的一部分。 问题:是否可以查询Redis以基于用户名

  • 我试图使用Spring Cloud的Zuul、Eureka和我自己的服务实现微服务架构。我有多个具有UI和服务的服务,每个服务都可以使用x509安全性对用户进行身份验证。现在我想把祖尔放在那些服务机构的前面。由于Zuul无法将客户端证书转发到后端,我认为下一个最好的方法是在Zuul的前门对用户进行身份验证,然后使用Spring会话在后端服务中复制他们的身份验证状态。我遵循了Dave Syer的教程

  • 问题内容: 我正在使用Spring Security构建一个Web应用程序,该应用程序将驻留在Amazon EC2上并使用Amazon的Elastic Load Balancer。不幸的是,ELB不支持粘性会话,因此我需要确保我的应用程序无需会话即可正常运行。 到目前为止,我已经设置了RememberMeServices来通过cookie分配令牌,并且可以正常工作,但是我希望cookie在浏览器会

  • 中描述的声明性基和ORM映射函数 映射器配置 是ORM的主要配置接口。配置映射后,持久性操作的主要使用接口是 Session . 会话基础 会议的作用是什么? 使用会话的基础知识 打开和关闭会话 构建begin/commit/rollback块 使用sessionmaker 查询(1.x样式) 查询(2.0样式) 添加新项目或现有项目 删除 冲洗 过期/刷新 使用任意WHERE子句更新和删除 自动