Mittwoch, 22. Juli 2009

Spring MVC

Mit diesem Post will ich einige Stolpersteine bei dem Einarbeiten in Spring und der Implementierung einer ersten Spring MVC Anwendung beschreiben und einige für bestimmte Bereiche der seite wichtige Links bereitstellen.

Grundsätzliche Informationsquellen die beim Einstieg pflicht sind:
SpringByExample: Hier findet man eine Viel zahl an kleinen Beispielimplementierungen für fast alle wichtigen Spring Frameworkteile. Nachteilig wirken sich aus, das Fahelen von Schritt für Schritt Tutorials und teils oberflächliche Beschreibungen und Beispiele.
SpringDoku: Ausführlicher als man glaubt und auf jeden Fall die Standardlektüre für alle Spring Eisnteiger.
SpringBlog: Neuigkeiten im Bereich Spring findet man hier.

Für die Umstellung von Spring MVC auf Annotationsbasierte Konfiguration ist dieser Artikel ganz gut wobei er nicht auf Interceptor klassen eingeht.

Ich Finde die @Autowired Funktion für eine der sinnvollsten Annotationen. Oft hat man jedoch mehr als ein Objekt der gleichen Klasse im Spring Kontext hier hilft die @Qualifier("") Annotation.

@Autowired
@Qualifier("applicantFacade")
private ApplicantFacade iApplicantFacade;
Weiterhin kann man bestimmte Objekte für das Autowire Context deaktivieren. - ...


Spring - Hibernate
Will man die beiden mächtigen Frameworks verbinden kommt man an dem Buch Spring & Hibernate - Eine Praxisbezogene Einführung nicht vorbei. Viel Zusatz information braucht man nach aufmerksamen Durchlesen des Buchs eigentlich nicht. Ich will jedoch speziell im Hinblick auf MVC auf den OpenSessionInViewFilter eingehen der notwendig ist wenn man Lazy Loading der Objekte braucht:

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter


Zudem hatte ich einige Probleme mit der NonUniqueObjectException. Exception die für die Ich nicht sofort eine Lösung fand: Link1, Link2

Spring Security
Momentan ist die einfachste und schnellste Einführung in Spring Security in videoform ist etwas älter und stellt Spring Security 2.x vor.

Speziell im Hinblick auf die Security 3.0 wurde das framework viel userfreundlicher. Eine Menge von XML Konfiguration ist nun überflüssig geworden. Im Spring Finance Beispiel kann man einige Gute Ansätze und Ideen für seine Spring 3.0 Security und MVC Konfiguration holen. Weitere aktuelle und Entwicklernahe Quelle für Spring Security ist der Spring Blog bzw. der Security 3.0 Eintrag.

Will man User Programmatisch anmelden so kann man die hier angeführte Anleitung verwenden.

Will man einem User nur Zugriff auf Seine Objekte - Objekte die er erstellt hat bzw. Objekte die er Verwalten darf bereitstellen (Artikel - Autor) - so muss man etwas weiter in das Framework einsteigen und eine ACL Implementierung für seine Sicherheitsrelevanten Objekte bereitstellen. Ein sehr interesantes Tutorial findet man hier.

will man für das Admininterface oder für Sessionexterne Zugriffe erfahren welche Sessions gerade aktiv sind bzw welcher User sich gerade auf der Palttform befindet so hilft hier diese knappe Handlungsanweisung.

Spring Web Flow

Rendering - Tiles Einrichtung unter Spring
Um redundanzen in den JNLP Files zu vermeiden und Trotzdem einfachhat und Kontrolle über den Rendering Prozess zu haben eignet sich der Tiles Ansatz ziemlich gut. Zudem bietet Tiles die Möglichkeit in wenigen Schritten eine Navigation und somit die dynamische hervorhebung der aktuellen Position auf der Webseite, ein Breadcrumbs Model und dynamisches anpassen des Webseiten Templates abhängig von der aktuellen Contentseite und der Rolle des Nutzers. Für die Tiles Einrichtung ist wie Üblich die Spring Referenz in akuteller Version zu beachten.

Um eine dynmaische Navigation auf der Webseite einzurichten habe ich mich vom folgenden Beitrag inspirieren lassen. Das vorgestellte Konzept lässt sich beliebig erweitern.
Weiterhin ist es machmal notwendig auch programmatisch in den Tiles Prozess einzugreifen. Die Klassen DynamicTilesView und DynmaicTilesViewProcessor übernehmen leiten alle Anfragen an die Tiles Konfiguration weiter und können weitreichenden Veränderungen and dem tatsächlich angewandtem Tiles Definition sowie an den respond und request Objekten vornehmen. Weiterhin lassen sich für bestimmte Tiles Definitions sogennante Preparer einbauen und auch Kontextabhängige Programmatische Veränderungen vornehmen können.