Anzeige
Anzeige
Software & Entwicklung
Artikel merken

Willkommen im Rich Internet Application Nirvana: Von Rails über Flex zu WebORB

Die Skiptsprache PHP ist aus dem Alltag der Webentwicklung nicht wegzudenken. Andi Gutmans und Zeev Suraski legten 1997 mit der Veröffentlichung von PHP 3.0 den Grundstein für eine Vielzahl von Projekten, die das Web geprägt haben. Heute setzen immer mehr Web-Applikationen auf Ruby. So auch WebORB, das die Grenzen des Machbaren erneut ausweitet.

8 Min. Lesezeit
Anzeige
Anzeige

Die in diesem Artikel vorgestellten Technologien können und sollen weder PHP noch TYPO3 ersetzen. Vielmehr geht es um einen Ausblick auf neue Entwicklungen, die sich aus dem Hype um das so genannte Web 2.0 abheben. Vielleicht sind einige von ihnendem einen oder anderen eingefleischten TYPO3-Experten bisher vorenthalten geblieben.

Ruby on Rails

Anzeige
Anzeige

Ruby on Rails ist ein auf der Skriptsprache Ruby basierendes quelloffenes Framework zur Erstellung von Webapplikationen. Version 1.0 wurde im Dezember 2005 von David Heinemeier Hansson unter der MIT-Lizenz [1] veröffentlicht. Die wachsende Gemeinde von Entwicklern um Hansson versucht seitdem, moderne Architekturmuster umzusetzen: dazu zählen die konsequente Anlehnung an Model-View-Controller (MVC) mit dem Ziel, eine einfache Wiederverwertbarkeit von Komponenten zu ermöglichen (Stichwort: DRY). Die Reduzierung auf ein Mindestmaß an Komplexität soll dem Entwickler mehr Zeit und Raum geben, sich auf das Wesentliche zu konzentrieren. Die Installation von Rails ist auf der Website von Ruby on Rails ausführlich beschrieben und einige Dienstleister bieten inzwischen das Hosting von Rails an [2].

Baugerüste

Rails kommt im Gegensatz zu XML-Frameworks mit einer einzigen Konfigurationsdatei zur Einstellung der Datenbankparameter aus (Convention over configuration). Unterstützt werden zahlreiche RDBMS wie PostgreSQL, Oracle, MySQL und auch das leichtgewichtige SQLite. Der Entwickler braucht sich dabei nicht um die Unterschiede und Eigenheiten der verschiedenen Datenbanken kümmern – Rails bildet die Struktur der Datenbank einheitlich und transparent ab. Ein „Scaffolding“ (zu deutsch „Baugerüst“) genannter Mechanismus erzeugt entsprechend der Felder und deren Typen automatisch prototypischen Programmcode und HTML-Templates, die im Laufe der Entwicklung durch eigenen Code und eigenes Design ergänzt werden. Besonders für Einsteiger kann ein solches Grundgerüst eine Erleichterung darstellen, aber auch Profis profitieren von der eingesparten Tipparbeit.

Anzeige
Anzeige

Zeitsparende Edelsteine

Die Erweiterbarkeit von Rails ist eine große Stärke des Frameworks: eine Bibliothek von Ruby-Modulen steht bereit, um auch bei exotischen Problemstellungen auf einen eigenen, möglicherweise aufwendig zu implementierenden Ansatz verzichten zu könnnen. Mit „Ruby Gems“ können Module hinzugefügt, entfernt und automatisch aktualisiert werden, ähnlich dem von Debian bekannten „apt-get“ oder „CPAN“ bei Perl. Die Palette reicht von einem Modul zur Anbindung an Jabber/XMPP (XMPP4R) über Schnittstellen zu Betriebssystemen („dbus“ für MacOSX und Linux; „com32api“ für Windows) bis zu Erweiterungen für den Funktionsumfang von Rails selbst – zum Beispiel ein alternativer Scaffolding-Mechanismus der JavaScript-Code für AJAX generiert. Auf einem Betriebssystem mit installierten Ruby Gems reicht der Befehl

Anzeige
Anzeige
SHELL
gem install ajax_scaffold_generator

Listing 1

