apache jetspeed ein framework für webportale...manager des java awt zu vergleichen ist. die...
TRANSCRIPT
-
e-Commerce
Entwicklung von Webportalen mit der Portlet API
Apache Jetspeed ein Framework für Webportale
-
e-Commerce
Agenda• Jetspeed Web Portal eine Einführung
• Die Portal API und Erweiterungen
• MVC II Architektur für Portlets
• Consumer Producer Metapher
• Portlets und WebServices
-
e-Commerce
Jetspeed Portal Layout
Pages
Portlets
Click customize...
-
e-Commerce
JetSpeed Pages Administration
Click customize
Page...
-
e-Commerce
JetSpeed Page Administration
Click add Portlet...
-
e-Commerce
JetSpeed Portlets Administration
-
e-Commerce
Kommerzielles Portal-Layout
-
e-Commerce
Visuelle Struktur einer Portal Seite
• Portale sind nach der Desktop Metapher aufgebaut ohne jedoch bereits deren volle Funktionalität zu erreichen.
Der Benutzer kann seine Portal Seiten selber konfigurieren und deren Inhalte zusammenstellen.
Die kleinste atomare konfigurierbare Einheit ist das Portlet, dessen Ansicht vom Portal Controller verwaltet wird.
Das Layout der Portlets geschieht z.Z. noch mit einem sehr einfachen Algorithmus, der mit dem Gridlayout Manager des Java AWT zu vergleichen ist.
Die einzelnen Portale lassen sich vergrößern und verkleinern, ähnlich zu einer Windows Anwendung.
Portal-Page
Portlet_1 - View
Portlet_3 - View
Portlet_2 - View
Portlet_4 - Iconfied
Portlet_5 - Iconfied
-
e-Commerce
Logische Struktur einer Seite
Screen/Page
PortletController
PortletControl PortletControl PortletControl
Portlet_1 Portlet_2 Portlet_3
PortletController: fungiert als LayoutManager und verwaltet die PortletControls.
PortletControl: dekoriert ein Portlet und stellt dessen Inhalt innerhalb eines Rahmens mit Titelzeile da.
-
e-Commerce
Aufbau einer Portals Engine
-
e-Commerce
Jetspeed Schichtenmodell
Jetspeed
Portlet API
Turbine & Velocity
Servlet Engine
Http Server
Jetspeed basiert auf den Apache Subprojekten Turbine und Velocity.
Turbine ist ein Servlet basiertes Framework, das den Bau einer Webanwendung mit einer MVC Architektur ermöglicht.
Für das Seitenlayout wird Velocity verwendet, welches eine eigene Beschreibungssprache beinhaltet. Alternativ lässt sich jedoch auch JSP verwenden.
Als Servlet Engine funktioniert jeder Webcontainer der die Servlet Version2.2 unterstützt.
-
e-Commerce
Client / Server Sicht der Portal APIClientseitiges UML Modell Simple Portlet
RunData(from org.apa che. turbine .util)
HttpServletRequest(from jav ax.serv let.http)
HttpServletResponse(from jav ax.servlet.http)
PortalPage
Portlet
getContent()
(from org.apache.jetspeed.portal)
ConcreteElement(from org.apache.ecs)
PortletView
0..*0..*
public ConcreteElement getContent(RunData data) { StringElement html = new StringElement(); html.setTagText("HelloWorld"); return html;}
-
e-Commerce
Unsymmetrische Jetspeed API
• Im Vergleich zur Servlet API wirkt die Interaktion mit einem Jetspeed Portlet unübersichtlich:
– Die Eingabeparameter werden an das Portlet mit einem RunData Objekt aus dem Turbine Package übergeben.
– Die Ausgabe erfolgt mit einem HTML ConcreteElement aus dem Element Construction Set Package (ECS).
– Das Rendering und Layout der Portlets erfolgt mit Klassen aus dem Velocity Package.
• Dies wirkt auf den ersten Blick sehr verwirrend und vermischt viele verschiedene Apache - Jakarta Subprojekte.
• Wünschenswert ist eine Portlet API anlog zur Servlet API mit einem PortletRequest als Eingabe und einem PortletResponse als Ausgabe.
-
e-Commerce
JSR-168• Die ursprünglichen Vorschläge von IBM und Sun für
eine Portlet API (JSR-162/167) wurden im Februar 2002 zusammengeführt und ein neuer JSR-168 im März ins Leben gerufen.
• Specification leads: IBM & Sun.• Expert Group members:
Apache, ATG, BEA, Boeing, Borland, BroadVision, Citrix, Epicentric, Fujitsu, Hitachi, HP, IONA, Oracle, SAP, SAS, SilverStream & Sybase.
• March - Expert Group work first meeting• May/June - first draft, specification and RI• October - final draft, specification and RI• December - V 1.0 specification, RI & TCK
-
e-Commerce
Erweiterte Portlet API• Eine API analog zur Servlet Programmierung lässt sich durch einfache Anwendung des
Decorator Patterns erreichen
• Die Methoden doView/Edit/Config/Help reagieren auf die entsprechenden Buttons der Portletfensterleiste.
• Die Interaktion erfolgt ähnlich zu den normalen Servletaufrufen doGet/Post mittels dekorierenden PortletRequest/Response Klassen.
HttpServlet
doGet()doPost()
(from
Portlet
getContent()doEdit()doView()doConfig()doHelp()
(from
PortletRequest
PortletResponse
HttpServletRequest(from javax.serv let.http)
HttpServletResponse
(from java x.serv let.http)
Enhanced Portlet API asDecorator Pattern
-
e-Commerce
Verteilung von getContent// from: AbstractPortletAdapterpublic ConcreteElement getContent(RunData rundata) { PortletRequest req = decorateRequest(rundata); PortletResponse res = decorateResponse(rundata); try {
switch(req.getPortletMode()) { case PortletRequest.EDIT:
doEdit(req,res); break;
case PortletRequest.HELP: doHelp(req,res);
break; case PortletRequest.CUSTOMIZE:
doCustomize(req,res); break;case PortletRequest.VIEW:default: doView(req,res);
} // switch
-
e-Commerce
Dekorierung der Portlet API
AbstractPortletAdapter
doEdit() doView() doConfig() doHelp()
(from de.cimt.portlet)
PortletResponse(from de.cimt.portlet)
PortletRequest
(from
PortletRequestWrapper(from de.cimt.portlet.wrapper)
HttpServletRequest(from jav ax.serv let.http)
PortletResponseWrapper(from de.cimt.portlet.wrapper)
HttpServletResponse(from javax.serv let.http)
AbstractPortlet(from portlets)
Portlet
getContent()
(from
Eine solche Form der Portlet API wird vermutlich im JSR 168 vorgeschlagen. Die hier vorgestellteImplementierung erlaubt es dieses auch mit Jetspeed zu testen.
-
e-Commerce
Personalisierung
– Mit einem Portal arbeiten i. A. immer registrierte Benutzer, die sich per Logon Prozedur authentifiziert haben und einem User Objekt zugeordnet sind.
– Die Personalisierung wird gekapselt durch das User Objekt und die PortletSession.
HttpServlet
doGet()doPost()
(from
Portlet
getContent()doEdit()doView()doConfig()doHelp()
(from
PortletRequest(from org.apache.jetspeed.portal)
PortletResponse
(from org.apache.jetspe ed.porta l)
HttpServletRequest(from javax.serv let.http)
HttpServletResponse
(from javax.serv let.http)
Enhanced Portlet API viaDecorator Pattern
HttpSession(from javax.servlet.http)
PortletSession(f rom org.apache.j etspeed.p ortal)
PrintWriter(from io)
User
-
e-Commerce
MVC II für PortletsDas Portlet fungiert als Controller.Nach der Interaktion mit den BusinessModell Klassen erfolgt die Delegationan die jeweilige JSP zum Aufbereitendes Html Inhalts.
AbstractPortletAdapter
doEdit() doView() doConfig() doHelp()
(from de .cimt.portle t)
Portlet(from org.apache.jetspeed.portal)
StockQuoteEdit
StockQuoteView
StockQuoteConfig
StockQuoteHelp
StockQuotePortlet
doEdit()doView()doConfig()doHelp()
edit
view
config
help
PortletRequest(from de.cimt.portlet)
-
e-Commerce
Vom Portlet zur JSP// from: AbstractPortletAdapterprotected void dispatch(String uri,PortletRequest req, PortletResponse res,boolean forward) throws PortletException,IOException { RunData rundata = (RunData) req.getAttribute("rundata"); ServletContext context = rundata.getServletContext(); RequestDispatcher dispatcher =context.getRequestDispatcher(uri); try { if(forward) { dispatcher.forward(req,res); } else { rundata.getOut().flush(); dispatcher.include(req,res); } } catch(Exception e) { // error recovery ...Ab hier funktioniert alles was wir schon vom Gespann Servlet & JSP kennen ...
-
e-Commerce
Struktur einer JSP für Portlets• JSPs die von einem Portlet per include Befehl geladen
werden dürfen keine vollständigen HTML Seiten erzeugen:– Sie werden durch die PortletControl Klasse dekoriert
• mit TitelBar und MenuIcons verziert– und vom PortletController angeordnet
• d.h. in den Kontext einer HTML-Table innerhalb einer Seite gestellt.
Entries:
key value
-
e-Commerce
Registrierung eines Portlets
• Portlets werden bei der Jetspeed Registratur bekannt gegeben.
• Im Jetspeed Unterverzeichnis %JETSPEED%\WEB-INF\conf befinden sich XML Descriptoren mit der Endung *.xreg, welche die einzelnen Portlets beschreiben:
Soap Portlet Portlet using SOAP WebService as Producer de.cimt.portlet.soap.SoapPortlet Soap WebService
-
e-Commerce
Portlet Anwendungen
• Ein Portlet ist so wie bis lang besprochen im Prinzip nichts weiter als eine Spezialisierung eines Servlets.
– Es erzeugt keine eigene HTML Seite sondern nur einen kleineren rechteckigen Ausschnitt, der dann mit den Inhalten weitere Portlets zu einer Seite zusammengesetzt wird.
– Die JSP als View müssen entsprechend "abgespeckt" sein, da sie keine eigenständigen und etc. Auszeichnungen enthalten dürfen.
• Ein Mehrwert entsteht, wenn verschiedene Portlets miteinander kommunizieren und arbeiten können.
• Erst dieses Zusammenspiel erlaubt die Umsetzung der Desktop Metapher.
-
e-Commerce
Umsetzung der Desktop Metapher
• Hierzu wird eine Nachrichten API ähnlich zu den ActionEvent ActionListener Muster des AWT benötigt.
• Ein Portierung von Struts auf die Portlet API ist bereits in Arbeit.
• Ein Problem sind mehrere Portlets auf einer Seite, die gleichzeitig Benutzereingaben erwarten. Hier greift die Desktop Metapher nicht. Es können nur die Daten eines Portlets / Formulars per get-Request übermittelt werden, die Eingaben der anderen Portlets gehen verloren, da auf der Clientseite kein Status gehalten werden kann.
• => Ein Umsetzung der Desktop Metapher mit Portlet Technologie verlangt eine andere Interaktionsform und Benutzerführung.
-
e-Commerce
Beispiel: Simple Portlet Messaging
-
e-Commerce
Consumer - Producer• Portale bieten eine Vielzahl von Informationen und Links
zu internen und externen Datenquellen.• Im Prinzip ist das Portal gar nicht für den Inhalt selber
zuständig, sondern nur für eine geeignete Präsentation.• Dies lässt sich mit der Metapher einer Consumer-
Producer Architektur realisieren. Externe Dienste dienen als Producer von Content.
• Das Portal stellt als Drehscheibe für die Consumer diesen Inhalt da, möglichst noch für unterschiedliche Ausgabemedien wie z.B.:– Web via HTML– Handy via WML
-
e-Commerce
Consumer Producer Metapher
Portal - ServerPor
talChan
nels
Externe Dienste
Daten
Intern
e
Dien
ste
SMS
HTTP
WAP
Neuer Markt
T-Online
BillingWetter.de
Lager
SAP
Dateisystem
Datenbank
CMS
-
e-Commerce
WebServices als Producer
Portlet(from portal)
Service
(from serv ice)
0..*0..*
TransportProtocol
Http XML Rmi Corba
Soap
SessionBean
WebService
PluggableAdapter
Producer erzeugen Content in einem plattformneutralen Format (XML) und sendet diesen an das Portal (SOAP).
Der Content wird an das Portlet übergeben, dass sich um eine geeignete Aufbereitung (XML,XSLT) und das Rendering kümmert.
Rendering for
Channels
-
e-Commerce
Erweiterte Portal Architektur• Derzeit gibt es Bemühungen zur Standardisierung einer
einheitlichen Portal Metapher und Architektur.
– WSIA: WebServices for Interactiv Applications– WSRP: WebServices for Remote Portlets
• Mit Blick auf den JSR-168 ist daher zu erwarten, dass sich die Portal API noch ändern wird.
• Jetzt anlaufende Portal Projekte sind gut beraten sich auf diese Situation einzustellen und geeignete Brandschutzwände in ihre Software Designentwürfe mit einzuziehen, um nicht von den APIs einzelner Hersteller abhängig zu sein...
-
e-Commerce
WSIA/WSRP the Big Picture
Stocks serviceDocument service Cartoon service
Internet or Intranet via SOAP
-
e-Commerce
Hallo World WebService-Portlet• Das Soap Portlet verbindet sich zu einem WebService,
der für den Content sorgt.• Das Portlet selber stellt in seiner ViewJSP den
übergebenen Content einfach nur noch da.
• SoapPortlet prinzipieller Aufbau:– Default Provider, Service und Methode werden im
SoapPortlet.xreg vorkonfiguriert und in der Portlet.init Methode ausgewertet.
– Im Customize Mode kann der Benutzer dies individuell verändern.
– Im View Mode erzeugt das Portlet einen SOAP Request an den WebService und stell den Content in seiner JSP da.
-
e-Commerce
Soap Portlet Customize Mode
-
e-Commerce
Soap Portlet View Mode in Action
-
e-Commerce
Das Soap Portlet im Detail...public void doView(PortletRequest req, PortletResponse res) throws ... String uri = "/jsp/SoapPortletView.jsp"; String task = req.getParameter("task"); if ("invokeWebService".equals(task)) { try { String soapContent = invokeWebService(getProvider(req), getService(req),getMethod(req),getSoapParameters(req)); req.setAttribute("content",soapContent); }catch(Exception e) { req.setAttribute("content",e.toString()); } } else if ("customizeWebService".equals(task)) { saveCustomizeParameters(req); } setAttributesForJSP(req); include(uri, req, res);}
-
e-Commerce
Cont. ... invokeWebService/** * get the response from the WebService */protected String invokeWebService(String provider,String service, String method,Vector params) throws Exception { String msg; Response resp = getSOAPResponse(provider,service,method,params); // simple error handling if (resp.generatedFault()) { Fault fault = resp.getFault(); msg = fault.getFaultString(); msg += "\n code "+fault.getFaultCode(); } else { Parameter result = resp.getReturnValue(); msg = result.getValue().toString(); } return msg;}
-
e-Commerce
Cont. ... getSOAPResponseprotected Response getSOAPResponse(String provider,String service, String method,Vector params) throws SOAPException,MalformedURLException { Call soapCall = createCall(service,method,params); Response soapResponse = soapCall.invoke( new URL(provider),""); return soapResponse; }protected Call createCall(String service, String method,Vector params) { Call soapCall = new Call(); soapCall.setTargetObjectURI(service); soapCall.setMethodName(method); soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); soapCall.setParams(params); return soapCall;}
Die Interaktion ist generisch implementiert...
-
e-Commerce
Der HelloWorld "WebService"
public class HelloWorld { public String sayHello(String name) { return "Hello "+name+" from SOAP WebService"; }
}
• Einfacher ist ein WebService nicht zu entwickeln...• Woher kennt Apache SOAP den WebService?• => WebService Deployment Descriptor.
-
e-Commerce
Deployment mit Apache SOAP
-
e-Commerce
Resumé Web Portale
• Mit der Portal API lassen sich einfach anspruchsvolle Webanwendungen mittels Portlets zusammenbauen.
• WebPortale, WebService, XML und SOAP lassen sich in einer höherwertigen Architektur einbetten.
• Eine Consumer Producer Architektur bietet hierzu die geeignete Metapher.
• Um wirklich interaktive Webanwendungen zu bauen, benötigt es einiges an Umdenken hinsichtlich der Desktop Metapher. Denn Antwortzeiten und Interaktionsformen sind anders als bei einem lokalen Arbeitsplatz.
Folie 1AgendaJetspeed Portal LayoutJetSpeed Pages AdministrationJetSpeed Page AdministrationJetSpeed Portlets AdministrationLayout eines kommerziellen PortalsVisuelle Struktur einer Portal Seite Logische Struktur einer Portal SeiteAufbau einer Portals EngineJetspeed SchichtenmodellClient / Server Sicht der Jetspeed APIUnsymmetrische Jetspeed APIJava Community Process, JSR-168Erweiterte Portlet APIVerteilung von getContentDekorierung der Portlet APIPersonalisierungMVC II für PortletsVom Portlet zur JSPStruktur einer JSP für PortletsRegistrierung eines PortletsPortlet AnwendungenUmsetzung der Desktop MetapherBeispiel: Simple Portlet MessagingConsumer - ProducerConsumer Producer MetapherWebServices als ProducerErweiterte Portal ArchitekturWSIA/WSRP the Big PictureHallo World Portlet mit WebServiceSoap Portlet Customize ModeSoap Portlet View Mode in ActionDas Soap Portlet im Detail...Cont. ... invokeWebServiceCont. ... getSOAPResponseDer HelloWorld "WebService"Deployment mit Apache SOAPResumé Web Portale