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

Documents pareils