Freemarker: Behandlung von undefinierten Werten

Die Standard-Templatesprache zur Generierung von Webseiten mit Java bilden die
Java Server Pages (JSP). Eine gute Alternative zu JSPs ist die Templatesprache Freemarker, mit der sich eine striktere Trennung zwischen Anwendungslogik und View durchsetzen lässt. Wie die Integration von verschiedenen Templatesprachen mit Spring-MVC erfolgt, habe ich in diesem Artikel beschrieben: Velocity, Freemarker, Jade4J – Alternativen zu JSPs

Beim Einsatz von Freemarker muss man darauf achten, dass alle Modell-Werte korrekt gefüllt sind, damit die Platzhalter im Template korrekt ersetzt werden können. Falls ein Wert nicht vorhanden ist, wird mit der Freemarker-Standardkonfiguration Folgendes passieren:

  1. Freemarker wirft eine Exception: freemarker.core.InvalidReferenceException
  2. die Fehlermeldung wird geloggt
  3. das weitere Generieren der Seite wird abgebrochen
  4. die Webseite zeigt dann eventuell eine halb fertig generierte Seite oder einen Stacktrace der Exception an

Das ist zwar während der Entwicklung ganz praktisch, aber die Anwender sollten natürliche keine fehlerhafte Seite sehen. Zur Vermeidung von Fehlermeldungen, wenn ein Wert nicht gesetzt ist, können wir folgendes tun:

  • Default-Werte im Template definieren
  • einen anderen Freemarker-Exception-Handler verwenden

Weiterlesen

Advertisements

Aufgaben zeitgesteuert ausführen mit Spring-TaskScheduler

Bei Geschäftsanwendungen wird häufig eine zeitgesteuerte Ausführung (Scheduling) von Aufgaben benötigt, wie beispielsweise das regelmäßige Abrufen eines Email-Kontos. Dabei unterscheidet man beim Scheduling prinzipiell zwischen zwei Arten:

  • eine Aufgabe zu einem bestimmten Zeitpunkt ausführen (z.B.: am 24.12.2012, um 18:00 Uhr)
  • Aufgaben in festgelegten zeitlichen Abständen wiederholt ausführen (z.B.: alle 20 Minuten)

Für Scheduling können wir im Java-Umfeld die Timer-Klassen (java.util.Timer + java.util.TimerTask) des JDKs benutzen oder eine Bibliothek einsetzen, wie den sehr mächtigen Quartz-Scheduler. Falls man allerdings in seiner Anwendung Spring 3 verwendet, sollte man sich auf jeden Fall dessen Möglichkeiten anschauen (Spring-Dokumentation: Task Executing and Scheduling):

  • Scheduling mit TaskScheduler und Runnable-Objekt
  • Scheduling mit Hilfe des Task-Namespaces von Spring
  • Scheduling aufgrund der Spring Scheduling-Annotations

Weiterlesen