JBoss Kontaktportlet

Die Portalanwendungsentwicklung setzt sich im Schwerpunkt aus der Implementierung von Portlets zusammen. Portlets bilden dabei die Schnittstelle zu den Benutzern eines Portals. Portlets liefern die Portalinhalte an den Benutzer aus und gestatten den interaktiven Dialog mit einem Portal. Portale setzen sich aus unterschiedlichen Funktionsbereichen zusammen, die in der Regel wiederum mit Portlets abgebildet werden.

Wesentliche Portalfunktionsbereiche sind:

  • Security und Single Sign-On (SSO)
  • Benutzerpersonalisierung
  • Content Syndication und CMS Integration
  • Darstellung und Verarbeitung unterschiedlicher Inhaltstypen
  • Suchfunktionen im Portalrepository
  • Integration von Applikationen
  • Web Services und Web Services for Remote Portlets (WSRP)
  • Interportlet-Kommunikation für den Datenaustausch
  • Auslieferung des Portalinhalts auf unterschiedlichen Plattformen (Web-Browser, PDA, etc.)
  • Internationalisierung
  • Verwaltung und Aktivierung von Portlets
  • Portalseitengestaltung und Aktivierung
  • Theme und Skin Erstellung sowie Aktivierung für ein einheitliches
  • Erscheinungsbild eines Portals (Corporate Identity)
  • Portlet-Caching und Portal-Clustering

Die Portalanbieter stellen sowohl proprietäre als auch standardisierte (JSR-168, JSR-286) Portletschnittstellen für die Programmierung von Portlets zur Verfügung. Zahlreiche Portlet-Bridges erlauben in der Implementierungsphase die Anwendung der gängigen Web-Frameworks wie beispielsweise Struts und JavaServer™ Faces. Neben Portlets bieten Portale auch weiterführende Programmierschnittstellen für die Implementierung von allgemeinen Komponenten wie Portletservices und Portletfilter an, deren Funktionalitäten wiederum als zentrale Komponenten von Portlets angesprochen und verwendet werden können.

Das Programmiermodell für Portlets unterscheidet sich von dem Web-Programmiermodell. Im Rahmen der Portlet-Entwicklung unterscheidet man zwischen der ActionRequest- und der RenderRequest-Phase. Das Konzept des Phasenmodells ist von JavaServer™ Faces (JSF) bekannt, weil dort ebenfalls unterschiedliche Phasen während der Übermittlung einer Form durchlaufen werden. Aus diesem Grund bietet sich JSF für die Implementierung von Portlets an, weil bei der Anwendung kein wesentlicher Bruch zwischen dem Portlet-Phasenmodell und dem Web-Framework-Phasenmodell von JSF entsteht. Die Anwendbarkeit von Web-Frameworks in einem Portlet, die nicht direkt ein Phasenmodell beinhalten (z.B.: Struts) wird durch Portlet-Bridges sichergestellt. Portlet-Bridges fungieren dabei als Mediator zwischen dem Web-Framework und der Portletschnittstelle.

Liste (kein Anspruch auf Vollständigkeit) von Portletumsetzungsstrategien:

Anwendung / Umsetzung von …
  • proprietären Portlet-Schnittstellen der Portalanbieter
  • JSR-168 Portlets auf Basis der abstrakten Klasse GenericPortlet
  • Struts-Portlets (JSR-168 konform) im Kontext der Apache Portal Struts-Bridge
  • JSF-Portlets (JSR-168 konform) basierend auf der Apache Portal JSF-Bridge
  • JSF-Portlets ( Apache MyFaces) im Kontext der Klasse MyFacesGenericPortlet
  • JSF-Portlets auf Basis der JSR-301 Spezifikation (Apache MyFaces Portlet Bridge, Open Source JSF Portlet Bridge, etc.)
  • Spring Portlet MVC (JSR-168 konform) im Rahmen des Spring Framework 2.0
  • JBoss Portlet Bridge (JSR-301 konform) für die Einbindung von Web-Frameworks in Portlets (z.B.: JBoss Seam und JBoss Rich Faces) 

Anhand der Liste erkennt man bereits, dass JSF als Portletumsetzungsstrategie gut positioniert ist. Diese Position wird durch die klare Fokusierung von JSF als Web-Frontend-Framework für Internet- und Intranet-Anwendungen im Rahmen von Java EE 5 noch weiter gestärkt. Interessant ist im Portalumfeld die Kombination der Java EE 5 Technologien, weil diese die Entwicklung komplexer Applikationen vereinfachen. EJB 3.0 in Verbindung mit der JPA ist eine attraktive Möglichkeit das Backend einer Portalanwendung zu implementieren. Im Frontend ist dabei JSF und die Programmierung von Managed Beans als Frontend-Schnittstelle zum Backend passend.

Sicherlich vereinfacht das EJB 3.0 Programmiermodell die Implementierung der EJBs und ebenso das Deployment solcher, weil keine komplexen Deployment Deskriptoren erstellt werden müssen. Auf der anderen Seite ist das Packaging einer Java EE Applikation nicht wesentlich einfacher geworden, sodass in Java EE 5 Anwendungen weiterhin VOs/DTOs und Java EE Patterns wie beispielsweise der Value Object Assembler ihre Anwendung finden. Der WebBeans-Ansatz und die Implementierung JBoss Seam vereinfachen neben dem Deployment auch das Packaging einer Java EE Applikation. Beim WebBeans-Ansatz werden die Komponentenmodelle von JSF und EJB 3.0 vereinheitlicht, sodass darüber hinaus der Entwicklungszyklus vereinfacht und beschleunigt wird.

