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.
<!-- WebORB remoting-config.xml --> <destination id="InfoService"> <properties> <source>InfoService</source> </properties> </destination>
Listing 6
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 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.