um ihn zu installieren. Ähnlich einfach ist die Vorgehensweise, um auf eine neue Version von Rails zu springen:

SHELL
gem update rails

Listing 2

Abhängigkeiten zu bestehenden Modulen werden dabei automatisch aktualisiert. Änderungen an Rails, die die Struktur der Datenbank betreffen, werden ebenfalls automatisch eingepflegt – auf Werkzeuge wie phpMyAdmin kann der Rails-Administrator verzichten.

Anzeige
Anzeige

Effizienz

Der integrierte und plattformunabhängige Webserver (Webrick) beschleunigt die Entwicklung im Sinne des „Agile Software Development“ weiter. Aber Rails-Anwendungen lassen sich auch auf eigenständigen Webservern ausführen: Apache (mit oder ohne „mod_ruby“) und lighttpd (mit „FastCGI“ oder dem modernen „SCGI“) sind die verbreitetsten Ansätze. Steigender Beliebtheit erfreut sich der in Ruby implementierte Webserver Mongrel, der einige spezielle Möglichkeiten in Verbindung mit Rails bietet.
Um eine neue Rails Applikation zu erstellen und Webrick zu starten genügen folgende Befehle:

SHELL
rails myRailsApp
cd myRailsApp
ruby script/server

Listing 3

Mit RadRails steht eine ebenfalls quelloffene und auf Eclipse basierende Entwicklungsumgebung bereit. RadRails verträgt sich auch mit anderen Eclipse-basierten IDE: ein gutes Beispiel ist Adobe Flex 2.0.

Macromedia Flex

Am 10. März 2004 veröffentlichte Macromedia die erste Version von Flex. Im Gegensatz zum zu diesem Zeitpunkt bereits etablierten Flash 2004 MX ist Flex weniger ein Werkzeug für Webdesign und Animation als zur Entwicklung von eigenständigen Applikationen. Macromedia reagierte damit auf die Abneigung vieler Entwickler, einen Design-orientierten Ansatz in den Mittelpunkt der Arbeit zu stellen.

Anzeige
Anzeige

Flash und Flex bleiben nah verwandt: Das auf J2EE basierende Flex liefert eine Vielzahl an Klassenbibliotheken, die komplexe Funktionen von Flash bereitstellen, ohne dass eine einzige Zeile ActionScript nötig wäre. Die an XML angelehnte Beschreibungssprache MXML

[3] dient dazu, durch den Flex Compiler in das von Flash gewohnte Format SWF zu übersetzen. Die Voraussetzungen des Clients für Flex beschränken sich daher auf einen installierten Flash Player. Hier ein Beispiel für das Abspielen von Flash Videos in MXML:

XML
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:VBox>
		<mx:VideoDisplay id="myVid" source="http://localhost/video/MyVideo.flv" />
		<mx:Button label="Pause" click="myVid.pause();" />
		<mx:Button label="Play" click="myVid.play();" />
	</mx:VBox>
</mx:Application>

Listing 4

Adobe Flex 2.0

Kurz nach der Übernahme von Macromedia durch Adobe erschien die Version 2.0 von Flex, die im Vergleich zu den früheren Versionen deutlich weiterentwickelt wurde. Während die IDE nun auf Eclipse basiert und weitreichende Möglichkeiten zum Debugging bietet (für Flash-Entwickler oftmals ein unangenehmes Unterfangen), hat sich die Plattform vielen Standards geöffnet und sich von den properitären Ansätzen (zum Beispiel zur Anbindung externer Datenquellen) entfernt. Verbreitete Standards wie XMLRPC, SOAP, JSON und nicht zuletzt AJAX werden unterstützt.

Eine wichtige Neuerung ist die Unterstützung von ActionScript 3.0. Entwickler, die bisher eine konsequente Objektorientierung vermisst haben, können jetzt aufatmen, denn ActionScript ist erwachsen geworden und wartet mit zeitgemäßen Konzepten auf: Nahezu die gesamte Funktionalität von Flex ist durch ActionScript an die eigenen Bedürfnisse anpassbar. In bester objektorientierter Manier lassen sich Klassen erweitern und durch eigene Ergänzen. Auch das aus Java bekannte Konzept der „Packages“ hat Einzug gehalten.

