Entwicklung einer Web-Service-gestützten Beispielanwendung in
Transcription
Entwicklung einer Web-Service-gestützten Beispielanwendung in
Entwicklung einer Web-Service-gestützten Beispielanwendung in Adobe Flex 4 Seminararbeit im Wintersemester 2011/12 von Damien Löchner Matrikelnummer: 835856 Betreuer: Prof. Dr. rer. nat. Bodo Kraft Dipl.-Inform. Dennis Pannhausen 1 Entwicklung einer Web-Service-gestützten Beispielanwendung in Adobe Flex 4 Gliederung 1 Motivation 3 2 Grundlagen 4 2.1 Flex 4 2.1.1 Flash 5 2.1.2 MXML 5 2.1.3 ActionScript 6 2.2 Web-Service 8 2.2.1 Web-Service 8 2.2.2 Verknüpfung zwischen Web-Service und Flex 11 3 „Flexplosion“ 15 3.1 Spielfeld 15 3.2 Menu 16 3.3 Singleplayer 16 3.4 Multiplayer 16 3.5 Speicherung der Spielergebnisse 17 3.6 Statistik 17 4 Fazit 18 5 Ausblick (Bachelorarbeit) 19 6 Abbildungsverzeichnis 20 7 Literaturverzeichnis 20 2 1. Motivation In einer Seminararbeit ist es üblich, die Materialen und Methoden für die darauffolgende Bachelorarbeit unter die Lupe zu nehmen. Diese Arbeit beschäftigt sich daher mit zwei Bereichen, die für die geplante Bachelorarbeit eine Rolle spielen: Der Programmierung eines grafischen UserInterface (GUI) und der Kommunikation zwischen Client und Server über einen Web-Service. Konkret wird die Programmierung von Flash mittels des Flex-Frameworks genauer untersucht. Wir betrachten dabei sowohl Flex als ein mächtiges Werkzeug zur GUI-Entwicklung, als auch dessen Kommunikation mit einem Web-Service genauer. Dazu stellen wir das allgemeine Konzept eines Web-Services vor und besprechen dessen Vor- und Nachteile. Da ein Spiel die Kombination mehrerer Techniken erfordet und gleichzeitig die Stärken dieser Techniken gut illustriert, haben wir uns dafür entschieden, eine Art „Bomberman“ als Beispielanwendung zu programmieren. Diesen Flex-Client verbinden wir über das SOAP-Protokoll mit einem auf einem Glassfish Application Server gehosteten Web-Service, um auf eine Serverseitige Datenbank zuzugreifen und die Ergebnisse des Spiels zu speichern. Im Folgenden befassen wir uns zunächst mit dem Flex-Framework, setzen dann unsere Untersuchungen im Bereich von Web-Services fort, um dann schließlich anhand von CodeBeispielen auf die Verknüpfung der beiden Hauptthemen einzugehen. 3 2. Grundlagen 2.1 Adobe Flex Adobe Flex ist ein Open-Source-Framework für die Entwicklung von Rich Internet Applications (RIAs)[1]. Unter einem Framework kann man einen Rahmen verstehen, der den Entwickler bei der Erstellung einer Anwendung unterstützt. Er definiert insbesondere den Kontrollfluss der Anwendung und die Schnittstellen der konkreten Klassen, welche vom Programmierer erstellt werden müssen. Die Flex-Applikationen, die erstellt werden, sind Rich Clients. Sie werden umgangssprachlich aber auch gerne als RIAs bezeichnet. Unter RIA versteht man eine intuitive Benutzeroberfläche für das Internet. Rich Clients im Allgemeinen sind ein Kompromiss aus Fatund Thin-Clients. Dieser Mittelweg zeichnet sich dadurch aus, dass der Client hierbei nicht nur als einfache Rendering-Maschine eingesetzt wird, wie es beim Thin Client ist, sondern in der Lage ist, selbstständig zu agieren und größere Datenmengen weiterzuverarbeiten. Der Server muss demnach nicht mittels Mausklicks delegiert werden. Dem Computer, auf welchem der Client läuft, wird dabei eine Laufzeitumgebung zur Verfügung gestellt, innerhalb welcher die Applikation ausgeführt wird. Flex gilt als ein sehr ausdrucksstarkes Framework. Es wird genutzt, um ansprechende Applikationen für das Web, für den Desktop, sowie für mobile Endgeräte zu entwerfen, die - im Allgemeinen - auf allen Plattformen, wie Windows, MacOS, Android und vielen mehr, gleich aussehen. Man spricht daher von Plattformunabhängigkeit. Für die Entwicklung von Flex-Anwendungen ist das kostenlose Flex Software Development Kit (SDK) von Nöten. Dessen Kernkomponente ist ein Compiler, der das Übersetzen von ActionScript und MXML in eine .swf-Datei übernimmt (Illustration 1). Funktionen eines SDK wie das SyntaxHighlighting, statische Code-Checks, schrittweises Debuggen, Speicher- und Leistungs-Profiling und ein Layout-Editor werden dem FlexEntwickler unter Windows als Flash-Builder angeboten. Linux-User müssen bei der Entwicklung von Flex auf andere Werkzeuge setzen. Prinzipiell kann der Source-Code zwar auch in einem Text-Editor geschrieben werden, die elegantere Version ist aber natürlich die Nutzung einer Entwicklungsumgebung wie zum Beispiel IntelliJ IDEA [2], da auch hier das Syntax-Highlighting, sowie statische CodeIllustration 1: Umwandlung der .mxml/.as Checks und schrittweises Debuggen möglich ist Dateien in das ausfühbare .swf Format und zusätzlich das Kompilieren von ActionScript und MXML erleichtert wird. 4 2.1.1 Adobe Flash Flash ist eine Software, beziehungsweise eine Technologie, um dynamische Inhalte zu erzeugen. Ihr Erfolg lässt sich auf drei Grundpfeiler zurückführen: Einfache Bedienbarkeit, umfangreiches Leistungsspektrum und breite Unterstützung. Diese Eigenschaften verhalfen Flash dazu, das bevorzugte Werkzeug von Webdesignern weltweit zu werden. Flash setzt sich zusammen aus einer Laufzeitumgebung, einer Markup-Sprache (MXML) und einer leistungsstarken Programmiersprache (ActionScript), auf welche im weiteren Verlauf noch eingegangen wird (siehe Kapitel 2.1.3). Um Shockwave-Flash-Dateien (SWF) zu erstellen, benötigt man einen Compiler, der die beiden Programmiersprachen in eine komprimierte und binäre Form übersetzt (Bytecode). Die durch die Kompilierung entstandenen SWF-Dateien stellen nun die fertige, interpretierbare Software dar. Dieses sogenannte Flash-Movie lässt sich über ein Browser-Plugin - den Flash Player - wie ein Film, Bild für Bild, in einem vorgegebenen Tempo abspielen. Der Nutzer kann durch Mouse-Events oder Keyboard-Eingaben aktiv in den Film eingreifen und den Verlauf selbst bestimmen. Im Gegensatz zu herkömmlicher HTML-Programmierung bietet Flash dem Entwickler weit größere Freiheiten in Bezug auf Gestaltung und Funktionalität der Anwendung. 2.1.2 Was ist MXML? MXML ist eine XML-Sprache (eXtensible Markup Language), mit der das Layout der Benutzeroberflächenkomponenten für Adobe Flex-Anwendungen deklarativ gestaltet werden kann. Eine XML-Sprache erzeugt einen strukturierten Datentyp, welcher in der IT-Landschaft als wichtiger Standard gilt. Das Lesen und Bearbeiten solcher Dokumente ist sehr einfach, da XMLDokumente in einer textuellen Form vorliegen und daher vom Menschen lesbar sind. Zudem ermöglicht die Nutzung von Knoten eine simple Darstellung komplexer Strukturen. Diese Dokumente werden vor allem für den Austausch von Daten zwischen Plattformen, Applikationen und Organisationen eingesetzt. Das Kürzel „MXML” ist nicht genauer definiert. Viele denken es stehe für „Macromedia XML”, andere denken es sei eine Abkürzung für “Maximum eXperience”. Jedoch sind beide Erklärungen nicht bestätigt. [3] In MXML ist es möglich, deklarativ nicht-visuelle Aspekte einer Anwendung, wie beispielsweise das Aufrufen Server-seitiger Datenquellen und Data Binding zwischen Benutzeroberflächenkomponenten und Datenquellen, zu nutzen (siehe Illustration 2). MXML-Tags entsprechen ActionScript-Klassen, und MXML-Properties entsprechen Eigenschaften von Klassen. Wenn der Programmierer eine Flex-Anwendung kompiliert, analysiert Flex die 5 MXML-Tags und generiert die entsprechenden ActionScript-Klassen. Insbesondere wendet sich die deklarative Art, Layouts zu definieren, an Designer, die wenig Programmierkentnisse besitzen und an Webdesigner, die schon auf ähnliche Weise HTML Layouts gestaltet haben. Illustration 2: MXML-Beispiel-Code 2.1.3 ActionScript ActionScript ist eine objektorientierte Skriptsprache, mit welcher die Möglichkeit besteht in FlashFilme einzugreifen. ActionScript verhält sich zu MXML wie JavaScript zu HTML: Der ActionScript-Code kann die durch MXML definierten Elemente manipulieren, während JavaScript die im HTML deklarierten Elemente des Domain Object Model (DOM) verändern kann. Es bestehen noch weitere Verwandtschaften zwischen ActionScript und JavaScript. Ihre Syntax ähnelt sich sehr, da sie in beiden Fällen auf die ECMA (European Computer Manufacturers Association) [4] zurückzuführen ist. Diese Gemeinsamkeit entstammt der Bemühung, JavaScriptDialekte von Netscape und Microsoft nicht weiter auseinander driften zu lassen. Somit gilt ActionScript unter Webdesignern, welche bereits Erfahrung mit JavaScript-Programmierung gesammelt haben, als sehr einfach zu erlernen. Wie Illustration 3 zeigt, erhält man durch das Kompilieren von ActionScript-Klassen SWF-Bytecode. Dieses Format kann dann vom Flash Player interpretiert und in einem Browser angezeigt werden. Illustration 3: Entwicklung vom einfachen Quellcode zum abgespielten Programm 6 Eigenschaften von ActionScript Für einen Entwickler ist jedoch vor allen Dingen entscheidend, welche Anwendungsmöglichkeiten ActionScript ihm bietet und wofür diese genutzt werden können. • Steuerung von Filmsequenzen Filmsequenzen können mittels ActionScript zum Beispiel angehalten, beziehungsweise weiter abgespielt oder auch übersprungen werden. • Manipulation visueller Elemente Filmsequenz-Symbole können per ActionScript manipuliert werden. Es besteht beispielsweise die Möglichkeit, grafische Elemente zu drehen, zu verschieben oder zu skalieren. • Interaktivität Eingaben via Keyboard auszulesen oder auf Mouse-Events zu reagieren stellt für ActionScript kein Problem dar. Durch solche Eingriffe in den Film lässt sich dieser in seinem Verlauf beeinflussen. • Kommunikation mit der Außenwelt Trotz der Einschränkung, dass ActionScript nur in Flash-Filmen ausführbar ist, kann es mit der Außenwelt kommunizieren. Beispielsweise können Webseiten oder Dateien geladen werden. Es können aber auch Daten mit JavaScript oder Active Server Pages (ASP.NET) ausgetauscht werden. Zudem können XML-Dateien verarbeitet werden. • Viele nützliche Elemente ActionScript liefert eine ganze Reihe an Methoden und Klassen. Diese sind sehr nützlich, da man sich Standard-Klassen wie die Date-Klasse oder eine Color-Klasse nicht neu definieren muss. Um zum Beispiel eine Kommunikation zwischen dem Flex-Framework und einem WebService zu starten, benötigt ActionScript ein Objekt vom Typ „WebService“. var webService:WebService = new WebService(); 7 Durch diese technischen Optionen ergibt sich eine Vielzahl an Entwicklungsmöglichkeiten. Im hier vorgestellten Fall wurde die Entwicklung eines Flash-Spiels gewählt. Die Strukturen lassen sich aber ebenso gut auf Chat-Räume, Monitoring-Clients oder ähnliche Anwendungsmöglichkeiten übertragen. 2.2 Web-Service 2.2.1 Web-Service Ein Web-Service ist ein Dienst, welcher von einem Server bereitgestellt wird und Clientunabhängig Rechenoperationen, Datenbankabfragen oder ähnliches durchführen kann. Der Client sendet dem Server ein XML-Dokument zu, welches einem Protokoll entsprechend verpackt ist und welches die vom Web-Service benötigten Angaben enthält. Üblicherweise wird via Simple Object Access Protocol (SOAP), wie es auch in unserem Projekt genutzt wird, oder Representational State Transfer (REST) übertragen. • SOAP SOAP ist der Basisstandard für die Kommunikation im Internet und das beliebteste Modell zur Erstellung von Web-Services. SOAP in seiner heutigen Ausprägung ist ein spezieller XML-Dialekt, der über das HTTP Nachrichten zwischen den einzelnen kommunizierenden Parteien überträgt. Allerdings bietet die SOAP-Spezifikation deutlich mehr Möglichkeiten, die in diesem Projekt jedoch nicht zur Geltung beziehungsweise zur Anwendung kommen, wie zum Beispiel der Einsatz auf verteilten Systemen, welcher auch durch Firewalls hindurch funktioniert. Man kann den Web-Service als programmierbaren URI (Uniform Resource Identifier) interpretieren, das heißt, der Web-Service schreibt ein Adressierungsschema vor, über das er angesprochen werden muss. Dieses Adressierungsschema wird vom Web-Service als WSDL-Dokument (Web Service Description Language) veröffentlicht (siehe Illustration 4). In diesem WSDL-Dokument wird beschrieben, was der Client über den Web-Service wissen muss, um korrekt formatierte XML-Nachrichten mit ihm auszutauschen. Die Beschreibung und Struktur des WSDL-Dokuments bestimmt dabei - durch eine XMLSchema-Definition (XSD) - eine XML-Grammatik, anhand derer die Nachichten erzeugt werden. Um SOAP als Kommunikationsprotokoll und HTTP als Transportprotokoll sehr einfach zu halten, unterstützen sie in ihrer Basisform keinerlei Sicherheitsanforderungen. Dadurch werden sämtliche Daten im Klartext übermittelt. Dies stellt bei sensiblen Informationen ein großes Defizit dar. Allerdings kann zum Beispiel durch eine SSL-Verschlüsselung über HTTPS die Sicherheit der Daten gewährleistet werden. 8 Illustration 4: Bereitstellung der WSDL und Austausch von Informationen über SOAP • REST REST versucht, den Prozess des Distributed-Computing zu vereinfachen. Bei diesem Kommunikationsmodell wird eine kleine Menge von Befehlen (zum Beispiel GET oder POST) auf eine potentiell unbegrenzte Menge von Adressaten angewandt. Beispielsweise benutzt man bei jeder Eingabe einer URL in den Browser den HTTP GET-Befehl, um die Inhalte der gewünschten URL abzurufen. Das ist der Grundgedanke, der hinter REST steht, die zurückgelieferten Daten können in XML, sowie in HTTP oder JSON sein. Durch die Nutzung bestehender Internetstandards, wie zum Beispiel XML oder HTTP, kann der Web-Service plattformunabhängig genutzt werden. Man spricht in so einem Fall von „loser Kopplung“. Das heißt, dass die Implementierung des Web-Services unabhängig von der Implementierung des Clients ist, während die Schnittstelle zwischen Client und Web-Service unverändert bleibt und somit auch nach Implementierung des Web-Services oder des Clients weiterhin eine funktionierende Kommunikation garantiert. Es können sogar längst veraltete Systeme, sogenannte Legacy-Systeme, weiterhin genutzt werden, da man hierbei den Web-Service wie einen Adapter nutzen kann, welcher die Informationen in ein neues Format übersetzt. Im Gegensatz dazu kann RMI (Remote Method Invocation) nur auf einen speziellen Aufruf zurückgreifen. RMI ist nämlich eine spezifische Methode der Programmiersprache Java zum Aufruf von Methoden oder Klassen, die auf einem Server hinterlegt wurden. Das Laden einer solchen Methode kann jedoch nur über Java stattfinden, es kann also nicht so flexibel wie ein Web-Service genutzt werden. Zusätzlich gelten die genannten Standards als sogenannte offene Standards. Dies ermöglicht dem Web-Service-Betreiber, Lizenzkosten zu vermeiden. Dadurch wird die Nutzung eines Web-Services noch attraktiver. 9 Die Übertragung und das Packen der XML-Dateien ist leider nicht besonders effizient. Zum einen wirkt sich der hohe Verwaltungsaufwand, um Daten in XML zu parsen, negativ auf die Performance der Übertragung aus. Zum anderen lässt die dadurch entstehende, aufwändige XML-Struktur die Größe der zu übertragenden Daten erheblich ansteigen. Eine Programmiersprache, welche einen Web-Service aufrufen möchte, benötigt Bibliotheken, die es ermöglichen, über ein vorgegebenes Protokoll Kontakt zum Web-Service aufzubauen. Sind keine Bibliotheken vorhanden, so ist man gezwungen die Programmiersprache zu wechseln. Im Falle eines in Java programmierten Web-Services benötigt dieser, wie Illustration 5 zeigt, eine JAXB-Schnittstelle (Java Architecture for XML Binding). Durch die Interaktion zwischen der WebService Anwendung und dem XML-Dokument ist es nun möglich auf Basis der übermittelten Daten, eine Menge von Ausgabedaten zu berechnen. Illustration 5: Übersetzung der XML-Dokumente via JAXB zu Java-Objekten Man kann sich beispielsweise eine Anwendung vorstellen, der ein Wort überliefert wird zu welchem schließlich eine Beschreibung ausgegeben werden soll. Ein im Internet frei verfügbarer WebService könnte auf Basis einer Datenbank überprüfen, ob das Wort bereits eingetragen ist und die dazugehörige Beschreibung wiederum, mithilfe des vereinbarte Protokolls, an den Client zurücksenden. Diese Datenbankanfrage erfolgt in unserem Projekt über JPA (Java Persistence API), welches ein Standardtool für das objektrelationale Mapping (ORM) von Java-Objekten zu Datenbanktupeln ist. Mit Hilfe von ORM ist man in der Lage, Objekte in einer relationalen Datenbank zu speichern (siehe Illustration 6). Dabei werden Klassen und Objekte auf Tabellen und Zeilen abgebildet. 10 Illustration 6: Kommunikation Flex - Web-Service - Datenbank 2.2.2 Wie kommuniziert Flex mit dem Web-Service? Im Fall unserer Beispielanwendung wurde ein GlassFish Application Server als Open-SourceServer von Oracle [5] genutzt. Es besteht sowohl die Möglichkeit einen Web-Service zu implementieren und diesen schließlich zu nutzen, als auch eine Datenbank aufzusetzen. Die Derby Datenbank wird vom GlassFish mitgeliefert und wird in unserem Projekt genutzt. Beides soll in dem implementierten Spiel genutzt werden. Das Flex Framework ist in der Lage, mit Web-Services zu interagieren, indem diese ihre Schnittstellen in einem WSDL-Dokument definieren. Letzteres steht über eine publizierte URL zur Verfügung. In ActionScript sieht die Einbindung des Web-Services wie folgt aus (alternativ bietet Flex 4 die Möglichkeit, den Web-Service über MXML einzubinden): var webService:WebService = new WebService(); webService.endpointURI="http://localhost:8080/FlexplosionWebService/FlexplosionWebService"; webService.wsdl = webService.endpointURI + "?wsdl"; webService.addEventListener( LoadEvent.LOAD, onLoad); if ( webService.canLoadWSDL() ) { webService.loadWSDL(); } else { Alert.show( "Can't load WSDL" ); } 11 Nun ist eine Verbindung zum Web-Service hergestellt. Hierbei steht „http://localhost:8080” für den Aufruf des Servers, wo hingegen „FlexplosionWebService/FlexplosionWebService” für den Pfad zum Web-Service verantwortlich ist. Diese Verbindung kann nun genutzt werden, um dem WebService Aufgaben zu übermitteln. Im folgenden Beispiel wird eine im Web-Service implementierte Methode namens „nicknameExist” aufgerufen. Diese überprüft, ob ein Nickname (hier „Alice“) in einer Datenbank eingetragen ist und liefert anschließend das dementsprechende Ergebnis. var getAllPlayerOperation:Operation = webService.getOperation("nicknameExist") as Operation; getAllPlayerOperation.resultFormat = "e4x"; var token:AsyncToken = getAllPlayerOperation.send(“Alice”); token.addResponder(new AsyncResponder(handleResponse, handleResponse)); Dieses Resultat, welches asynchron vom Web-Service geliefert wird, kann nun in der Methode “handleResponse” weiter verarbeitet werden. Unter asynchroner Kommunikation versteht man in der Informatik, dass Daten in einem nicht festgelegten Taktschema übertragen werden. Der Client muss dadurch nicht auf eine Antwort des Web-Service warten und kann seine Ressourcen freigeben. Blockieren verschiedener Methoden und ein „Einfrieren“ des GUI können dadurch verhindert werden. Gehen wir nun etwas genauer auf den Web-Service ein. Der Web-Server kann die XML-Dokumente, welche ihn via SOAP erreichen, nicht ohne weiteres interpretieren. Er benötigt daher eine Programmschnittstelle, wie zum Beispiel JAXB. Dabei ist darauf zu achten, dass die Anfrage an die implementierte Methode korrekt ausgeführt wird, da der Server sonst einen Fehler wirft. Nun ist es möglich, in Java-Klassen einzelne Methoden individuell zu definieren. Es müssen jedoch auch hier vorab ein paar grundlegende Informationen bereitgestellt werden: @Stateless @WebService(name = "FlexplosionWebService", serviceName = "FlexplosionWebService") public class FlexplosionWebService { … } 12 Die Annotation „@Stateless” steht für Zustandslosigkeit und bedeutet, dass jede Anfrage grundsätzlich als unabhänige Transaktion behandelt wird. Im Folgenden wird der Web-Service, beziehungsweise dessen URL, beschrieben: Da auf einem Server mehrere Web-Services gleichzeitig laufen können, sollten diese unterschiedlich definiert werden. Dass es sich bei dieser Klasse um einen Web-Service handelt, wird mit dem Aufruf von “@WebService” festgelegt. Der hierbei eingegebene „name” und „serviceName” sind Teil der URL, die zum Beispiel von Flex aufgerufen werden. Sollte der „serviceName” ausgelassen werden, wird dieser standardmäßig auf den Klassennamen gesetzt und die Zeichenkette „Service” angehängt. Der Name („name“) ist verpflichtend zu setzen. Nun kann also ein Aufruf des Web-Services erfolgen; er muss jedoch noch implementiert werden: @WebMethod(operationName = "nicknameExist") @WebResult(name = "nickname") public boolean nicknameExist(@WebParam(name = "nickName") String nickName) { … } Methoden können über ihren „operationName”, in diesem Fall „nicknameExist”, angesprochen werden. Ihnen können Argumente übergeben werden, wie es in Java üblich ist. In diesem Beispiel ist es ein String-Parameter namens „nickName”. Dieser wird durch das Argument, das sich im Knoten „nickName” in der XML-Datei des SOAP-Requests befindet, gesetzt. Der Knoten ist definiert durch „@WebParam(name=„nickName”)”. Dieser Vorgang wird als Unmarshalling bezeichnet. Den umgekehrten Fall (Marshalling) beschreibt das „@WebResult”. Hierbei wird angegeben, wie der XML-Knoten benannt wird, der als Resultat der Operation zurückgegeben wird. Da unser Projekt nicht nur einen Web-Service, sondern auch eine Datenbank nutzt und diese über den Web-Service angesprochen werden soll, benötigt man zusätzlich eine JPA-Query. Hierzu wird im Vorfeld ein Manager erzeugt, mit dessen Hilfe schließlich auf Einträge der Datenbank zugegriffen werden kann. @PersistenceContext EntityManager manager; Das Objekt wurde in diesem Fall „Player” genannt und enthält alle nötigen Informationen über den Spieler. Eine Klasse wird in Java mit „@Entity” zu einer Entität der Datenbank definiert. Die Syntax benötigt hierbei Methoden um korrekt aus der Datenbank lesen zu können. Daher bedarf es einer genauen Definition durch „@NamedQueries“. 13 @Entity @NamedQueries( { @NamedQuery(name = "Player.findAll", query = "select p from Player p"), @NamedQuery(name = "Player.findNickname", query = "select p.nickname from Player p")}) public class Player { … } Hat man all diese Punkte berücksichtigt, so muss zuerst die Datenbank, dann der Glassfish und schließlich die kompilierte swf-Datei gestartet werden um das Spiel in all seinen Vorzügen nutzen zu können. 14 3. „Flexplosion“ „Flexplosion“ ist eine Kombination aus Bomberman [6] und PacMan [7]. Ziel des Spiels ist es, alle Gegner auf dem Spielfeld zerstören. Hierfür besitzt der Spieler Bomben, die einen definierten Explosionsradius besitzen. Mit diesen kann er Wände und Gegner sprengen. Wird eine Wand zerstört, erscheint mit einer gewissen Wahrscheinlichkeit an dieser Stelle ein Item. Diese Items können entweder Symbole einer Bombe oder eines Feuers sein. Sammelt man eine Bombe ein, so kann man zusätzlich zu den bereits gelegten Bomben eine weitere Bombe zur gleichen Zeit platzieren. Läuft man über ein „Feuerfeld“ so erhöht sich der Explosionsradius der Bombe um ein Feld. 3.1 Spielfeld Das Spielfeld ist ein 15x15 großes Feld (siehe Illustration 7) in dem es dem Spieler möglich ist, sich anhand von Keyboard-Eingaben fort zu bewegen. Die benötigten Tasten werden im Spiel angegeben. Die grauen Außenwände sind fester Bestandteil des Spielbretts. Sie können selbst mit Hilfe der Bomben nicht zerstört werden. Die Ziegelsteinwände hingegen sind durch die Explosion einer Bombe zerstörbar und werden zu Beginn jedes Spiels per Zufall auf dem Spielfeld verteilt. Hierbei wird darauf geachtet, dass der Spieler genug Platz hat, um eine Bombe zu legen ohne sich selbst töten zu müssen. Illustration 7: Spielfeld im Singleplayer 15 3.2 Menu Möchte man das Spiel nun starten, öffnet man die dazugehörige .swf-Datei. Es öffnet sich sodann ein Menu (Illustration 8), in welchem man sich entscheiden muss, wie weiter vorgegangen werden soll. Möchte man den SingleplayerSpielmodus öffnen, so klickt man auf den „Singleplayer“-Button und es öffnet sich ein Fenster, in welches ein individueller Name eingegeben werden muss. Entscheidet man sich für den Multiplayer, so sind genau zwei Spieler notwendig. Es gibt aber auch die Option, sich die Statistik anzeigen zu lassen. Genauere Informationen zu den einzelnen Teilbereichen folgen nun. Illustration 8: Startmenu 3.3 Singleplayer Der Singleplayer-Modus beinhaltet einen Spieler und, je nach Level des Spielers, einen oder mehrere Geister. Zu Beginn der Spielrunde besitzt der Spieler eine Bombe mit einem Explosionsradius von einem Feld. Die Geister bewegen sich mit einer vorgegebenen Wahrscheinlichkeit in verschiedene Richtungen. Im Gegensatz zum Spieler können Geister durch zerstörbare Wände hindurchgehen. Berührt der Geist einen Spieler, so hat dieser verloren. Schafft es der Spieler, alle Geister mittels Bomben zu töten, so gewinnt der Spieler das Spiel. Tötet sich der Spieler selbst, hat er das Spiel verloren. Der Singleplayer-Modus besitzt die zusätzliche Möglichkeit, Spielstände zu speichern. Diese können dann als Statistik mit anderen Spielständen verglichen werden. Zu den gespeicherten Daten gehören die Anzahl an Siegen, die Anzahl an Niederlagen, die Anzahl an gelegten Bomben, sowie die Anzahl an zerstörten Wänden. Um die einzelnen Spielstände voneinander unterscheiden zu können, ist es nicht möglich Spielernamen doppelt zu vergeben. Aus diesem Grund wird am Anfang bei der Eingabe eines schon bestehenden Nicknames um eine erneute Eingabe gebeten. 3.4 Multiplayer Der Multiplayer-Modus kann nur zu zweit gespielt werden. Beide Gegner beginnen in den gegenüberliegenden Ecken des Spielfelds. Es gibt in diesem Schema keine Geister. Zu Beginn hat jeder Spieler eine Bombe mit dem Explosionsradius eines Feldes. Das Spiel ist beendet, sobald ein Spieler den anderen oder sich selbst getötet hat. 16 3.5 Speicherung der Spielergebnisse Das Spiel verfügt über die Fähigkeit, Daten zu speichern. Sollte man ein besonders gutes Spielergebnis erreicht haben, oder will man in der High-Score Liste auftauchen, so kann man während des Spiels speichern. Da die High-Score Liste Server-seitig gespeichert werden soll, müssen die Daten mittels WebService gesichert werden. 3.6 Statistik In der Statistik (siehe Illustration 9) werden dem Betrachter alle Spielergebnisse angezeigt, die bisher von Spielern erreicht und abgespeichert wurden. Durch Tastendruck auf die einzelnen Statistiküberschriften ist es möglich, die Statistik nach den gewünschten Kategorien zu sortieren. Illustration 9: Statistik-Tabelle 17 4.Fazit Mit der vorliegenden Seminararbeit wollen wir zeigen, dass ein Web-Service ein sehr nützliches Hilfsmittel ist und durch seine Plattformunabhängigkeit sehr flexibel von verschiedenen Systemen genutzt werden kann. Zusätzlich ist der Web-Service durch den Umgang mit bereits bekannten Werkzeugen, wie zum Beispiel XML, sehr benutzerfreundlich. Leider bringt genau dieser Vorteil auch Nachteile mit sich: Durch das ständige Parsen von XML-Dateien leidet die Performance der Datenübertragung und durch die gute Lesbarkeit wächst das Datenvolumen. Hinzu kommt, dass SOAP ohne weitere Vorkehrungen keine sichere Datenübertragung gewährleistet und dadurch leicht angreifbar ist. Nichtsdestotrotz sind Web-Services heutzutage, aufgrund der oben erwähnten Vorteile, weit verbreitet. Daher bieten die gängigsten Programmiersprachen, wie zum Beispiel Java, aber auch Flex, Bibliotheken an, mit denen man Daten in ein geeignetes Format umwandeln kann. Die so formatierten Daten können anschließend an den Web-Service gesendet werden. Dies wird in unserem Projekt genutzt, um mit Hilfe eines Web-Services die Speicherstände des in Flex geschriebenen Spiels „Flexplosion“ in eine Datenbank zu speichern und sie auf Anforderung auch aufzurufen. Abschließend lässt sich sagen, dass Adobe Flex ein geeignetes Framework darstellt, um komplexe und ansprechende Rich Internet Applications zu entwickeln, welche dann mit Web-Services interagieren können. Dies ist einer der Gründe, die Web-Services zu einem mächtigen Werkzeug für Programmierer machen: Sie ermöglichen eine lose gekoppelte Client-Server-Architektur und verbinden unterschiedliche Systeme miteinander. 18 5. Ausblick (Bachelorarbeit) Diese Seminarabeit ist eine gute Möglichkeit gewesen, sich mit Arbeitsmaterialien, die für die Bachelorarbeit benötigt werden, auseinanderzusetzen und den Umgang mit diesen zu erlernen. Leider hat sich Adobe im Laufe unserer Recherchen dafür entschieden, die Arbeit am Flex-SDK in die Hände der „Apache Software Foundation“ zu übergeben [8] [9]. Das bedeutet, dass Flex in Zukunft nicht mehr ausschließlich von Adobe weiterentwickelt wird, was einige Unsicherheiten mit sich bringt. Daher wird die anstehende Bachelorarbeit nicht mit Flex erstellt werden. Genau hier kommt uns jedoch die lose Kopplung zu gute, die der Web-Service bietet. Unabhängig von der Server-seitigen Implementierung des Web-Services sind wir frei in der Wahl der ClientTechnologie. Anstelle von Flex soll in der Bachelorarbeit HTML5 verwendet werden. HTML5 ist zu einer ernstzunehmenden Alternative zu Flash geworden (so sieht es übrigens auch Adobe [8]). Mittels der mächtigen Programmiersprache JavaScript und der deklarativen Sprache CSS3 ist eine schnelle Entwicklung dynamischer Inhalte möglich. Ohne dass ein weiteres Plugin installiert werden müsste, unterstützt HTML5 Video, Audio sowie 2D- und 3D-Grafiken. Dadurch wird der Entwickler bei einem Wechsel von Flex zu HTML5 nicht eingeschränkt, muss jedoch lernen, mit einem neuen Werkzeug umzugehen. Während der Programmierung unserer Beispielanwendung wurde kaum mit Zahlen oder ähnlichen Werten gerechnet. Dies wird jedoch bei der Entwicklung der Bachelorarbeit nötig sein. Weder bei ActionScript noch bei JavaScript existiert ein Datentyp, der mit „long“ in Java nur bedingt vergleichbar wäre. Dies führt leider dazu, dass sehr große Integer-Zahlen gerundet werden oder man gezwungen ist, sie in einem String zu speichern. Dadurch verliert die Zeichenkette jedoch ihre besondere Eigenschaft als Zahl. Probleme wie dieses werden in der Bachelorarbeit ausführlich behandelt werden. 19 6. Abbildungsverzeichnis Illustration Titel des Bildes Seite 1 Umwandlung der .mxml/.as Dateien in das ausführbare .swf Format 4 2 MXML-Beispiel-Code 6 3 Entwicklung vom einfachen Quellcode zum abgespielten Programm 6 4 Bereitstellung der WSDL und Austausch von Informationen über SOAP 9 5 Übersetzung der XML-Dokumente via JAXB zu Java-Objekten 10 6 Kommunikation Flex - Web-Service - Datenbank 11 7 Spielfeld im Singleplayer 15 8 Startmenu 16 9 Statistik-Tabelle 17 7. Literaturverzeichnis Rich Internet applications, http://www.adobe.com/resources/business/rich_internet_apps/, 1 zuletzt besucht am 14.12.2011 2 IntelliJIDEA, http://www.jetbrains.com/idea/, zuletzt besucht am 12.12.2011 3 Mary Treseler: Learning Flex 4, O'Reilly, 2011, S.1ff 4 ECMA Homepage, http://www.ecma-international.org/, zuletzt besucht am 12.12.2011 5 Oracle GlassFish Server, http://www.oracle.com/us/products/middleware/applicationserver/oracle-glassfish-server/index.html, zuletzt besucht am 12.12.2011 6 Bomberman, http://de.wikipedia.org/wiki/Bomberman, zuletzt besucht am 12.12.2011 7 Pac-Man, http://de.wikipedia.org/wiki/Pac-Man, zuletzt besucht am 12.12.2011 8 Your Questions About Flex, http://blogs.adobe.com/flex/2011/11/your-questions-aboutflex.html, zuletzt besucht am 12.12.2011 20 9 Zur Zukunft von Flex, http://www.flexforum.de/showthread.php?t=8046, zuletzt besucht am 12.12.2011 10 Florian Müller: Professionelle Rich-Client-Lösungen mit Flex und Java, ADDISONWESLEY, 2009, S.20, 21, 22, 24, 25, 28, 35, 86, 317ff, 325 11 Alex Ferrara & Matthew MacDonald: Programmierung von .NET WebServices, O'Reilly, 2003, S.2ff, 8, 13ff, 19f, 73 12 Eben Hewitt: Java SOA Cookbook, O'Reilly, 2009, S.254, S.303ff, S.388f 13 Bill Burke & Richard Monson-Haefel: Enterprise JavaBeans 3.0, O'Reilly, 2006, S. 476 14 Christian Weyer: XML Web Service – Anwendungen mit Microsoft .NET, ADDISONWESLEY, 2002. S.159ff, 166ff, 177f 15 Matthias Kannengiesser: ActionScript, Franzis', 2002, S.19 16 Dirk Louis & Svend Nissen: Flash MX und ActionScript Webdesign und dynamisches Programmieren, Markt+Technik, 2002, S.37f, 338ff 17 Larry Ullmann: Effortless Flex 4 Development, New Riders, 2010, S.XIII ff, 3ff 18 Webservice, http://www.itwissen.info/definition/lexikon/Webservice-WS-web-services.html, zuletzt besucht am 12.12.2011 19 JPA (Java persistence API), http://www.itwissen.info/definition/lexikon/JPA-Java-persistenceAPI.html, zuletzt besucht am 12.12.2011 20 Adobe Flex, http://www.itwissen.info/definition/lexikon/Adobe-Flex.html, zuletzt besucht am 12.12.2011 21 ActionScript, http://www.itwissen.info/definition/lexikon/ActionScript.html, zuletzt besucht am 12.12.2011 21 22 SOAP (simple object access protocol), http://www.itwissen.info/definition/lexikon/simpleobject-access-protocol-SOAP-SOAP-Protokoll.html, zuletzt besucht am 12.12.2011 23 REST (representational state transfer), http://www.itwissen.info/definition/lexikon/representational-state-transfer-REST.html, zuletzt besucht am 12.12.2011 24 XML (extensible markup language), http://www.itwissen.info/definition/lexikon/extendedmarkup-language-XML.html, zuletzt besucht am 12.12.2011 25 Webservice, http://de.wikipedia.org/wiki/Webservice, zuletzt besucht am 12.12.2011 26 Asynchrone Kommunikation, http://de.wikipedia.org/wiki/Asynchrone_Kommunikation, zuletzt besucht am 12.12.2011 27 HTML5, http://de.wikipedia.org/wiki/HTML5, zuletzt besucht am 14.12.2011 22 23