Flash auf der Serverseite mit Macromedia Generator 2
Artikel erschienen in Swiss IT Magazine 2001/42
Macromedias Flash-Technologie, hervorgegangen aus dem simplen Animationsprogramm Futuresplash Animator, hat sich in den vergangenen Jahren als Industriestandard für vektorbasierte Webgrafik etabliert. Während der Flash-Player bei fast allen PC-basierten Web-Clients zur Grundausstattung gehört (Macromedia spricht von einer Penetration von 97,4 Prozent), hat sich das eigentlich als offizieller Standard deklarierte SVG-Format bisher nicht durchgesetzt, und es sieht auch nicht danach aus, dass sich dies so rasch ändert.
Trotz aller Pracht haben Flash-basierte Web-Interfaces gegenüber Sites auf HTML-Basis diverse Nachteile, ganz zu schweigen von der anerkanntermassen steilen Lernkurve und dem hohen Aufwand zum Erstellen gestalterisch und funktional perfekter Flash-Auftritte:
In der typischen Flash-Site sind Design und Content nicht getrennt: Der gesamte Text ist fix im Flash-Movie eingebunden; für jede Änderung muss das ursprüngliche File mit dem Flash-Tool editiert werden - für Flash-Laien ein undenkbares Unterfangen.
Flash-Text wird von den Search Engines nicht berücksichtigt; die Extraktion des gesamten Textinhalts eines Movie mit dem Flash-Tool ist mühsam.
Zwar lassen sich mit ActionScript die meisten funktionalen Ideen umsetzen; Elemente wie datengetriebene Charts, Menüsysteme und andere interaktive Komponenten bringen jedoch erheblichen Programmieraufwand mit sich.
Der gesamte CPU-Aufwand für Business-Logik und dynamische Darstellung liegt bei ActionScript-gesteuerten Flash-Movies auf der Client-Seite. Ältere PC-Systeme, PDAs, Thin-Clients und künftige Mobiltelefone mit beschränkter Prozessor-Power geraten damit rasch an die Grenze ihrer Leistungsfähigkeit.
Generator bietet Lösungen für alle genannten Problemkreise an. Das Produkt bringt Flash jedoch nicht etwa zusätzliche Features; es hilft vielmehr dabei, die vorhandene Funktionalität der Flash-Technologie optimal zu nutzen.
Macromedia Generator kennt eine einzige Hauptaufgabe: Aus einer Vorlage (Template im SWT-Format), ergänzt durch aktuelle Daten aus einer Datenquelle (Data Source), wird ein Flash-Movie im SWF-Format generiert. Das SWT-Template erstellt der Flash-Designer wie ein gewöhnliches Movie im Flash-Tool - mit einem Unterschied: Statt die Inhalte direkt einzubinden, spezifiziert er Platzhalter, die Generator erst dann durch die aktuellen Daten aus der Datenquelle ersetzt, wenn das SWF-Movie generiert wird. Generator dient so als Brücke zwischen dem Flash-Front-End und den Datenquellen am Back-End.
Genauer betrachtet, besteht Generator aus zwei Komponenten: Die Authoring Extensions erweitern Flash um verschiedene Paletten, Objekte sowie Inspektoren und ermöglichen so dem Designer das Erstellen der Templates. Der Serverteil von Generator, Bestandteil von Generator Developer Edition und Generator Enterprise Edition, übernimmt Templates und Datenquellen als Input und erzeugt daraus das definitive Flash-Movie.
Dynamische Inhalte lassen sich auch ohne Generator mit einer direkten Datenbankanbindung via CGI oder XML in Flash-Movies einbinden. Der Hauptunterschied: Generator liefert nicht bloss während einer bestehenden Flash-Session die Daten vom Webserver zum Browser; er erzeugt ein komplettes Flash-Movie, das als Ganzes zum Browser übermittelt wird. Die in Generator enthaltenen Funktionen nehmen dem Designer viel Arbeit ab und entlasten die CPU des Zielsystems, da der Grossteil der Aufbereitung auf der Serverseite anfällt.
Generator lässt sich in zwei Modi nutzen, die sich hinsichtlich Zeitpunkt und Frequenz der SWF-Erzeugung unterscheiden. Im Offline-Modus wird Generator zu genau definierten Zeitpunkten angestossen. Die dazu benötigte Offline-Komponente nennt sich generate. Auf Windows-Systemen handelt es sich um eine DOS-Applikation mit Kommandozeilen-Interface; unter Unix lässt sich Generate aus einer Shell oder via Perl-Script aufrufen. Auf der Mac-Plattform ist Generate dagegen nicht verfügbar.
Das resultierende SWF-File liegt danach wie andere Flash-Movies oder HTML-Dokumente statisch auf dem Webserver, der es bei einem Browser-Request wie üblich übermittelt. Offline Generator bringt also für den Webserver keinerlei Mehrbelastung mit sich. Da die Einbindung der Datenquellen zum Zeitpunkt der Erzeugung des SWF erfolgt, entspricht die Aktualität der Inhalte dem selben Zeitpunkt.
Neben Flash-Movies kann Generator im Offline-Modus auch Grafikdateien in den Formaten GIF, PNG und JPG, QuickTime-Animationen, Flash-Projektoren für Windows und MacOS sowie Image Maps erstellen, die für Nicht-Flash-Versionen oder Varianten der Site für andere Zielgeräte eingesetzt werden können. Darüber hinaus erstellt Generate auf Wunsch einen kompletten Auszug aller im Movie enthaltenen Texte, der sich in den Meta-Tags oder auf eine gesonderte HTML-Seite plazieren lässt, um die Flash-Site suchfähig zu machen. Im Online-Modus erzeugt die Serverkomponente von Generator, die auf dem Webserver in Form eines Java-Servlet läuft, bei jedem Browser-Request ein neues SWF-File, das der Webserver einmalig und sofort an den Browser übermittelt. Die Daten werden dabei jedes Mal neu aus der Datenquelle bezogen, sind also stets topaktuell. Der Nachteil: Der Webserver wird bei jedem Aufruf einer Generator-basierten Site erneut belastet - das zu übermittelnde Flash-Movie existiert vor dem Aufruf nicht; Generator muss es immer neu erstellen. Der Online-Modus eignet sich für zeitkritische Webanwendungen wie Online-Banking, Börseninformationssysteme und Reservationsprogramme für Flug- und andere Tickets.
Die für den Betrieb benötigte Servlet-Engine JRun wird beim Installieren von Generator gleich mitinstalliert. Generator funktioniert aber auch mit anderen Engines, zum Beispiel mit derjenigen von iPlanet.
Die erste Generator-Version fiel nicht eben durch hohe Performance auf; in der Zwischenzeit hat Macromedia gelernt und bringt Generator-Version 2 in zwei Editionen heraus, die etwas verwirrlich benannt sind:
Die Developer Edition, erhältlich für rund zweitausend Franken, dient keineswegs nur dem Entwickler, sie enthält neben den Authoring Extensions auch eine einfache Version des Generator-Servlet, die auf dem Webserver installiert und für den produktiven Betrieb genutzt werden kann. Die Developer Edition ist somit für Sites, die nicht auf absolut aktuelle Informationen angewiesen sind. Dies trifft auf die Mehrzahl aller Anwendungen zu; fast jede Aufgabe, vom gelegentlichen Nachführen von Firmentexten bis zum viertelstündlichen Update von Wetterinformationen, lässt sich problemlos mit der Developer Edition erledigen. Die Update-Szenarien: Im erstgenannten Fall genügt sogar der Offline-Modus. Der für das Nachführen der Site zuständige Mitarbeiter startet die Generate-Anwendung und überträgt das generierte SWF per FTP auf den Webserver. Bei regelmässigen Updates wird die Serverkomponente von einem Scheduling-Prozess wie dem Windows Task Scheduler oder Cron im gewünschten Intervall angestossen. Die SWF-Files werden jeweils direkt im passenden Verzeichnis abgelegt. Die Einschränkungen der Developer Edition: Requests werden einer nach dem anderen abgearbeitet; die parallele Verarbeitung mehrerer Requests wird nicht unterstützt. Das Developer-Servlet profitiert auch nicht von Mehrprozessor-Servern. Ausserdem fehlen in der Developer Edition die Cache-Features der Enterprise Edition.
Die Enterprise Edition eignet sich laut Macromedia für die Präsentation "missionskritischer Realtime-Informationen für eine grosse Anzahl Benutzer". Sie ist dank Multiprocessing-Unterstützung skalierbar, enthält ein Administrations-Servlet zur Überwachung und Konfiguration der Serverkomponente und bietet als Haupt-Feature einen raffinierten Cache-Mechanismus, mit dem sich die Performance laut Macromedia um 30 bis 200 Prozent steigern lässt. Dieser erlaubt es, die aus einem Template erzeugten SWF-Files, aber auch einzelne Mediendateien und Fonts für mehrfachen Abruf zwischenzuspeichern, was Prozessoraktivität und Zeit einspart. Die Zeitdauer, während der das SWF im Cache verbleibt, lässt sich zusammen mit weiteren Settings über das Administrations-Servlet global oder für jede einzelne Datei festlegen oder beim Aufruf im URL-String spezifizieren.
Der Unterschied zwischen den beiden Editionen liegt einzig auf der Serverseite und betrifft somit ausschliesslich den Online-Modus. Die Einsatzvarianten Online oder Offline stehen bei beiden Editionen zur Verfügung; man verwechsle Online und Offline nicht mit Developer und Enterprise!
Diese Extensions ergänzen das Flash-Tool zu einer Entwicklungsumgebung für Generator-Templates und können ab Version 4 des Flash-Tools zum Einsatz kommen. Bei Version 5 sowie bei den Generator-Paketen sind sie im Lieferumfang enthalten. Sie lassen sich auch ab der Macromedia-Website nachrüsten. Das Generator-Entwicklungs-Interface setzt sich aus folgenden Elementen zusammen:
Das Generator Objects Panel präsentiert die verfügbaren Generator-Objekte. Man zieht sie als Platzhalter für den später durch Generator eingefügten dynamischen Inhalt per Drag&Drop aus dem Panel, worauf sie auf der Arbeitsfläche in Form hellgrauer, mit dem Objekttyp beschrifteter Rechtecke erscheinen. Die eigentlichen Inhalte werden erst beim Testen des Movie oder nach dem Aufruf von Generator angezeigt. Es gibt Generator-Objekte für verschiedene Arten von Diagrammen, zum Einfügen von Grafik-, Flash- und Sounddateien, von Textobjekten wie Listen und Tickern sowie für die Anzeige von Interface-Elementen wie Radio-Buttons, Tabellen und frei darstellbaren datengetriebenen Grafiken. Der Clou von Generator: Alle Parameter wie die Werte von Charts, der Inhalt von Textelementen oder die File-Namen von eingefügten Dateien müssen nicht schon im Template angegeben werden; sie werden vielmehr dynamisch aus den angebundenen Datenquellen bezogen. Die Datenquelle muss dazu für jeden Objekttyp unterschiedlich formatierte Informationen bereithalten, üblicherweise in Form von Textzeilen, die durch Komma getrennte Datenfelder enthalten.
Die Eigenschaften eines Objekts, das auf der Arbeitsfläche liegt, kontrolliert man mit dem Generator Panel. Neben der Datenquelle, die für jeden Objekttyp massgeblich ist, hat jede Art von Objekt ihren eigenen Satz von Eigenschaften. Bei einem Kuchendiagramm können beispielsweise Font und Plazierung der Segmentbeschriftung sowie Farbe und Dicke der Umrandung angegeben werden.
Der Generator Environment Button erscheint an der rechten oberen Ecke des Flash-Fensters direkt oberhalb der Timeline. Mit einem Klick zeigt er ein Fenster an, in dem sich der Timeline eine Datenquelle zuordnen lässt, aus der die Generator-Variablen bezogen werden. Jede Timeline und damit jeder Movie Clip hat seine eigene Datenquelle.
Kein Template ohne Anpassung der Publikationseinstellungen: In den Publish Settings muss unbedingt die SWT-Option aktiviert sein, damit überhaupt ein Generator-Template gesichert wird. Auf der Karteikarte Generator im Publish-Dialog können zusätzliche Einstellungen vorgenommen werden, die für das Generator-Template gelten. Besonders wichtig: Das Template übernimmt die Angaben, die hier für Frame Rate und Load Order gemacht werden und ignoriert die Definitionen im Modify-Movie-Dialog beziehungsweise auf der Flash-Karteikarte.
Neben den Objekten spielen die Variablen die zweite Hauptrolle in der Generator-Welt. Eine Generator-Variable wird mit ihrem Namen notiert, eingebettet in geschweifte Klammern:
{variablenname}
Der Variablenname kann aus beliebigen alphanumerischen Zeichen bestehen, Leerschläge sind nicht gestattet. Generator unterscheidet bei Variablennamen nicht zwischen Gross- und Kleinschreibung; {variablenName} und {VARIABLENname} bezeichnen dieselbe Variable.
Im Gegensatz zu den ActionScript-Variablen, deren Inhalte man per ActionScript definiert und manipuliert, beziehen Generator-Variablen ihre Werte aus der Datenquelle, die der jeweiligen Timeline zugeordnet ist. Generator-Variablen können innerhalb des Flash-Tools praktisch überall dort eingesetzt werden, wo sonst Text einzutippen wäre:
Textblöcke auf der Arbeitsfläche: erlauben dynamischen Text ohne Aufruf eines CGI-Scripts - man fügt schlicht und einfach den Variablennamen in den Textblock ein. Achtung: Im Gegensatz zu dynamischem Text, der mit ActionScript-Variablen über die Eigenschaft "Dynamic Text" in der Textpalette erzeugt wird, passt Generator die Grösse des Textblocks nicht automatisch der eingefügten Textmenge an. Der Block muss von Anfang an genug gross bemessen werden.
Parameter, Funktionsargumente und Instanznamen von Flash-Symbolen in ActionScript: Mit Generator-Variablen statt fixen Eingaben werden ActionScripts unglaublich flexibel - Scripts passen sich datengesteuert an.
Eigenschaften von Generator-Objekten: Auch diese lassen sich dynamisch ändern. Im Generator Panel gibt man dazu einfach eine Generator-Variable an. Achtung: Hier ist nicht etwa die Datenquelle des Objekts selbst zuständig, sondern die der Timeline zugeordnete Quelle, aus der ja alle Variablen abgeleitet werden.
Frame Labels: Selbst die Beschriftungen von Keyframes und anderen wichtigen Positionen des Movie können mit Generator-Variablen gezielt gesetzt werden; so lässt sich der Ablauf innerhalb eines Movie datengesteuert verändern.
Mindestens so essentiell wie Objekte und Variablen sind die Datenquellen - ohne dynamisch hinzugefügte Daten macht der Generator-Einsatz ja gar keinen Sinn. Bei der Annahme von Dateninput ist Generator glücklicherweise nicht wählerisch. Als Datenquelle eignet sich zuallernächst simpler Text, der in Form einer Textdatei auf dem Web- oder auf einem FTP-Server liegen kann. Textdaten lassen sich beim Aufruf des Generator-Template auch der URL mitgeben; in solchen Fällen wurde der Text oft durch Middleware wie PHP, CGI-Scripts, Cold Fusion, ASP oder JSP aufbereitet. Generator versteht sich via ODBC oder JDBC auch bestens mit Datenbanken und kann eine Java-Klasse als Quelle nutzen.
Datenquellen treten im Generator-Template an zwei Stellen in Erscheinung: Mit dem Environment Button wird pro Timeline eine Quelle für die Variablen festgelegt; jedes Objekt erhält überdies eine eigene Quelle, die man im Generator Panel definiert. Die Pfade zu den textbasierten Datenquellen gibt man in der von HTML-Seiten gewohnten Manier an: Relative Angaben (thefile.txt, .data/thefile.txt, ../thefile.txt) beziehen sich auf das Verzeichnis, in dem sich das SWT-Template befindet - am einfachsten hält man Template und Datenquelle im gleichen Verzeichnis. Möglich sind auch absolute Pfadangaben (c:\data\thefile.txt) sowie Verweise per URL: http://www.thesite.com/data/thefile.txt. Datenbankaufrufe erfolgen über einen längeren Connection String, der mit fgjdbc:/// beginnt - auch ODBC-Calls erledigt das Java-Servlet Generator, unter Benutzung einer JDBC-ODBC-Bridge, natürlicherweise stets via JDBC.
Zum Testen von Generator-Templates wird eine weitere Art von Datenquelle offeriert: Native Datenquellen werden direkt im Template erfasst, damit nicht zuvor extra eine separate Datenquelle erstellt werden muss. Möglich ist dies im Environment-Variables-Fenster (für die Timeline-Datenquelle) und beim Data-Source-Parameter gewisser Generator-Objekte, der im Generator Panel angegeben wird.
Generator unterscheidet bei Textdaten zwischen zwei Formaten, die beide sowohl in nativen Datenquellen als auch innerhalb von Textdateien ihre Gültigkeit haben. Das Name-Value-Format dient dazu, ein oder mehrere Paare von Variablennamen und zugehörigen Werten in die Generator-Umgebung zu bringen:
|
Die erste Zeile ist zwingender Bestandteil jeder Name-Value-formatierten Datenquelle und muss genau wie gezeigt formatiert sein. Sie teilt Generator mit, dass eine Sequenz von Name-Value-Paaren folgt. Das Beispiel erzeugt die drei Variablen {tageszeit}, {mahlzeit} und {zustand} mit den angegebenen Werten. Im Spaltenformat nimmt Generator Zeilen entgegen, die aus mehreren durch Komma getrennten Werten bestehen, analog der Zeilen einer Datenbanktabelle:
|
Hier bezeichnet die erste Reihe die Feldnamen. Die Parameter von Generator-Objekten werden üblicherweise mit einer spaltenformatierten Datenquelle festgelegt; in diesem Fall müssen die Feldnamen den Objektparametern entsprechen. Die Felder sind durch Komma getrennt und im Idealfall mit Anführungszeichen eingegrenzt - so lässt sich auch Text, der selbst Kommata enthält, problemlos einlesen. Sonderzeichen wie Anführungszeichen, Backslashes, geschweifte Klammern und Zeilenumbrüche gibt man mit Escape-Sequenzen wie \n an.