PP_JoniWartomo-2010

Transcription

PP_JoniWartomo-2010
Praxisprojektarbeit im Bachelorstudiengang Medieninformatik
Sommersemester 2009
Datentransfer zwischen Flex und
Drupal – Vergleich, Auswahl
und Implementierung
am Beispiel eines sozialen Netzwerks
Joni Wartomo
11051991
Erstprüfer: Prof. Christian Noss
Zweitprüfer: Prof. Dr. Horst Stenzel
Inhaltsverzeichnis
1. Einleitung...........................................................................................................................3
1.1 Problemstellung...........................................................................................................3
1.2 Ziel der Arbeit..............................................................................................................3
2. Theoretische Grundlagen..................................................................................................5
2.1 Daten...........................................................................................................................5
2.1.1 Datenquellen........................................................................................................5
2.2 Visualisierung...............................................................................................................5
2.3 Soziales Netzwerk.......................................................................................................6
3. Technische Umsetzung......................................................................................................8
3.1 Adobe Flex...................................................................................................................8
3.1.1 Warum Flex..........................................................................................................8
3.2 Drupal..........................................................................................................................9
3.2.2 Warum Drupal.......................................................................................................9
3.2.3 Die Drupal Systemarchitektur...............................................................................9
3.3 Der Datenaustausch zwischen Drupal und Flex.......................................................10
3.4 MAMP, LAMP, WAMP und XAMPP............................................................................11
4. Problemfeld und Kontext..................................................................................................12
4.1 Datenzugriff in Flex....................................................................................................12
4.1.1 HTTPService......................................................................................................12
4.1.2 WebService mit SOAP.......................................................................................12
4.1.3 RemoteObject mit AMF .....................................................................................12
4.1.4 Zusammenfassung.............................................................................................12
4.1.5 Fazit....................................................................................................................13
4.2 AMF Backend - Evaluation........................................................................................14
4.2.1 LiveCycle Data Services....................................................................................16
4.2.2 BlazeDS..............................................................................................................16
4.2.3 WebORB.............................................................................................................17
4.2.4 RED 5.................................................................................................................17
4.2.5 AMFPHP.............................................................................................................17
4.2.6 Fazit....................................................................................................................18
5. Drupal einrichten..............................................................................................................19
6. Flex RemoteObject mit AMFPHP....................................................................................20
6.1 AMFPHP und das Service-Modul einrichten.............................................................20
6.2 Flex einrichten...........................................................................................................21
6.3 Test Programm..........................................................................................................23
6.3.1 Die Oberfläche....................................................................................................23
6.3.3 Funktionen..........................................................................................................26
6.3.2 RemoteObject.....................................................................................................27
7. Fazit und Ausblick............................................................................................................28
7.1 Fazit...........................................................................................................................28
7.2 Ausblick......................................................................................................................28
Tabellenverzeichnis..............................................................................................................29
Abbildungsverzeichnis.........................................................................................................30
Glossar.................................................................................................................................31
Quellen.................................................................................................................................32
Quellcode.............................................................................................................................33
1. Einleitung
1.1 Problemstellung
Die Problemstellung dieser Arbeit ist die reibungslose und schnelle Datenübertragung
zwischen Drupal1 und Flex2.
Durch die enorme Datenmenge, die in einem sozialen Netzwerk anfallen können, kann es
zu großen Zeitverzögerungen beim Datentransfer kommen.
Da eine Visualisierung im Client ohne große Ladezeiten erfolgen soll3, ist dies nicht
wünschenswert.
In diesem Praxisprojekt beschäftige ich mich auch zum Teil mit sozialen Netzwerken. In
meiner Arbeit spielen soziale Netzwerke jedoch nur die Rolle einer Beispiel-Datenquelle,
welche ich ausgesucht habe.
Drupal kann auf Datenbestände die in einer externen Datenbank liegen zugreifen. Die
Daten müssen zentral auf einem Server gespeichert werden, da somit einzelne
Datensätze von Benutzern eines sozialen Netzwerkes schnell und effizient verglichen,
zusammengefasst und visualisiert werden können. Eine Visualisierung dieser Daten ist
sinnvoll, da der Benutzer schnelle relevante Informationen oder auch neue überraschende
Zusammenhänge erfassen und finden kann. Ein Beispiel wäre, die Visualisierung seiner
Freunde und „Freundes-Freunde“4 in einer Art „Soziogramm“5, worüber leicht
Bekanntschaften schneller gefunden werden könnten.
1.2 Ziel der Arbeit
Das Ziel der Arbeit ist es, eine schnelle Datenübertragung zwischen Flex und Drupal zu
finden. Der Datenzugriff soll in kürzer Zeit, trotzt riesiger Datenmenge erfolgreich sein.
In dieser Arbeit werden verschiedene vorhandene Datenübertragungsmöglichkeiten
zwischen dem Back- und dem Frontend der Webanwendung auf seine jeweiligen Vor- und
Nachteile untersucht und miteinander verglichen. Im Anschluss an diese Vergleiche wird
ein Testprogramm erstellt, mit dem ein gelungenes Beispiel für das Zusammenspiel
zwischen den gewählten Software-Produkten gezeigt wird.
Vorgehensweise
Zunächst werde ich die vorhandenen und relevanten Software-Technologien erfassen und
auf ihre Stärken und Schwächen untersuchen. Mit verschiedenen Kriterien werde ich diese
dann bewerten, auswählen und mich am Ende für die beste Kombination entscheiden.
1 Siehe Kapitel 3.1
2 Siehe Kapitel 3.2
3 Siehe ISO-Norm 9241-110 - Benutzerschnittstellen von Webseiten – im speziellen Erwartungskonformität
und Steuerbarkeit.
4 http://www.lokalisten.de Wortschöpfung der Lokalisten-Community – die Freunde meines Freundes.
5 http://www.cmu.edu/joss/content/articles/volume1/images/fig12.gif
Ein Soziogramm ist die graphische Darstellung der Beziehungen in einer Gruppe, etwa in einer Schulklasse
oder in einem Unternehmen.[http://de.wikipedia.org/wiki/Soziogramm]
3
Die verschiedenen Kriterien sind unter anderem:
• Geschwindigkeit*
• Kosten
• Kompatibilität
* Es wird die gesamte Übertragungs- und Verarbeitungsdauer betrachtet. Hierbei steigt
das zu übertragende Datenvolumen und somit auch die Gesamtdauer der Verarbeitung
exponentiell mit der Anzahl an darzustellenden Benutzern an.
4
2. Theoretische Grundlagen
Um einen besseren Überblick zu verschaffen werden hier einige Begriffe und Definitionen
erläutert. Ziel dieses Kapitels ist eine gemeinsame Wissensbasis für dieses Projekt.
Die Angaben stammen aus mehreren Quellen und sind teilweise gekürzt.
2.1 Daten
Plural: Daten; Singular: Datenelement, Angabe oder Wert
allgemeine Definition: „aus Messungen, Beobachtungen u.ä. gewonnene Angaben,
Informationen“
Informatik: “zur Darstellung von Informationen dienende Zeichenfolgen (Digitale D.) oder
kontinuierliche. Funktionen (analoge D.),die auf Datenverarbeitungsanlagen gespeichert,
verarbeitet und/oder erzeugt werden können“
[Meyers Lexikon 1996]
Von der Definition her sind Daten also die maschinenlesbaren Repräsentationen von
Informationen.
2.1.1 Datenquellen
Daten können prinzipiell aus drei verschiedenen Quellen stammen [Schumann/Müller
2000]:
Reale Welt:
Daten werden durch Messgeräte erfasst oder durch
Beobachtungen gewonnen.
Theoretische Welt: Daten werden auf Grundlage mathematischer Modelle
berechnet.
Künstliche Welt:
Daten werden entworfen.
·
Die rasante Zunahme der Datenmenge führt zu Unübersichtlichkeit.
2.2 Visualisierung
Die Visualisierung sollte den Inhalt der Daten nicht verändern. Sie dient nur dazu, den
Inhalt bildhaft darzustellen.
„Ziel des Visualisierungsprozesses ist es, abstrakte Daten, die in der Regel nicht
geometrischer Natur sind, in Form von Bildern zu veranschaulichen.“[Schumann/Müller
2000].
Abbildung 1: Stufen der Visualisierungspipeline nach [Schumann/Müller 2000]
5
Der Visualisierungsprozess besteht aus drei Schritten:
Datenaufbereitung zur Vorverarbeitung
Filtering:
Mapping:
Erzeugung eines Geometriemodells
Rendering:
Bildgenerierung
Mit Hilfe von Visualisierung können viele komplexe Daten besser veranschaulicht und
verstanden werden.
2.3 Soziales Netzwerk
„Soziale Netzwerke lassen sich als Graphen repräsentieren.“ [Pfeffer 2008]
Ein Netzwerk als Graph betrachtet, besteht aus einer Anzahl von Knoten mit beliebig
vielen Kanten (Verbindungen) untereinander. Ein Knoten entspricht dabei einem
vollständigen Objekt . Jedes Objekt muss eindeutig identifiziert werden können und kann
jeweils Felder mit Werten und Verbindungen zu anderen Objekten besitzen. Diese
Verbindungen können näher charakterisiert werden.
Ein Netzwerk wird zu einem sozialen Netzwerk, wenn es Knoten gibt, die für die
Menschen und Verbindungen gibt, die für Beziehungen der Leute untereinander stehen.
„We define social network sites as web-based services that allow individuals to
(1) construct a public or semi-public profile within a bounded system,
(2) articulate a list of other users with whom they share a connection, and
(3) view and traverse their list of connections and those made by others within the system.
The nature and nomenclature of these connections may vary from site to site.“
[Boyd/Ellison 2007]
In elektronischen sozialen Netzwerken gibt es nun u.a. Benutzer-Profile, BenutzerGruppen und verschiedene charakterisierte Beziehungen. Ein Benutzer-Profil beschreibt
dabei den Objekt-Knoten für eine Person.
Verschiedene Internet-Plattformen, die zu Anfang in ihrer Funktionalität auf einen
bestimmten Bereich beschränkt waren, wie Weblogging, Forum, Fotodienst, Webshop
usw., wurden nach und nach zu sozialen Netzwerken erweitert.
6
Abbildung 2: Zeitleiste der bekanntesten sozialen
Netzwerke [Boyd/Ellison 2007]
Wie in Abbildung 2 ersichtlich, wurden die Ende der 90er Jahre ursprünglich als Foren
gegründeten Websites AsianAvenue und BlackPlanet 2005 als vollwertige soziale
Netzwerke neu gestaltet.
7
3. Technische Umsetzung
In diesem Kapitel wird die für diese Praxisarbeit verwendete Software kurz erläutert.
Die Programmierung der Visualisierung erfolgt unter Adobe Flex 3 mit Hilfe der
Visualisierungsbibiliothek Flare.
Um beim Zugang zu den Datensätzen keiner Beschränkung durch Zugriffsrechte
unterworfen zu sein, wird ein neues eigenes soziales Netzwerk mit Drupal entworfen.
Die Entwickler von Adobe Flex und Drupal unterstützen sich gegenseitig, Die Website6 von
Adobe Flex ist selbst mit Drupal gebaut und zeigt, dass beide leicht zu integrieren sind.
Die Entwicklung des Prototypen und die Benutzung der Software sollte kostenlos und
Open Source sein. Drupal, Flex und Flare haben diese Voraussetzung erfüllt.
3.1 Adobe Flex
Adobe Flex7 ist ein Framework, um eine RIA (Rich Internet Application) in Flash zu
entwickeln.
Für die Programmierung in Flex werden die Sprachen MXML und ActionScript 3
verwendet. Beide Sprachen können gemeinsam benutzen werden. Beim Kompilieren wird
der MXML-Code in ActionScript 3 umgewandelt. Um schnell und effektiv ein Programm zu
entwickeln, wird das Layout in MXML beschreiben, der Rest in ActionScript 3 erledigt.
Zur Entwicklung von Flex-Anwendungen wird das Flex SDK benötigt.
3.1.1 Warum Flex
Abbildung 3: Verbreitung von Plattformen auf Internet-fähigen
Rechnern [Cole/Thomas 2008]
Flex ist Open Source und hat das gleiche Format wie Adobe Flash. Für den Entwickler ist
das ein großer Vorteil, weil auf den meisten Rechnern der Flash-Player bereits installiert
ist (siehe Abbildung 3) und daher keine zusätzliche Installation nötig ist.
6 http://flex.org/showcase
7 http://www.adobe.com/de/products/flex/overview/
8
Mit Hilfe von AIR (Adobe Integrated Runtime) kann eine Flex Anwendung auch direkt wie
eine Desktop-Anwendung benutzen werden.
Alles was mit anderen Sprachen entwickeln werden kann, kann Flex auch.
Ein besonderer Pluspunkt ist, dass Flex verschiedene Arten von Datenverbindungen wie
HTTPService, WebService und RemoteObject unterstützt.
3.2 Drupal
Drupal ist ein PHP-basiertes Content Management System (CMS), mit dem Websites,
Internet-Portale, Communities und vieles mehr gebaut werden kann. Wie einige andere
CMS benutzt auch Drupal Module. Der Vorteil daran ist, dass jeder mitentwickeln kann.
Die Mitglieder der starken Drupal-Community helfen sich gegenseitig beim Thema
Sicherheit und anderen Problemen.
Es gibt zwei unabhängige Versionen von Drupal: Version 5 und Version 6.
Für die Entwicklung des Prototypen benutze ich Version 6, weil hier die Entwicklung der
Module intensiver als bei Version 5 ist.
Drupal besteht aus einzelnen Modulen, wie die zu Anfang bei der Installation
mitgelieferten Core-Modulen, und vielen Zusatz-Modulen, die je nach Gebrauch
hinzugefügt werden können, um die Funktionalitäten von Drupal zu erweitern.
3.2.2 Warum Drupal
Um ein soziales Netzwerk zu bauen, sind folgende Funktionalitäten nötig:
Benutzer-Registrierung und -Verwaltung
Kategorisieren und Tagging
Kommentare
Diese Funktionalitäten sind in Drupal durch entsprechende Module leicht zu integrieren.
Besonders wichtig für die Kommunikation zwischen PHP und Flash ist AMFPHP.
Auch dafür steht in Drupal ein passendes Modul zur Verfügung.
3.2.3 Die Drupal Systemarchitektur
Abbildung 4: Die Systemarchitektur von Drupal [van Dyk 2008]
9
Drupal ist in PHP geschrieben. Das Ziel von Drupal ist, die am weitesten verbreitete
Technologie zu verwenden. Dadurch lässt sich Drupal auf jedem System erfolgreich
betreiben.
Beim Webserver gibt es verschiedene Möglichkeiten, obwohl die meisten Anwender
Apache bevorzugen. In der Grundkonfiguration bietet Drupal entweder MySQL oder
PostgreSQL als Datenbank an, aber es werden auch andere Datenbanken wie Microsoft
SQL Server oder Oracle unterstützt.
3.3 Der Datenaustausch zwischen Drupal und Flex
Abbildung 5: Grundprinzipien des Datenaustausches zwischen Drupal und
Flex
Die obere Abbildung erklärt unsere Systemarchitektur. Auf der Client-Seite erfolgt der
Datenaufruf mit einem Flash-fähigen Webbrowser.
10
3.4 MAMP8, LAMP, WAMP und XAMPP
Damit der Prototyp auf dem eigenen Computer entwickeln werden kann, wird einiges an
Software benötigt.
Die in der letzten Überschrift genannten Abkürzungen sind zusammengestellte OpenSource-Pakete (für verschiedene Computer-Systeme).
Jedes Paket enthält folgende Software:
 Apache als Webserver
 MySql als Datenbanksystem
 PHP als Skriptsprache
 und andere Software, je nachdem welches Paket gewählt wird.
Ziel eines solchen Pakets ist eine einfache und schnelle Installation einer
Laufzeitumgebung für Web-Anwendungen. Um die Terminologie zu vereinfachen, werde
ich dafür im weiteren Verlauf nur noch den Begriff „LAMP“ verwenden.
8 http://www.mamp.info
11
4. Problemfeld und Kontext
Die Beziehungen zwischen Benutzern werden visualisiert.Der Datentransfer ist ein
wichtiges Thema, weil die Verbindungen untereinander exponentiell anwachsen und dabei
riesige Datenmengen entstehen können.
Da der Prototyp client-seitig in Flex entwickelt wird, werde ich die in Flex möglichen
Datenübertragungsarten näher betrachten.
4.1 Datenzugriff in Flex
Flex bietet drei verschiedene Dienste, um auf externe Daten zuzugreifen:
• HTTPService mit HTTP GET/POST
• WebService mit SOAP
• RemoteObject mit AMF
4.1.1 HTTPService
Der HTTPService, der auch als REST-style Webservice bekannt ist, benutzt GET/POSTAnfragen, um mit dem Server über HTTP zu kommunizieren.
Die Daten zwischen Server und Client werden dabei als reiner Text transportiert. Bei
riesigen Datenmengen ist das ein großer Nachteil. Einfache Daten können als URLkodierte Variablen übertragen werden. Für komplexere Daten ist die Verwendung von
JSON oder XML möglich.
4.1.2 WebService mit SOAP
Wie andere Anwendungen bietet auch Flex eine Datenkommunikation über Webservices
an. Die Daten werden zwischen den Systemen mit Hilfe von SOAP als Protokoll
ausgetauscht.
Wie bei allen SOAP-Webservices ist die geringe Geschwindigkeit beim Datenaustausch
ein sehr großer Nachteil, im Vergleich zu anderen Techniken.
4.1.3 RemoteObject mit AMF
AMF (Action Message Format) ist ein kompaktes binäres Format um ActionScript-Objekte
zu serialisieren. Dieses codiert die auszutauschenden Informationen binär, die gesendete
Nachricht wird dadurch wesentlich kleiner und kann schneller übertragen werden. Es ist
kein Transferprotokoll an sich. Die Daten werden über HTTP oder RTMP gesendet. Mit
passendem Backend kann eine „Echtzeit-Datenkommunikation“ simuliert werden.
AMF ist für verschiedene Platformen wie Java, Ruby, PHP, Python, ColdFusion und .NET
verfügbar.
4.1.4 Zusammenfassung
Um die Geschwindigkeiten verschiedener Datenformate zu vergleichen, hat James Ward
ein schönes Programm9 geschrieben.
Er hat nicht nur verschiedene Datenzugriffsarten in Flex veglichen, sondern hat auch Ajax
und Dojo mit eingebunden. Alle Tests werden mit 5000 Datenzeilen gesendet. Bei Dojo
jedoch nur mit 500 Datenzeilen. Anhand der Graphik wird deutlich, dass AMF sehr schnell
9 http://www.jamesward.com/census /
12
ist (zweiter Balken von unten).
Abbildung 6: Übertragungsgeschwindigkeit verschiedener Dateizugriffsarten [Ward 2008]
4.1.5 Fazit
Bewertet werden die drei ausgewählten Dienste:
HttpService (REST), WebService SOAP und RemoteObject AMF.
Eine volle Bewertung hat 3 Pluspunkte.
HttpService
WebService
SOAP
RemoteObject
AMF
++
+
+++
Serverseitige
Unterstützung
+++
+++
+
Client-Belastung
++
+
+++
Data format
+
+
+++
Ergebnis
8
6
10
Geschwindigkeit
Hinweis: Je mehr Pluspunkte desto besser.
13
Für den Datenzugriff des Prototypen habe ich mich für das RemoteObject mit AMF
entschieden. Im Vergleich zu XML/SOAP ist diese Datenverbindung viel schneller, da im
Binärformat AMF die Objekte viel kompakter übertragen werden können. AMF ist dabei
rund 10x schneller als XML oder SOAP.
4.2 AMF Backend - Evaluation
Wie oben erklärt, handelt es sich bei AMF um binäre Daten. Damit der Server die Daten
weiter verarbeiten kann, wird ein Backend benötigt auch als AMF-Gateway bekannt.
Es gibt mittlerweile mehrere Backends für verschiedene Sprachen.
Um die Auswahl zu vereinfachen werden hier bestimmte Kriterien betrachtet.
Einführungskosten
Betriebskosten
Strategische Kriterien
Personalkosten
Personalkosten
Stabilität
Beratungskosten
Wartung
Sicherheit
Lizenzkosten
Hardwarekosten
Herstellerunabhängigkeit
Schulungskosten
Lfd. Schulungskosten
Benutzerfreundlichkeit
Migrationskosten
Updatekosten
Interoperabilität
Installationskosten
Anpassbarkeit an individuelle
Zwecke
Einarbeitungsaufwand
Vorhandenes Know-how
Tabelle 1: Kriterienraster zur Bewertung von Softwareprodukten10
Aus diesem Kriterienraster werden einige relevante Kriterien ausgewählt und in eigene
Kriterien angepasst.
Kosten, Herstellerunabhängigkeit
Open Source
Vorhandenes Know-how
Comunity Support
Sicherheit und Stabilität
Update
Einarbeitungsaufwand und
Anpassbarkeit an individuelle Zwecke
Module Support
LAMP Support
Data Push Support
Open Source
Als Open Source wird also Software bezeichnet, deren Quellcode für jedermann
zugänglich ist. Dieser enthält alle Informationen und Funktionen einer Software in
Programmiersprache und ermöglicht die Veränderung und Weiterentwicklung des
jeweiligen Programms. [media.nrw.de 2006]
10 Leipelt, Detlef: Grundgedanken zu Wirtschaftlichkeitsbetrachtungen für den Einsatz von Open Source
Software. [http://www.kbst.bund.de/Anlage305827/Grundgedanken-zu-Wirtschaftlichkeitsbetrachtungen-fuerden-Einsatz-von-OSS-pdf-13-8-kB.pdf]
14
Mit Open Source Software wird eine Reihe von nutzenbringenden Vorteile, jedoch auch
Nachteile für Entwickler und Anwender verbunden. In Tabelle 2 sind die Vor- und Nachteile
von Open Source Software zusammengefasst gegenübergestellt.
Vorteile
Nachteile
Höhere Produktqualität
Höherer Schulungsaufwand
Sicherheit und Zuverlässigkeit
Oft kein Support durch den Entwickler
Offene Standards
Mangelhafte Interoperabilität
Anpassbarkeit
Schulungsaufwand
Wiederverwendbarkeit
Weiterentwicklung
Anbieterunabhängigkeit
Keine Gewährleistungsansprüche
Keine Lizenzkosten
Tabelle 2: Vorteile und Nachteile von Open Source [Renner et al. 2006]
Ein wichtiger Vorteil von Open Source ist die Unabhängigkeit vom Anbieter, Somit fallen
auch Lizenzkosten weg.
Community Support
Eine starke Community hilft uns Probleme zu lösen.
Update
Ein regelmäßiges Update schließt Sicherheitslücken und steigert die Performance.
LAMP und Module Support
Die Unterstützung von LAMP und Modulen vereinfacht Installation und Entwicklung.
Data Push Support
Data Push Support ermöglicht Daten-Push-Prozesse, die Daten automatisch (ohne
vorhergehende Abfrage) an die Client-Anwendung übertragen. Mit diesem hoch
skalierbaren Verfahren können sekundengenaue Daten für mehrere tausend Anwender
gleichzeitig bereitgestellt werden.
Hier sind einige Backends mit AMF-Unterstützung, nach Programmiersprache
unterschieden:
Java
PHP
LiveCycle Data Services, BlazeDS, WebORB für Java,
Granite DS, LightStreamer, RED 5
WebORB für PHP, AMFPHP, SabreAMF, Zend Framework
Ruby
WebORB für Ruby on Rails, RubyAMF
Python
.NET
ColdFusion
PYAMF, DjangoAMF
WebORB für .NET, FluorineFX
integriert
15
Hier werden nur die bekanntesten Backends kurz analysiert und erläutert.
4.2.1 LiveCycle Data Services
LCDS ist ein Framework von Adobe, um Rich-Internet-Anwendungen (RIA) zu entwickeln.
Außer HTTP und AMF bietet LCDS auch RTMP (Real Time Messaging Protocol) als
Transferprotokoll. Als Programmiersprache benutzt LCDS Java. Funktionen, wie
Datensynchronisation, Data Push und das abonieren von Messages, macht LCDS zum
Traum-Framework für Entwickler. Der Nachteil ist jedoch, dass das Produkt kostenpflichtig
und nicht gerade günstig ist.
Vorteile
 professioneller Support
 automatische Datensynchronisation
 RTMP Tunneling
 Message-Themen veröffentlichen und abonieren
 Data Push Support
Nachteile
 kostenpflichtig
 nicht Open Source
 hohe System-Anforderungen
 aufwendige Konfiguration
 eigener Webserver
 keine Module für andere Frameworks
4.2.2 BlazeDS
Als Alternative zu LCDS bietet Adobe BlazeDS. Es ist eine abgespeckte Version von
LiveCycle Data Services. Der Vorteil von BlazeDS ist, dass es Open Source und kostenlos
ist. Einstieger finden auf der Adobe-Seite eine ganze Menge Dokumentation und Tutorials.
Bei einem kleinen Projekt gibt es nur geringe Unterschiede zwischen BlazeDS und LCDS
(wie z.B. RTMP-Support und Messages abonieren). BlazeDS benutzt einen Java Web
Application Server (z.B. Tomcat), deswegen kann es nicht in LAMP intregriert werden.
Aufgrund der aufwendigen Konfiguration, ist dies natürlich ein zeitlicher Nachteil. Des
weiteren ist die Community noch nicht sehr groß.
Vorteile
 Data Push Support
 Open Source
 kostenlos
Nachteile
 aufwendige Konfiguration
 eigener Webserver
 keine Module für andere Frameworks
4.2.3 WebORB
WebORB ist ein kostenloses Open-Source -Produkt für RIA von der Firma Midnight
Coders. WebORB ist für mehrere Platformen verfügbar: .NET, Java, PHP und Ruby. Von
16
den Features her, ist das Produkt vielversprechend, da es beinahe an BlazeDS heran
kommt. Die Dokumentation und der Community-Support sind weniger einsteigerfreundlich,
da die Firma mit Support ihr Geld verdient.
Vorteile
 Data Push Support
 Open Source
 kostenlos
 LAMP Support
Nachteile
 kaum Dokumentation
 keine Module für andere Frameworks
4.2.4 RED 5
RED 5 bietet nicht nur AMF, sondern dient auch als Flash Media Server. Mit RED 5 kann
Audio/Video gestreamt und aufgezeichnet werden. Außerdem bietet RED 5 mit Hilfe von
AMFPHP ein Modul für Drupal an. Leider ist die Dokumentation von RED 5 grauenhaft,
ähnlich wie bei WebORB.
Vorteile
 Open Source
 kostenlos
 starke Community
Nachteile
 kaum Dokumentation
 benötigt AMFPHP als Backend Support
 mangelnde Updates
4.2.5 AMFPHP
AMFPHP ist ein RPC-Toolkit für PHP zur Kommunikation mit Flash über das Action
Message Format (AMF). Weil AMFPHP schon ziemlich lange auf dem Markt ist, ist es
auch das am meisten genutzte Backend. Außerdem gibt es ein Modul für Drupal. Der
Nachteil ist, dass der Entwickler keine Updates mehr herausgebracht hat. Daher ist die
AMFPHP-Technologie etwas veraltet.
Vorteile
 Open Source
 kostenlos
 zahlreiche Beispiele im Internet
 einfach zu konfigurieren
 Module für andere Frameworks
 LAMP Support
Nachteile
 die Entwicklung hat nachgelassen
 kein Data Push Support
 kein Update vorgesehen
17
4.2.6 Fazit
LCDS
BlazeDS
WebORB
Red 5
AMFPHP
-
+++++
+++++
+++++
+++++
++
++++
+
++++
++++
+++++
++++
++++
++
-
LAMP Support
-
-
+++++
-
+++++
Module Support
-
-
-
++++
+++++
+++++
++
+++
-
-
12
15
18
15
19
Open Source
Community support
Update
Data Push Support
Ergebnis
Die Punktevergabe basiert auf meiner Recherche. Hier wurde mit 5 (+) der
höchstmögliche und mit 0 (-) der niederste Wert vergeben.
Ich habe AMFPHP gewählt, weil der Einarbeitungsaufwand von WebORB wegen
fehlendem Support aufwendiger ist als AMFPHP ist. Des Weiteren ist die Unterstützung
von LAMP und Modulen, um eine schnelle Entwicklung zu erreichen sehr hilfreich.
Unter diesen Voraussetzungen passt AMFPHP am besten.
Ein großer negativ Aspekt des AMFPHP besteht darin, dass keine Updates und weitere
Erweiterungen unterstützt werden können, da die Entwicklung seitens der Entwickler von
AMFPHP nicht weiter ausgeführt wurde. Jedoch nimmt dieser große Nachteil für mein
Projekt keinen Einfluss, da ich das AMFPHP nur zur Verarbeitung des Datenformats
benutze. Außerdem sind die zusätzlichen Feature nicht im Rahmen der Problemstellung
dieses Projekts.
18
5. Drupal einrichten
Da ein soziales Netzwerk als Datenlieferante gewählt wurde, wird Drupal als Plattform
verwendet. Als Datenbank kann MySQL oder PostgreSQL genommen werden. LAMP
bietet normalerweise nur MySQL als Datenbanksystem an. Somit wird MySQL als
Datenbank genommen. Drupal selbst bietet eine automatisierte Installation an.
5.1 Drupal-Module
Drupal hat zwei Arten von Modulen: Core Module und und optionale Module. Core Module
werden bei der Drupal-Installation mit installiert. Um ein zusätzliches Feature zu
bekommen, wird ein bestimmtes Modul gebraucht . Die zusätzlichen Module sollten nicht
mit den Core Module im gleichen Ordner zusammengelegt werden. Dafür bietet Drupal
Unterordner, die unter /sites/all/ zu finden sind. Unter /sites/all/
können die Ordner modules und themes erstellt werden. Diese Ordner werden von
Drupal automatisch erkannt.
Für ein soziales Netzwerk wird eine Auswahl an Modulen benötigt (Abbildung 7).
Abbildung 7: Drupal Module
19
6. Flex RemoteObject mit AMFPHP
In diesem Kapitel wird versucht, Daten aus der Drupal-Datenbank über RemoteObject mit
Hilfe von AMFPHP auszulesen.
Da der größere Teil des Prototypen in Flex entwickelt wird, ist es vorteilhaft, den FlexBuilder zu verwenden. Studenten und Lehrkräfte bekommen den Flex Builder kostenlos
und andere können ihn 30 Tage lang testen oder kaufen. Natürlich ist es möglich, für Flex
auch mit einem beliebigen Texteditor ohne weitere Kosten zu programmieren, da der FlexCompiler und das Flex-Framework Open Source und kostenlos sind.
Für die Kommunikation zwischen Drupal und AMFPHP wird ein zusätzliches ServiceModul benötigt.
Kurz zusammengefasst wird verwendet:
• Flex Builder
• AMFPHP 1.9 Beta 2
• AMFPHP-Modul für Drupal
• Service-Modul für Drupal
6.1 AMFPHP und das Service-Modul einrichten
Üblicherweise werden die Module (AMFPHP und Service) nach /sites/all/modules und das
AMFPHP-Paket in den AMFPHP-Module-Ordner entpackt
(/sites/all/modules/amfphp/ampfphp).
Für das Service-Modul muss nichts besonderes eingerichtet werden.
amfphp and this gateway are installed correctly. You may now connect to this gateway from
Flash.
Note: If you're reading an old tutorial, it will tell you that you should see a download window
instead of this message. This confused people so this is the new behaviour starting from amfphp
1.2.
View the amfphp documentation
Load the service browser
Abbildung 8: AMFPHP - Meldung in Drupal-Services-Menü
Um zu testen, ob AMFPHP funktioniert, muss in das Menü gegangen werden.
administer > site building > services und den Link AMFPHP /services/amfphp gedruckt werden. Wenn es läuft, sollte die folgende Seite (Abbildung 8)
angezeigt werden. Vorher müssen natürlich im Admin-Menü die Module aktiviert werden.
20
6.2 Flex einrichten
Damit Flex weiß, welche Art von Verbindung benutzt werden soll, müssen zuerst einige
Konfigurationen durchführt werden.
Zuerst wird die Datei service-config.xml (siehe Abildung 9) benötigt. Diese
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp"
class="mx.messaging.channels.AMFChannel">
<endpoint uri="//localhost:8888/services/amfphp"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
Abbildung 9: service-config.xml
Konfigurationsdatei sollte im Root-Verzeichnis des Flex-Projekts abgespeichert werden.
Das einzige, was zu ändern ist, ist die endpoint URI. Die Adresse ist die WebserverAdresse. Im oberen Beispiel ist dies das localhost mit Port 8888. Danach muss nur
noch der Pfad zur Datei service-config.xml dem Flex-Compiler mitgeteilt werden
(siehe Abildung 10).
21
Abbildung 10: Flex Compiler Setting
Dieses Menü befindet sich unter File > Properties > Flex Compiler. Damit der Compiler die
Datei service-config.xml auch findet, sollte der korrekte Pfad eingegeben
werden. Weil die Datei im Root-Verzeichnis des Flex-Projekts gespeichert wird,kann die
komplette Pfadeingabe gespart werden.
22
6.3 Test Programm
Bevor mit dem Prototypen begonnen werden kann, ist es sinvoll, ein kleines TestProgramm zu schreiben. In diesem Fall ist die Datenverbindung eine notwendige
Voraussetzung. Das Programm dient dazu, die Verbindung zwischen Drupal und Flex über
RemoteObject zu testen.
6.3.1 Die Oberfläche
Die grafische Benutzeroberfläche (GUI – Graphical User Interface) spielt in diesem TestProgramm nur eine kleine Rolle. Wichtig ist nur, dass der Benutzer die Testverbindung
ausführen kann.
Ein paar Datenobjekte werden zur Probe aus der Drupal-Datenbank ausgelesen.
Notwendige Daten wie Name und Email-Adresse müssen bei der Registrierung von
jedem Mitglied eines sozialen Netzwerks angegeben werden. Aus diesem Grund sind sie
als Datenarten sinnvoll. Da Interesse an den Beziehungen zwischen den Mitgliedern
besteht, gehören auch diese zu den Daten, die ausgelesen werden.
Die GUI besteht aus:
• 1 Text Input
• 2 Text Area
• 1 DataGrid
• 1 Button
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()">
<mx:Panel width="792" height="400" layout="absolute" title="User Profile"
horizontalCenter="0" verticalCenter="0">
<mx:DataGrid x="10" y="158" width="306" id="friend_name"
dataProvider="{FriendList}" change="relationships_detail()" >
<mx:columns>
<mx:DataGridColumn headerText="Name"
dataField="users_user_relationships_name" width="80"/>
</mx:columns>
</mx:DataGrid>
<mx:TextArea width="306" height="74" id="result_text" x="10" y="40"
selectable="false"/>
<mx:Button id="btn" label="Laden" click="show();" width="115"
x="10" y="328"/>
<mx:FormItem label="ID:" fontWeight="bold" x="10" y="10">
<mx:TextInput id="ID" width="50" />
</mx:FormItem>
<mx:Label text="Relationships" x="10" y="132"
fontWeight="bold"/>
<mx:TextArea x="345" y="160" id="friend_profile" width="300"
height="150"/>
</mx:Panel>
</mx:Application>
Durch den Flex Builder wird das Bauen einer GUI sehr erleichtert. Die Oberfläche wird
einfach grafisch dargestellt. Dadurch wird viel Aufwand erspart, da die Beschreibung mit
dem Texteditor wegfällt. Der Flex Builder generiert dann den passenden MXML-Code, den
der Compiler später versteht. Der obere Quelltext generiert eine GUI, Siehe Abbildung 11
aussieht.
23
Abbildung 11: GUI nach Programm-Start
Wenn eine User ID eingegeben wird, wird der passende Benutzer-Name mit der
Mailadresse und dessen Beziehungen aufgelistet (Abbildung 12). Mit einem Klick auf
einen Namen in der Beziehungsliste (unter Relationships) wird die ID, der Typ und die
Mail-Adresse dieser Beziehung ausgegeben (Abbildung 13).
Abbildung 12: GUI nach Eingabe einer User ID.
24
Abbildung 13: GUI nachdem ein User-Name geklickt wurde.
25
6.3.3 Funktionen
Damit das ganze Programm funktioniert, mussten einige Funktionen deklarieren werden.
import mx.controls.*;
import mx.rpc.events.*;
import mx.utils.ArrayUtil;
[Bindable]
public var FriendList:Array;
public var resObject:Object ;
public function onFault(event:FaultEvent):void{
Alert.show(event.fault.faultString, "Error");
}
public function onViewsResult(event:ResultEvent):void{
FriendList = ArrayUtil.toArray(event.result);
}
public function onViewsUser(event:ResultEvent):void{
resObject = event.result;
result_text.text = "Name: " + event.result.name
+"\n"+"Mail:"+event.result.mail+"\n" ;
}
public function show():void{
views.get("relationships",
['rid','users_user_relationships_name'],[ID.text]);
user.get(ID.text);
}
...
]]>
public function relationships_detail():void{
</mx:Script>
Zuerst werden einige Pakete importiert. Dadurch werden bestimmte Funktionen benutzbar.
Im Test-Programm gibt es fünf Methoden.
Die Methode onFault gibt eine Meldung aus, wenn ein Fehler auftritt.
Interessanter ist die Methode show(), besonders der Funktionsaufruf
views.get("relationships"['rid','users_user_relationships_name'],
[ID.text]).
Hiermit werden die Daten aus der Drupal-Datenbank abgerufen. Views ist ein DrupalModul, das Datenbank-Abfragen erstellt. Durch Nutzung des Views-Moduls muss man
sich später nicht mehr um einzelne SQL-Querys kümmern. In diesem Beispiel heißt die
Abfrage „relationships“.
Wenn eine dazu passende Views-Abfrage vorhanden ist, sind beliebige Daten aus der
Datenbank abfrufbar. Diese Funktionalität findet sich unter Site building > Services im
Admin-Menü von Drupal.
26
6.3.2 RemoteObject
<mx:RemoteObject id="views" fault="onFault(event)"
showBusyCursor="true" source="views" destination="amfphp">
<mx:method name="get" result="onViewsResult(event)"
fault="onFault(event)" />
</mx:RemoteObject>
<mx:RemoteObject id="user" fault="onFault(event)"
showBusyCursor="true" source="user" destination="amfphp">
<mx:method name="get" result="onViewsUser(event)"
fault="onFault(event)"/>
</mx:RemoteObject>
Interessanter ist, wie Flex die Objekte aufruft. Was zu beachten ist, ist source und
destination.
Abbildung 14: Auszug aus dem ServicesMenü in Drupal
source ist der Paketpfad der Remote PHP-Klasse. Da mit Drupal gearbeitet wird, ist
dies ein bestimmtes Attribut des Service-Moduls.
destination ist die <destination id> in der service-config.xml, in
diesem Fall AMFPHP.
In jeder RemoteObject-Verbindung können beliebige Methoden zugewiesen werden. Da
es zwei verschiedene Paketpfade gibt,werden jedoch nicht beide Methoden unter ein
einzelnes RemoteObject geschreiben.
Die Methodennamen befinden sich in Drupal im Menü Services. In Abbildung 14 sind das
die zwei Paketpfade (user und views) mit mehreren Methoden (delete, get,
login usw.).
27
7. Fazit und Ausblick
7.1 Fazit
Dieses Praxisprojekt hat gezeigt, dass die Entwicklung einer einfachen Anwendung mit
Drupal, Flex und einer Datenbankbasierte Middleware sehr unkompliziert ist. Eine
Datenbankschnittstelle sowie deren Datenbankmodell sind mit den Drupal/PHP einfach zu
gestalten.
Die Datenbankverbindung zwischen Flex (Flash/ActionScript) und Drupal/PHP funktioniert.
Der Vergleich von verschiedener Datenübertragungsarten und vorhandener Backends hat
mir die Entscheidung erleichtert, eine passende Datenübertragungsart zu finden. Durch
seine überwiegende Stärke in der Webanwendung hat das RemoteObject AMF als
alternative Datenübertragungsart seine Vorteile in punkto Geschwindigkeit, Kosten und
Kompabilität ausspielen können.
Des weiteren kann man in meinem Testprogramm ersehen, dass AMFPHP für meines
Projekt gut gewählt sind, da die Datenauslesung erfolgreich und ohne Problem verlief.
Drupal selbst bietet viele Möglichkeit eine Community zu bauen, trotz vieler Updates und
einigen Schwierigkeiten beim Aktualisieren.
7.2 Ausblick
Der nächste Schritt ist der Visualisierungsteil. Die Visualisierung sollte eine Interaktion
zwischen dem Benutzer und den aufgerufenen Daten unterstützen, damit diese
übersichtlicher und informativer präsentiert werden können. Wichtig ist außerdem,
Möglichkeiten zu finden, falls die Visualisierung an Grenzen stößt. Zu meiner Arbeit
befasse ich mich unter anderem mit der Frage, was man beispielsweise tun kann, wenn
die zu übertragende Datenmenge riesig ist. Die Visualisierungsmöglichkeit von Flare
werde ich näher betrachten,da ich zu Beginn Flare gewählt habe.
28
Tabellenverzeichnis
Tabelle 1
Kriterienraster zur Bewertung von Softwareprodukten
13
Tabelle 2
Vorteile und Nachteile von Open Source
15
29
Abbildungsverzeichnis
Abbildung 1
Stufen der Visualisierungspipeline.
5
Abbildung 2
Zeitleiste der bekanntesten sozialen Netzwerke.
7
Abbildung 3
Systemarchitektur von Drupal.
8
Abbildung 4
Verbreitung von Plattformen auf Internet-fähigen Rechnern.
9
Abbildung 5
Grundprinzipien des Datenaustauschs zwischen Drupal und
Flex.
10
Abbildung 6
Übertragungsgeschwindigkeit verschiedener
Dateizugriffsarten.
12
Abbildung 7
Drupal Modules.
17
Abbildung 8
AMFPHP: Meldung in Drupal-Services-Menü.
18
Abbildung 9.
service-config.xml.
19
Abbildung 10
Flex Compiler Setting.
20
Abbildung 11
GUI nach dem Programm-Start.
22
Abbildung 12
GUI nach Eingabe einer User ID.
22
Abbildung 13
GUI nachdem ein User-Name geklickt wurde.
23
Abbildung 14
Auszug aus dem Services-Menü in Drupal.
25
30
Glossar
AMF (Action Message Format) ist ein Binärformat zum Datenaustausch zwischen Flash
und einer Gegenstelle über RPC.
AIR (Adobe Integrated Runtime) ermöglicht den Einsatz bewährter Web-Technologien für
die Entwicklung plattformübergreifender Rich-Internet-Anwendungen für den Desktop.
CMS (Content Management System) bezeichnet ein Verwaltungssystem, bei dem der
Anwender ohne jegliche Programmierkenntnisse eine Webseite (Homepage) mit Content
(wörtlich: Inhalt) füllen kann.
LAMP (Linux Apache MySQL PHP) ist eine Laufzeitumgebung für Webanwendungen und
besteht aus Open-Source-Software-Paketen für das Betriebssystem Linux.
MAMP (Macintosh Apache MySQL PHP) ist eine Laufzeitumgebung für Webanwendungen
und besteht aus Open-Source-Software-Paketen für das Betriebssystem MacOS X.
MXML (M eXtensible Markup Language) ist eine XML-basierte Markup-Sprache, in der die
Flash-Komponenten deklarativ beschrieben werden.
PHP (Personal Home Page) ist eine C-ähnliche Programmsprache für WebAnwendungen.
REST (Representational State Transfer) bezeichnet ein Architekturkonzept für skalierbare
verteilte Hypermedia-Informationssysteme wie das World Wide Web.
RIA (Rich Internet Application) ist eine Webanwendung, die die Fähigkeiten einer
Desktopanwendung beherrscht, wie z.B. Drag‘n‘Drop, lokaler Dateizugriff usw.
RPC (Remote Procedure Call) Entfernter Prozedur-Aufruf, meist über ein Netzwerk.
RTMP (Real Time Messaging Protocol) ist ein von Adobe entwickeltes proprietäres
Netzwerkprotokoll, um Audio-, Video- und sonstige Daten über das Internet von einem
Media Server zu einem Flash-Player zu übertragen.
SDK (Software Development Kit) ist eine Sammlung von Werkzeugen und Anwendungen,
um eine Software zu erstellen, meist inklusive Dokumentation. Mit diesem ist es
Softwareentwicklern möglich, eigene darauf basierende Anwendungen zu erstellen.
SOAP (Simple Object Access Protocol) ist ein Netzwerkprotokoll mit dessen Hilfe Daten
zwischen Systemen ausgetauscht und RPCs (entfernte Prozeduraufrufe) ausgeführt
werden können.
XAMPP (X Apache MySQL PHP PEAR) ist eine Laufzeitumgebung für Webanwendungen
und besteht aus Open-Source-Software-Paketen; X steht für ein beliebiges Betriebsystem.
WAMP (Windows Apache MySQL PHP) ist eine Laufzeitumgebung für Webanwendungen
und besteht aus Open-Source-Software-Paketen für das Betriebssystem Windows.
31
Quellen
Flex-Developer Center: http://www.adobe.com/de/devnet/flex/
[Boyd/Ellison 2007]
Boyd, d. m., & Ellison, N. B. (2007): Social network sites: Definition, history, and
scholarship. Journal of Computer-Mediated Communication, 13(1), article 11
[Cole/Thomas 2008]
Cole A;Thomas R(2008): Learning Flex 3
[Heer et al. 2005]
Jeffrey Heer, Stuart K. Card, James A. Landay(2005): Prefuse: A Toolkit for Interactive
Information Visualization.
[Heer/Boyd 2005]
Heer, J.; Boyd, D. (2005): Vizster: Visualizing Online Social Networks. IEEE Information
Visualization.
[Meyers Lexikon 1996]
Meyers Lexikonverlag (2006): Meyers Großes Taschenlexikon in 24 Bänden, Band 4,
ISBN 978-3-411-10064-4
[Pfeffer 2008]
Pfeffer, J. (2008): Visualisierung sozialer Netzwerke. Erschienen in: Stegbauer, C. (Hrsg.),
(2008): Netzwerkanalyse und Netzwerktheorie. Ein neues Paradigma in den
Sozialwissenschaften. Wiesbaden. S. 231-238.
[Schumann/Müller 2000]
Schumann, H.; Müller, W. (2000): Visualisierung. Grundlagen und allgemeine Methoden.
Berlin, Heidelberg.
[VanDyk 2008]
VanDyk K. J (2008): Pro Drupal Development, Second Edition.
[Renner et al. 2006]
Thomas Renner, Michael Vetter, Sascha Rex, Holger Kett (2006): Open Source Software:
Einsatzpotentiale und Wirtschaftlichkeit, Fraunhofer-Institut für Arbeitswirtschaft und
Organisation IAO, Stuttgart.
32
Quellcode
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.*;
import mx.rpc.events.*;
import mx.utils.ArrayUtil;
[Bindable]
public var FriendList:Array;
public var resObject:Object ;
public function onFault(event:FaultEvent):void{
Alert.show(event.fault.faultString, "Error");
}
public function onViewsResult(event:ResultEvent):void{
FriendList = ArrayUtil.toArray(event.result);
}
public function onViewsUser(event:ResultEvent):void{
resObject = event.result;
result_text.text = "Name: " + event.result.name
+"\n"+"Mail:"+event.result.mail+"\n" ;
}
public function show():void{
views.get("relationships",
['rid','users_user_relationships_name'],[ID.text]);
user.get(ID.text);
}
public function relationships_detail():void{
friend_profile.text = "Relationship ID: " +
friend_name.selectedItem.rid + "\n" + "Relationship Type: " +
friend_name.selectedItem.user_relationship_types_user_relationship
s_name + "\n" + "Mail: " +
friend_name.selectedItem.users_user_relationships_mail + "\n";
}
]]>
</mx:Script>
<mx:RemoteObject id="views" fault="onFault(event)"
showBusyCursor="true" source="views" destination="amfphp">
<mx:method name="get" result="onViewsResult(event)"
fault="onFault(event)" />
</mx:RemoteObject>
<mx:RemoteObject id="user" fault="onFault(event)"
showBusyCursor="true" source="user" destination="amfphp">
<mx:method name="get" result="onViewsUser(event)"
fault="onFault(event)"/>
</mx:RemoteObject>
33
<mx:Panel width="792" height="400" layout="absolute"
title="User Profile" horizontalCenter="0" verticalCenter="0">
<mx:DataGrid x="10" y="158" width="306" id="friend_name"
dataProvider="{FriendList}" change="relationships_detail()" >
<mx:columns>
<mx:DataGridColumn headerText="Name"
dataField="users_user_relationships_name" width="80"/>
</mx:columns>
</mx:DataGrid>
<mx:TextArea width="306" height="74" id="result_text" x="10"
y="40" selectable="false"/>
<mx:Button id="btn" label="Laden" click="show();"
width="115" x="10" y="328"/>
<mx:FormItem label="ID:" fontWeight="bold" x="10"
y="10">
<mx:TextInput id="ID" width="50" />
</mx:FormItem>
<mx:Label text="Relationships" x="10" y="132"
fontWeight="bold"/>
<mx:TextArea x="345" y="160"
id="friend_profile" width="300" height="150"/>
</mx:Panel>
</mx:Application>
34