Anzeige
Anzeige

Code vs. Design

Um die Zusammenarbeit zwischen Designern und Entwicklern zu vereinfachen, hat Adobe mit Version 2.0 das von HTML gewohnte CSS in alle Funktionen von Flex integriert. Sollten die damit verbundenen Möglichkeiten zur Gestaltung noch nicht ausreichen, ist eine andere Neuerung interessant: Das „Skinning“. Ein Designer kann nun in Flash Designvorlagen erstellen, die in Flex eingebunden werden. Dadurch sind dem Erscheinungsbild der Applikation kaum noch Grenzen gesetzt und die angestrebte Trennung zwischen Code und Design ist noch deutlicher vollzogen.

Politik

Die Dokumentation von Flex ist in Version 2.0 nahezu vollständig überarbeitet worden und taugt nun auch für Umsteiger und Neulinge. Adobe selbst bietet mittlerweile eine Vielzahl von Tutorials und Videocasts an und die Mitarbeiter schreiben zu relevanten Themen fleißig Blogs – eine lebendige Gemeinde ist enstanden, sicher nicht zuletzt wegen des neuen Lizenzmodells: Zumindest ist der Compiler von Flex 2 (Flex SDK) nun kostenlos erhältlich (die IDE „Adobe Flex Builder 2“ kostet derzeit 749 US-Dollar).
Eigene kommerzielle Interessen haben so eine Chance bekommen: Die Binärkompilate (SWC) von selbstentwickelten Flex-Komponenten lassen sich vertreiben, ohne Einsicht auf den Quellcode gewähren zu müssen. Der Kunde bindet diese Komponenten als „Black-Box“ in seine Applikation ein und zahlt – ein noch neuer Markt, den aber bereits einige kleine Unternehmen für sich entdeckt haben. Entwickler, die ihre Komponenten als Open Source anbieten möchten, finden bei Adobes „Flex Exchange“ eine passende Plattfom.

Konvergenz

Es stellt sich die Frage, was Rails und Flex miteinander verbindet. Flex eignet sich besonders zur Erstellung interaktiver, graphisch anspruchsvoller Oberflächen. Rails zeichnet sich durch die bereits beschriebenen, vielseitigen Möglichkeiten zur Bildung von Schnittstellen (z. B. zwischen Datenbanken und Applikationen) bei minimalem Aufwand aus.

Anzeige
Anzeige

Die auch von TYPO3 bekannte Trennung zwischen dem Backend – der Datenquelle – und dem Frontend – dem Präsentationsserver – zieht sich quer durch das Web – aus guten Grund. Daten können und sollen sich ändern dürfen, gleiches gilt für das optische und funktionale Erscheinungsbild der Applikationen. Viele Entwickler kennen folgendes Problem: Ein Projekt begann einfach, als Datenquelle reichte SQLite oder MySQL. Doch mit steigenden Anforderungen offenbaren sich Probleme. Schlecht implementierte Schnittstellen oder überforderte Datenbanken sorgen oftmals für zeitaufwendige Korrekturen.

WebORB for Rails

Rails und Flex bieten in Kombination mit einem dritten Kandidaten ein ausgezeichnetes Beispiel, wie man derartige Probleme vermeiden kann: WebORB [4] von der Firma Midnight Coders liegt seit August 2006 in Version 1.0 als Plugin für Rails vor, liezensiert unter der GPL. WebORB bietet eine interessante Alternative zu den „Adobe Flex Data Services 2“, deren Lizenz zur Entwicklung kommerzieller Anwendung derzeit um die 6.000 US-Dollar kostet.

Die Installation des Plugins ist simpel:

Anzeige
Anzeige
SHELL
cd myRailsProject
ruby script/plugin install http://themidnightcoders.net:8089/svn/weborb

Listing 5

Eine detaillierte Anleitung zur Installation und Konfiguration von WebORB findet sich auf den Seiten von Midnight Coders [5].

Flex Remoting