JBoss Seam schließt bekannte Lücken der Web-Entwicklung - Speicherprobleme durch falsches Session-Handling, Bookmarking- und Back-Button-Probleme, um nur einige zu nennen - durch Konversationen die „stateful“ sind und damit Daten über mehrere Requests hinweg vorhalten können. Mit der JBoss Portlet Bridge können auch JBoss Seam Portlets deployed werden. Dies nur am Rande um eine interessante Portletumsetzungsstrategie angerissen zu haben.

Benutzerschnittstelle des Portlets

Dieser Abschnitt erläutert die Portalseite und die Benutzerschnittstelle der Portlets. Die Portlets sind dabei nur für den View-Modus ausprogrammiert worden, weil in den Portlets kein personalisierter Inhalt für einen Benutzer zur Verfügung stehen muss. Die Portletanwendung bildet aus fachlicher Sicht ein Adressbuch ab. Das Adressbuch beinhaltet die gängigen Editieroperationen und weiterführende Suchmöglichkeiten im Adressbuchdatenbestand.

Die Portlets sind im JBoss Portal in eine Portalseite mit dem Namen „Adressbuchseite„ eingebettet. Das Portal ist derart konfiguriert, dass nur die Adressbuchseite im Portal angezeigt wird. Andere Portalseiten und Portlets des JBoss Portals sind in der vorliegenden Konfiguration deaktiviert. Die Portlets sind in der Adressbuchseite linksbündig angeordnet.

Portletanzeige






























In der Ansicht sind die zwei Adressbuchportlets zu erkennen. Das obere Portlet dient zum Suchen von Adressbucheinträgen und generieren von PDF-Reports. Das untere Portlet hingegen wird zum Editieren von Adressbucheinträgen verwendet.

Das Editieren umfasst die folgenden Operationen:
  • Adressbucheintrag laden und aktualisieren
  • Adressbucheintrag neu anlegen
  • Adressbucheintrag löschen
Mit dem Portlet für die Adressbuchsuche können Wildcard-Suchen im Adressdatenbestand durchgeführt werden. Der Benutzer wählt bei einer Suche den Suchschlüssel und Suchfilter aus und bekommt zu den gewählten Suchparametern die im Adressdatenbestand hinterlegten Einträge angezeigt.

Als Suchschlüssel können folgende Parameter gewählt werden:
  • Name
  • Nachname
  • Straße
  • Stadt
  • Telefonnummer
  • E-Mail
Als Wildcard-Zeichen dient der „*“, sodass die Parameterdefinition „Suchschlüssel = Nachname“ und „Suchfilter = M*“ in der nachfolgenden Dialogmaske alle Adressbucheinträge anzeigt, die im Nachnamen mit „M“ beginnen.
 

Von der Menge der gefundenen und im Portlet angezeigten Einträge kann der Benutzer einen PDF-Report erzeugen.













Als Report-Framework ist in das Portlet JasperReports 3.0 integriert worden. Das Layout des Adressbuchreports ist frei mit einem graphischen Werkzeug definierbar. Das graphische Werkzeug zur Layoutgestaltung ist iReport 3.0.















Adressbucheinträge werden mit dem Portlet zum Editieren von Einträgen angelegt und bearbeitet. Für die Aktualisierung der Adressbuchdaten, lädt der Benutzer auf Basis des eindeutigen Adressbucheintrag-Identifikators (ID) den Adressbucheintrag in die Eingabemaske des Portlets, passt die Daten des geladenen Adressbucheintrages entsprechend an und aktualisiert den Eintrag im Adressbuch. Das Löschen eines Adressbucheintrages kann ebenfalls anhand der ID vorgenommen werden.
Für die Neuanlage eines Adressbucheintrages belegt der Benutzer die Felder der Eingabemaske im Portlet mit gültigen Daten und speichert die Daten für den eingegebenen Adressbucheintrag ab. Beim Abspeichern vergibt das System automatisch eine eindeutige ID, die als Referenz zu dem neu angelegten Adressbucheintrag dient.

Systemarchitektur

Das Adressbuch ist auf Basis Java EE 5 konzipiert und implementiert worden. Das Backend des Adressbuches setzt sich aus EJB 3.0 Komponenten zusammen. Dabei ist der Sprachschatz von Java 5 und Annotations für die Implementierung der Komponenten angewandt worden.

Gängige Java EE Patterns wurden bei der Entwicklung umgesetzt bzw. sind bereits durch die Wahl des Programmiermodells vorgegeben - beispielsweise implementieren Portlets in der Regel das Flyweight-Pattern. Im Frontend der Adressbuchportlets wird JSF in der „Apache MyFaces“ Implementierung eingesetzt.


Systemarchitektur der Portlets


Im Rahmen der Implementierung sind Java EE 5 Funktionalitäten, wie beispielsweise Annotations, Generics und Autoboxing sowie Funktionalitäten, wie Dependency Injection, im EJB 3.0 Kontext angewendet worden. Bezogen auf den EJB 3.0 Layer werden Stateless Session Beans (Facaden) und Entity Beans (Domain Modell) eingesetzt.