9 Stimmen

Korrekte Verwendung von Stateful Beans mit Servlets

Wir haben derzeit eine Stateful Bean, die in ein Servlet injiziert wird. Das Problem ist, dass wir manchmal eine Caused by: javax.ejb.ConcurrentAccessException: SessionBean is executing another request. [session-key: 7d90c02200a81f-752fe1cd-1] bei der Ausführung einer Methode auf der stateful bean.

public class NewServlet extends HttpServlet {  
    @EJB  
    private ReportLocal reportBean;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           String[] parameters  = fetchParameters(request);
           out.write(reportBean.constructReport(parameters));
        } finally { 
            out.close();
        }
    } 
}

Im obigen Code, constructReport prüft, ob eine neue Verbindung zu der im Bericht angegebenen Datenbank geöffnet werden muss, woraufhin ein Bericht in HTML aus einer Abfrage erstellt wird, die aus den angegebenen Parametern besteht.

Der Grund, warum wir uns für eine stateful Bean und nicht für eine stateless Bean entschieden haben, ist, dass wir eine Datenbankverbindung zu einer unbekannten Datenbank öffnen und Abfragen durchführen müssen. Bei einer zustandslosen Bean erscheint es äußerst ineffizient, mit jeder injizierten Instanz der Bean wiederholt Datenbankverbindungen zu öffnen und zu schließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X