Die Möglichkeit, via HTTP zu kommunizieren, bietet Flex bereits von Haus aus, ein paar Zeilen MXML reichen aus, um mit einer Webapplikation Verbindung aufzunehmen. WebORB bildet eine Schnittstelle zwischen Flex und Rails und verknüpft Frontend und Backend. Mittels dem aus Flash bekannten Kommunikationsprotokoll AMF (einigen Lesern wird auch AMFPHP ein Begriff sein) stellt es eine Verbindung zum Framework von Rails her, wodurch ein Zugriff auf die Funktionen von Rails und den darunterliegenden Ruby-Modulen ermöglicht wird.
Mittels einer Konfigurationsdatei werden WebORB die Methoden bekannt gemacht, die anschließend aus Flex aufgerufen werden können – ein Zugriff auf sicherheitskritische Bereiche des Rails Frameworks ist nicht möglich, es sei denn der Entwickler gibt ihn explizit frei. Nebenbei kümmert sich WebORB um das Serialisieren und Typisieren der Daten und das Abfangen von Fehlern.

XML
<!-- WebORB remoting-config.xml -->
<destination id="InfoService">
	<properties>
		<source>InfoService</source>
	</properties>
</destination>

Listing 6

RUBY
require 'weborb/context'
require 'rbconfig'

class InfoService
	def getComputerInfo( requestId )
		computer_info = Hash.new
		request = RequestContext.get_request
		computer_info['serverName'] = request.server_software
		computer_info['requestId'] = requestId
    		computer_info['os'] = Config::CONFIG["arch"].to_s
    		computer_info['currentTime'] = Time.now
    		computer_info
  	end
end

Listing 7

XML
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onCreationComplete();" >

	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.remoting.mxml.RemoteObject;
	
			private var remoteObject : RemoteObject;
	
			private function onCreationComplete():void
			{
				remoteObject = new RemoteObject();
				remoteObject.destination = "InfoService";
				remoteObject.getComputerInfo.addEventListener( "result", onResult );
			}
	
			private function onResult(event:ResultEvent):void
			{
				var computerInfo:Object = event.result;

				serverInfoText.text = computerInfo.serverName;
				osText.text = computerInfo.os;
				timeText.text = computerInfo.currentTime.toString();

				infoButton.enabled = true;
			}
	
			private function getInfo():void
			{
				infoButton.enabled = false;
				
				serverInfoText.text = "in progress ...";
				osText.text = "in progress ...";
				timeText.text = "in progress ...";

				remoteObject.getComputerInfo( "request2342" );
			}
		]]>
	</mx:Script> 

    <mx:TitleWindow width="580" height="382" layout="absolute" title="TYPO3 Magazine" horizontalAlign="left" fontFamily="Verdana">
        <mx:Panel x="10" y="10" width="540" height="290" title="WebORB Test" backgroundImage="assets/ruby.png" horizontalAlign="center" verticalAlign="middle" backgroundColor="#c0c0c0">
               <mx:Label text="Results" height="20" />
           		<mx:Panel title="serverInfoText"  width="510" height="62">
					<mx:Text id="serverInfoText"  text="waiting for result" />
				</mx:Panel>
           		<mx:Panel title="osText"  width="510" height="62">
					<mx:Text id="osText" text="waiting for result" />
				</mx:Panel>
           		<mx:Panel title="timeText"  width="510" height="62">
					<mx:Text id="timeText" text="waiting for result" />
				</mx:Panel>
        </mx:Panel>
        <mx:Button id="infoButton" label="Get Server Info" click="getInfo();"  x="10" y="310"/>
    </mx:TitleWindow>

</mx:Application>

Listing 8

Fazit

Mit dem Einsatz von WebORB ist es für den Entwickler nicht mehr entscheidend wo und von welcher Technologie die Methoden ausgeführt werden. WebORB eignet sich daher insbesondere zur Konsolidierung von Datenquellen. Der Entwickler braucht sich keine Gedanken über die Art und Weise derselben zu machen. Er bekommt einheitliche Ergebnisse, selbst wenn mehrere verschiedene Datenbanken verwendet werden. Die gesparte Zeit kann nun der Applikation zugute kommen. Letztendlich werden sich die Kunden weniger über die Technologien „unter der Haube“ freuen, als über eine liebevoll gestaltete Flex-Applikation, die weitgehend ohne Fehlermeldungen auskommt.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige