Announcement

Collapse
No announcement yet.

müssen TagSupport-Klassen multi-thread-sicher sein ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • müssen TagSupport-Klassen multi-thread-sicher sein ?

    Hallo und guten Tag!

    Muss die erweiterte Klasse von TagSupport und deren Methoden doStart(), doAfterBody() und doEnd() bei klassischen Tags multi-thread-sicher sein?

    Arbeite mich gerade in das Thema Servlets und JSP ein und bin bei den klassischen Tag-Handler angelangt. In meinem Buch wird darauf hingewiesen, dass SimpleTagSupport-Klassen immer nur einmal verwendet werden. Bei jedem Aufruf wird eine neue Instanz erstellt.


    Im Gegensatz können TagSupport-Klassen durch den Container in einem Pool verwaltet werden und mehrfach verwendet werden.

    Es wird darauf hingewiesen, dass Instanzvariablen, die es nur einmal pro Instanz gibt, immer in der Methode doStart() initialisiert werden sollen da sie sonst noch einem alten Wert aus der letzten Verarbeitung haben.


    Beispiel:

    public class DasIteratorTag extends TagSupport {
    int filmZähler;

    public int doStartTag() throws JspException {
    filmZähler=0;
    ...
    return EVAL_BODY_INCLUDE;
    }

    public int doAfterBody() throws JspException {
    filmZähler++;

    if (filmZähler < …
    return EVAL_BODY_AGAIN;
    else
    return SKIP_BODY;
    }

    public int doEndTag() throws JspException {
    return EVAL_PAGE;
    }
    }

    Der obige Beispielcode (aus dem Buch) funktioniert nach meiner Meinung nur, wenn der Container mir garantiert, dass immer nur ein Thread alleine durch die Methoden doStartTag(), doAfterBody() und doEntTag() läuft.

    Daher meine Frage;
    Muss die erweiterte Klasse von TagSupport und deren Methoden doStart(), doAfterBody() und doEnd() bei klassischen Tags multi-thread-sicher sein?

    Oder wird mir vom System (Container) garantiert, dass immer nur ein Thread von Anfang bis Ende durch alle Methoden läuft?

    Im Voraus besten Dank für eure Bemühungen.
    Philipp

  • #2
    joo, wird durchlaufen
    Christian

    Comment


    • #3
      Hallo Philipp,

      Mit dem was Du schreibst hast Du vollkommen recht. Zur Beantwortung Deiner Frage: Der Container garantiert das eine Tag-Handler-Instanz immer nur von einem Request (entspricht Thread) zur selben Zeit durchlaufen wird. Das steht explizit in der JSP-Spec 13.1. und wurde meines Wissens nach extra klargestellt.

      Viele Grüße,

      Alwin

      Comment

      Working...
      X