All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.test.clusterbench.common.session.CommonGranularHttpSessionServlet Maven / Gradle / Ivy

There is a newer version: 11.0.1.Final
Show newest version
/*
 * Copyright The ClusterBench Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.jboss.test.clusterbench.common.session;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import org.jboss.test.clusterbench.common.ClusterBenchConstants;
import org.jboss.test.clusterbench.common.SerialBean;

public class CommonGranularHttpSessionServlet extends HttpServlet {

    private static final Logger log = Logger.getLogger(CommonGranularHttpSessionServlet.class.getName());
    public static final String KEY_SERIAL = CommonGranularHttpSessionServlet.class.getName() + "Serial";
    public static final String KEY_CARGO = CommonGranularHttpSessionServlet.class.getName() + "Cargo";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(true);

        if (session.isNew()) {
            log.log(Level.INFO, "New session created: {0}", session.getId());

            // Reuse serial bean logic to generate the data but don't store the SerialBean instance directly.
            SerialBean tempBean = new SerialBean();
            session.setAttribute(KEY_SERIAL, tempBean.getSerial());
            this.storeCargo(session, tempBean.getCargo());
        }

        Integer serial = (Integer) session.getAttribute(KEY_SERIAL);
        byte[] cargo = this.loadCargo(session);

        resp.setContentType("text/plain");

        // Readonly?
        if (req.getParameter(ClusterBenchConstants.READONLY) != null) {
            resp.getWriter().print(serial);
            return;
        }

        // Now store the serial in an attribute
        session.setAttribute(KEY_SERIAL, serial + 1);

        // Do nothing with cargo.

        resp.getWriter().print(serial);

        // Invalidate?
        if (req.getParameter(ClusterBenchConstants.INVALIDATE) != null) {
            log.log(Level.INFO, "Invalidating: {0}", session.getId());
            session.invalidate();
        }
    }

    public void storeCargo(HttpSession session, byte[] cargo) {
        session.setAttribute(KEY_CARGO, cargo);
    }

    public byte[] loadCargo(HttpSession session) {
        return (byte[]) session.getAttribute(KEY_CARGO);
    }

    @Override
    public String getServletInfo() {
        return "Servlet using HTTP Session attributes to store serial and cargo separately.";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy