Download - Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

Transcript
Page 1: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

Turbine Konzepte und Turbine Konzepte und DiensteDienste

(insb. Velocity Integration)(insb. Velocity Integration)

Julian WankJulian WankGerald RoglGerald Rogl

Page 2: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

22

InhaltInhalt

• EinführungEinführung

• MVCMVC

• TorqueTorque

• Turbine ServicesTurbine Services

• Upload ServiceUpload Service

• Users and SecurityUsers and Security

• Velocity oder JSPVelocity oder JSP

• SessionsSessions

Page 3: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

33

Inhalt (2)Inhalt (2)

• Java Files und TemplatesJava Files und Templates• Eine Seite mit Velocity bauenEine Seite mit Velocity bauen• Wie Templates gefunden werdenWie Templates gefunden werden• Templates und ActionsTemplates und Actions• AusführungsreihenfolgeAusführungsreihenfolge

– LoaderLoader– User LoginUser Login

• Velocity ContextVelocity Context– Automatisch erzeugte ObjekteAutomatisch erzeugte Objekte– Eigene Objekte hinzufügenEigene Objekte hinzufügen

• Wichtige PfadeWichtige Pfade• DocsDocs

Page 4: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

44

EinführungEinführung

• Open SourceOpen Source– KostenlosKostenlos– Quellcode ist frei verfügbarQuellcode ist frei verfügbar

• Server-Side Java FrameworkServer-Side Java Framework– Erlaubt schnelles und sicheres bauen von Web Erlaubt schnelles und sicheres bauen von Web

ApplicationenApplicationen• Teile auch einzeln verwendbarTeile auch einzeln verwendbar

– TDK beinhaltet Servlet Runner Tomcat 4.0TDK beinhaltet Servlet Runner Tomcat 4.0– Object-Relational Mapping Layer (Torque)Object-Relational Mapping Layer (Torque)– Presentation Layer (Velocity oder JSP)Presentation Layer (Velocity oder JSP)

Page 5: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

55

Model-View-Controller Model-View-Controller (MVC)(MVC)

• Design Pattern (Entwurfsmuster)Design Pattern (Entwurfsmuster)– Architektur vonArchitektur von

•Graphischen BenutzeroberflächenGraphischen Benutzeroberflächen

•Webgestützten AnwendungenWebgestützten Anwendungen

– Trennung vonTrennung von•Daten – Business Logic (Model)Daten – Business Logic (Model)

•Präsentation – User Interface (View)Präsentation – User Interface (View)

•Ablaufsteuerung (Controller)Ablaufsteuerung (Controller)

Bestandteile separat entwickelnBestandteile separat entwickeln

Page 6: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

66

– Für die View empfiehlt Sun den Einsatz von Für die View empfiehlt Sun den Einsatz von Java Server Pages (JSPs)Java Server Pages (JSPs)• Daten werden aus Model geholt (an Stelle von Daten werden aus Model geholt (an Stelle von

speziellen Tags), und in die HTML-Seite eingefügt speziellen Tags), und in die HTML-Seite eingefügt (Pull-MVC)(Pull-MVC)

• Push-Strategie: Model kümmert sich um die Aktualität Push-Strategie: Model kümmert sich um die Aktualität der Viewder View

– ControllerController• Wird meist durch Servlet repräsentiert (reagiert auf Wird meist durch Servlet repräsentiert (reagiert auf

Nutzerinteraktion mit der View und ruft Nutzerinteraktion mit der View und ruft entsprechende Methoden des Models auf)entsprechende Methoden des Models auf)

– VT: HTML Designer kann GUI ändern ohne den VT: HTML Designer kann GUI ändern ohne den Java Code anzurührenJava Code anzurühren

Page 7: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

77

Page 8: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

88

TorqueTorque

• Kreiert SQL Daten-Schema für DBKreiert SQL Daten-Schema für DB

• Kreiert Java Object Source FilesKreiert Java Object Source Files Tabelle Tabelle Klasse (nicht ändern!) Klasse (nicht ändern!)

• (Business Objects müssen in XML (Business Objects müssen in XML modelliert sein)modelliert sein)

• Alles weitere Alles weitere Team 3 Team 3

Page 9: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

99

Turbine ServicesTurbine Services

• Als Interface verwirklichtAls Interface verwirklicht Erweiterbarkeit einfachErweiterbarkeit einfach

– Ähnliches Service erweiternÄhnliches Service erweitern– Neues Service schreiben (implements yourInterface Neues Service schreiben (implements yourInterface

extends TurbineBaseService)extends TurbineBaseService)

• Über 25 eingebaute ServicesÜber 25 eingebaute Services– Upload ServiceUpload Service– Security ServiceSecurity Service– Logging ServiceLogging Service– Cache ServiceCache Service– Crypto ServiceCrypto Service

Page 10: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1010

Upload ServiceUpload Service

• Einstellen (im Einstellen (im TurbineResources.properties)TurbineResources.properties)– Ob files automatisch durch den Ob files automatisch durch den

ParameterParser angenommen werdenParameterParser angenommen werden– Wo files vorläufig gespeichert werden sollenWo files vorläufig gespeichert werden sollen– Die max. Größe einer Anfrage die noch Die max. Größe einer Anfrage die noch

bearbeitet werden sollbearbeitet werden soll– Die max. Größe die ge-cashed wird (durch die Die max. Größe die ge-cashed wird (durch die

TurbineUploadService class)TurbineUploadService class)

Page 11: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1111

– Pfad im System setzen, wo sich das repository Pfad im System setzen, wo sich das repository befindetbefindet

– Ein HTML File kreieren, dass als User-Interface Ein HTML File kreieren, dass als User-Interface dientdient

– Wenn FileItem kreiert wurde können die public-Wenn FileItem kreiert wurde können die public-methoden darauf zugreifen und mit ihm methoden darauf zugreifen und mit ihm arbeitenarbeiten

– Um temporär gespeicherte Daten muss man Um temporär gespeicherte Daten muss man sich nicht kümmern, da das Service einen sich nicht kümmern, da das Service einen eigenen „Garbage Collector“ hateigenen „Garbage Collector“ hat

Page 12: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1212

Users and SecurityUsers and Security

• Security ModelSecurity Model– UserUser– GroupGroup– RoleRole– PermissionPermission

• ab Turbine 2ab Turbine 2– org.apache.turbine.services.security org.apache.turbine.services.security

PackagePackage

Page 13: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1313

Velocity oder JSPVelocity oder JSP

• Designer hat die Wahl der Designer hat die Wahl der Präsentations-SprachePräsentations-Sprache– JSP (Java Server Pages)JSP (Java Server Pages)

•Etablierter Standard von Sun MicrosystemsEtablierter Standard von Sun Microsystems•Existierende Konfiguration anpassenExistierende Konfiguration anpassen

– VelocityVelocity•Einfacher zu arbeitenEinfacher zu arbeiten•Auf Turbine zugeschnittenAuf Turbine zugeschnitten•Zusätzliche Power von JSP wird hier nicht Zusätzliche Power von JSP wird hier nicht

vermisstvermisst

Page 14: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1414

SessionsSessions

• Problem: Zustandslosigkeit von HTTPProblem: Zustandslosigkeit von HTTP– Es gibt keine „Sessions“ Es gibt keine „Sessions“ jede Anfrage wird individuell jede Anfrage wird individuell

und unabhängig von anderen betrachtetund unabhängig von anderen betrachtet– Auch für „Nicht-DBMS-Anwendungen“ ein Problem Auch für „Nicht-DBMS-Anwendungen“ ein Problem

(Präsentieren der Ergebnisse einer Suche in Teilen)(Präsentieren der Ergebnisse einer Suche in Teilen)

• Verschiedene Varianten, Zustandsinfos in Verschiedene Varianten, Zustandsinfos in Abfragen „einzubauen“Abfragen „einzubauen“– Zustandsinformation in URL kodierenZustandsinformation in URL kodieren– CookiesCookies– Autorisation des BenutzersAutorisation des Benutzers– Versteckte Felder in FormularenVersteckte Felder in Formularen– Java Servlet Session Tracking APIJava Servlet Session Tracking API

Page 15: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1515

• Zustandsinformation in URL kodierenZustandsinformation in URL kodieren– Session ID wird im URL kodiert, z.B. durchSession ID wird im URL kodiert, z.B. durch

•Extra Pfad Info (die das Servlet versteht)Extra Pfad Info (die das Servlet versteht) http://server:80/servlet/MyServlet/123

•Zusätzlichen ParameterZusätzlichen Parameter http://server:81/servlet/MyServlet?

sessionid=123

•Eigene NotationEigene Notation http://server:82/servlet/MyServlet;

$sessionid$123

Page 16: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1616

• CookiesCookies– Sie werden am Client gespeichert (falls Sie werden am Client gespeichert (falls

der Benutzer das erlaubt)der Benutzer das erlaubt)– BeschränkungenBeschränkungen

•20 Cookies pro Site20 Cookies pro Site

•300 Cookies insgesamt pro User300 Cookies insgesamt pro User

•Größe je Cookie maximal 4096 bytesGröße je Cookie maximal 4096 bytes

Page 17: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1717

Session AttributeSession Attribute

• Damit können serverseitig Werte Damit können serverseitig Werte gespeichert werdengespeichert werden

• Sie sind nützlich um Dinge wie Login-Sie sind nützlich um Dinge wie Login-Infos oder Warenkörbe zu Infos oder Warenkörbe zu implementierenimplementieren

Page 18: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1818

Java Files und TemplatesJava Files und Templates

• Request Request Turbine Servlet Turbine Servlet• Request BrokeringRequest Brokering

• Build Context ObjectBuild Context Object

• Call Velocity Template EngineCall Velocity Template Engine

Page 19: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

1919

Java Files und Templates 2Java Files und Templates 2Eine Site mit Velocity bauenEine Site mit Velocity bauen

1.1. ScreenScreen1.1. Java Code in WEB-INF/classes compilierenJava Code in WEB-INF/classes compilieren2.2. .vm – Template mit selben Namen .vm – Template mit selben Namen

erzeugenerzeugenUnter templates/screens/… speichernUnter templates/screens/… speichernHier BODY-Teil der SeiteHier BODY-Teil der Seite

3.3. TurbineResources.properties editierenTurbineResources.properties editierenWEB-INF/confWEB-INF/confmodule.packages=org.apache.turbine.momodule.packages=org.apache.turbine.modules, com.yourcompany.app.modules dules, com.yourcompany.app.modules „classpath“ für Turbine„classpath“ für Turbine

Page 20: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2020

Java Files und Templates 3Java Files und Templates 3Eine Site mit Velocity bauenEine Site mit Velocity bauen

• AusführungAusführung

1.1. Request z.B. Request z.B. http://www.../HelloWorld.vmhttp://www.../HelloWorld.vm

2.2. HelloWorld class ausgeführt (Klasse HelloWorld class ausgeführt (Klasse muss von VelocityScreen erben)muss von VelocityScreen erben)

3.3. Velocity Template Engine aufgerufen Velocity Template Engine aufgerufen und und HelloWorld.vm ausgeführtHelloWorld.vm ausgeführt

Page 21: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2121

Java Files und Templates 4Java Files und Templates 4Eine Site mit Velocity bauenEine Site mit Velocity bauen

2.2. Layout und NavigationLayout und Navigation1.1. Java Klassen erben von VelocitySiteLayout Java Klassen erben von VelocitySiteLayout

und VelocitySiteNavigationund VelocitySiteNavigation2.2. .vm Files werden im templates/layout bzw. .vm Files werden im templates/layout bzw.

/navigation Verzeichnis gespeichert/navigation Verzeichnis gespeichert

Wichtig: Default.vm enthält das Gesamtlayout Wichtig: Default.vm enthält das Gesamtlayout indem Menüs, Navigation etc. als Variable indem Menüs, Navigation etc. als Variable in eine Struktur eingefügt werden in eine Struktur eingefügt werden

/templates/…/layouts/Default.vm/templates/…/layouts/Default.vm

Page 22: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2222

Wie Templates gefunden Wie Templates gefunden werdenwerden

• data.getParameters().getString("template"data.getParameters().getString("template") liefert Pfad zum Template) liefert Pfad zum Template

1.1. Screen, Navigation und Layout werden Screen, Navigation und Layout werden gesucht, beginnend im selben Verzeichnis gesucht, beginnend im selben Verzeichnis wie Templatewie Template

1.1. Selber NameSelber Name

2.2. DefaultDefault

Wenn die Template Variable nicht Wenn die Template Variable nicht existiert, wird VelocityScreen und existiert, wird VelocityScreen und templates/screens/index.vm ausgeführttemplates/screens/index.vm ausgeführt

Page 23: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2323

Templates und ActionsTemplates und Actions

• Action – Parameter im URIAction – Parameter im URIz.B. z.B. template/HelloWorld.vm/action/UpdateWortemplate/HelloWorld.vm/action/UpdateWorld ld UpdateWorld Java File ausgeführt UpdateWorld Java File ausgeführt

• Actions werden vor Screen ausgeführtActions werden vor Screen ausgeführt• Erst danach Screen Class und .vm Erst danach Screen Class und .vm

TemplateTemplate• Actions liefern nichts zurück, können aber Actions liefern nichts zurück, können aber

in den Message String des RunData in den Message String des RunData Objekts schreibenObjekts schreibenz.B. z.B. data.setMessage("Username does not exist") data.setMessage("Username does not exist")

Page 24: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2424

AusführungsreihenfolgeAusführungsreihenfolge

1.1. HTTP Client RequestHTTP Client Request2.2. Ausführen des Turbine ServletsAusführen des Turbine Servlets3.3. Ausführen Page Modul – Wenn Action Ausführen Page Modul – Wenn Action

ausführenausführen4.4. Screen Objekt nach Layout fragenScreen Objekt nach Layout fragen5.5. Layout ausführen - Layout führt Screen Layout ausführen - Layout führt Screen

(„Body“) aus(„Body“) aus6.6. Layout führt Navigation Modul ausLayout führt Navigation Modul aus7.7. Seite wird zurückgeliefertSeite wird zurückgeliefert

Page 25: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2525

Ausführungsreihenfolge - Ausführungsreihenfolge - LoaderLoader

• Loader – wozu?Loader – wozu?– Dynamisches Laden der fünf ModuleDynamisches Laden der fünf Module– Trennung von Code und Framework - VorteileTrennung von Code und Framework - Vorteile

• Update des FrameworksUpdate des Frameworks

• Distribution des Codes alleineDistribution des Codes alleine

– Web-App. Module bleiben in deren Package Web-App. Module bleiben in deren Package PfadPfad

• Loader ClasspathLoader ClasspathWEB-INF/conf WEB-INF/conf TurbineResource.properties TurbineResource.properties MODULE PACKAGES MODULE PACKAGES hier eigene Module hier eigene Module hinzufügenhinzufügen

Page 26: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2626

Ausführungsreihenfolge – Ausführungsreihenfolge – User LoginUser Login

• Konfiguration: Konfiguration: TurbineResources.properties TurbineResources.properties Framework SettingsFramework Settings

• Nachdem Session eingerichtet ist, Nachdem Session eingerichtet ist, werden Daten im RunData Objekt werden Daten im RunData Objekt gespeichert ($data)gespeichert ($data)

• Turbine Servlet führt LoginUser Action Turbine Servlet führt LoginUser Action ausaus

• Turbine Servlet führt DefaultPage ausTurbine Servlet führt DefaultPage aus

Page 27: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2727

Velocity Context – automatisch Velocity Context – automatisch erzeugte Objekteerzeugte Objekte• RunData ObjektRunData Objekt

– Keyword: data bzw. $dataKeyword: data bzw. $data– Interface zur LaufzeitinformationInterface zur Laufzeitinformation– Ein Objekt pro RequestEin Objekt pro Request

• TemplateLink ObjektTemplateLink Objekt– Keyword $linkKeyword $link– Konvertierung von Links in ReferenzenKonvertierung von Links in Referenzen

• TemplatePageAttributes ObjektTemplatePageAttributes Objekt– Keyword $pageKeyword $page– Änderung von HTML AttributenÄnderung von HTML Attributen

Page 28: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2828

Velocity Context – eigene Velocity Context – eigene Objekte hinzufügenObjekte hinzufügen

• importimport org.apache.velocity.context.Context;org.apache.velocity.context.Context;

• importimport org.apache.turbine.util.RunData; org.apache.turbine.util.RunData;• doBuildTemplate(RunData data, Context doBuildTemplate(RunData data, Context

context)context)• context.put("hello",new String("testing")); context.put("hello",new String("testing")); • Im Template: Im Template: $hello the hello reference $hello the hello reference • Output: Output: testing the hello reference testing the hello reference

Page 29: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

2929

Wichtige PfadeWichtige Pfade

• Default LayoutDefault Layout– webapps/APPNAME/templates/app/layouts/webapps/APPNAME/templates/app/layouts/

Default.vmDefault.vm– Definiert wie das default layout angezeigt Definiert wie das default layout angezeigt

wirdwird

• Files die in das layout template eingefügt Files die in das layout template eingefügt werdenwerden– webapps/APPNAME/templates/app/webapps/APPNAME/templates/app/

navigationsnavigations

Page 30: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

3030

Wichtige Pfade (2)Wichtige Pfade (2)

• Files in diesem Verzeichnis sind die die Files in diesem Verzeichnis sind die die "$screen_placeholder ersetzen"$screen_placeholder ersetzen– webapps/APPNAME/templates/app/screenswebapps/APPNAME/templates/app/screens

• Makros für HTML FragmenteMakros für HTML Fragmente– #webapps/APPNAME/templates/app/#webapps/APPNAME/templates/app/

GlobalMacros.vmGlobalMacros.vm

• Java file die sich auf Index.vm beziehenJava file die sich auf Index.vm beziehen– webapps/APPNAME/WEB-INF/src/java/webapps/APPNAME/WEB-INF/src/java/

PACKAGE/modules/screensPACKAGE/modules/screens

Page 31: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

3131

Wichtige Pfade (3)Wichtige Pfade (3)

• Java files für Action ModuleJava files für Action Module– webapps/APPNAME/WEB-INF/src/java/webapps/APPNAME/WEB-INF/src/java/

PACKAGE/modules/actionsPACKAGE/modules/actions

• Datenbank-SchemaDatenbank-Schema– webapps/APPNAME/WEB-INF/confwebapps/APPNAME/WEB-INF/conf

• Build file (z.B. nach Änderung des DB Build file (z.B. nach Änderung des DB Schemas ausführen)Schemas ausführen)– webapps/APPNAME/WEB-INF/buildwebapps/APPNAME/WEB-INF/build– "ant compile" kompiliert Java files neu"ant compile" kompiliert Java files neu

Page 32: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

3232

Wichtige Pfade (4)Wichtige Pfade (4)

• Java files die benutzt werden, um auf Java files die benutzt werden, um auf die Datenbank zuzugreifendie Datenbank zuzugreifen– webapps/APPNAME/WEB-INF/src/java/webapps/APPNAME/WEB-INF/src/java/

PACKAGE/omPACKAGE/om

• TurbineResource.property fileTurbineResource.property file– webapps/APPNAME/WEB-INF/confwebapps/APPNAME/WEB-INF/conf

Page 34: Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl.

3434

EndeEnde

Vielen Dank für Eure Aufmerksamkeit!Vielen Dank für Eure Aufmerksamkeit!