Fangen Classcast wenn Sie ein Objekt in der Sitzung speichern und versuchen, es nach einer neuen Bereitstellung zugreifen?

StackOverflow https://stackoverflow.com/questions/4391462

Frage

Ich bin eine Situation, wo, wenn ich ein Formular in der Sitzung gespeichert, nach einer neuen Bereitstellung eines Krieges zu machen und zu versuchen, das Formular zu gelangen, ich java.lang.ClassCastException erhalten.

Um dem Benutzer diese transparent zu machen, schrieb ich den folgenden Code:

try {
        command = (ReservationOfBooksCommand) request.getPortletSession().getAttribute(RESERVATION_OF_BOOKS_COMMAND_SESSION_NAME);
    } catch (ClassCastException e) {
        request.getPortletSession().removeAttribute(RESERVATION_OF_BOOKS_COMMAND_SESSION_NAME);
    }

Aber nicht sicher, ob es eine elegantere Alternative ist, wie ich es nicht tun, wie Runtime fangen und wollen nicht den Server jedes Mal neu zu starten ich einen neuen Krieg einzusetzen.

Danke.

War es hilfreich?

Lösung

Sie können den instanceof-Operator

Object command = request.getPortletSession().getAttribute(RESERVATION_OF_BOOKS_COMMAND_SESSION_NAME);

if(!(command instanceof ReservationOfBooksCommand)){
        request.getPortletSession().removeAttribute(RESERVATION_OF_BOOKS_COMMAND_SESSION_NAME);
}else{
   ...
}

Andere Tipps

Da Sie diese Frage mit tomcat Tags versehen haben, schlage ich vor, dass Sie:

  1. Erstellen Sie eine META-INF/context.xml in Ihrer eigenen Web-Anwendung.
  2. Fügen Sie die folgende Code-Zeile innerhalb des context.xml.

Beispiel:

<context>
    <!-- stuff here-->

    <!-- Persistence Manager. This handles all of session Tomcat handles from our app. -->
    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
        <Store className="org.apache.catalina.session.FileStore" /> 
    </Manager>

</context>

Wie Michael Barker sagte, die meisten Anwendungsserver säubern Anfragen und Sitzungen nach einer Umschichtung in der Standardeinstellung.

Damit Tomcat, die Sitzung zu speichern, Satz saveOnRestart="true". Dies ermöglicht tomcat die Sitzung zu speichern PersistentManager in einem FileStore mit (dh, ein Dateispeichersystem anstelle eines Datenbank-Speicher-System).

Hope, das hilft.

Einige App-Server ermöglichen die Sitzungen vor Umschichtung abgebaut werden. Harz zum Beispiel wird auch weiterhin den alten Code verwenden, um die alte Sitzung, neue Sitzungen auf neuen Code zu bewegen. Natürlich müssen Sie die Benutzer-Sitzung zu einem bestimmten Zeitpunkt auslaufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top