Download (5Mb) - oops/ - Oldenburger Online-Publikations-Server
Download (5Mb) - oops/ - Oldenburger Online-Publikations-Server
Download (5Mb) - oops/ - Oldenburger Online-Publikations-Server
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
7.3 Backend 113<br />
Entdeckung neuer Services und Widgets<br />
Eine Weise, in der die Entdeckung neu angebundener oder vorhandener Services (im Fall des Backends)<br />
erfolgen könnte, basiert auf der Fähigkeit einer Programmiersprache bzw. eines Programms,<br />
eine “Reflexion” (engl. reflection) durchzuführen. Durch diese Prozedur kann die vorhandene Struktur<br />
eines Programms (d.h. im Fall einer objektorientierten Programmiersprache einer Klasse) untersucht<br />
werden und damit ihr Verhalten (die Werte, Metadaten, einzelne Felder und Methoden) zur Laufzeit<br />
verändert werden.<br />
Damit lassen sich z.B. Subklassen einer spezifischen Klasse (oder im Fall von strikt typisierten<br />
Sprachen, einer spezifischen Schnittstelle) zur Laufzeit ermitteln. Diese Herangehensweise konnte<br />
wie im Fall der vorher vorgestellten REST-basierten Entdeckung fortlaufend durchgeführt werden,<br />
bis das erzielte Ergebnis oder ein Grenzfall entdeckt ist. Ein Beispiel dieser Methode ist im Datenmodell<br />
vorhanden, wo das Frontend eine Anfrage für die Auflistung der Subklassen der Klasse<br />
SpatialRelation formuliert (siehe auch Absatz 7.4).<br />
Die Ausführung von Reflection-basierten Verfahren ist sowohl im Fall des Backends als auch im<br />
Fall des Frontends verfügbar – hiermit können z.B. neue, zur Laufzeit noch nicht bekannte Widgets,<br />
die auf dem mobilen Gerät laufen, entdeckt werden. Weiterhin könnte dieser Typ von Entdeckung<br />
auch als eine REST API im Fall des Backends veröffentlicht werden, z.B. mit der Anfrage GET<br />
/app/HomeSharing1/available_widgets/subclass/IMyWidget.<br />
Veröffentlichung der REST API<br />
Die Bereitstellung bzw. Veröffentlichung der vorher beschriebenen REST APIs erfolgt mithilfe eines<br />
Rack-kompatiblen Web <strong>Server</strong>s. Die beschriebene “Web Anwendung” und dessen Routen werden<br />
nach außen anhand einer festgestellten IP-Adresse (siehe auch 7.3.3) und eines Ports zur Verfügung<br />
gestellt. Die Konfiguration ist aus einer Datei gelesen, wie weiter im Paragraph 7.3.6 beschrieben<br />
wird.<br />
Bei der Auswahl eines Web <strong>Server</strong>s wurde darauf geachtet, dass die Softwarelösung die Fähigkeit<br />
behält, mehrere gleichzeitige Verbindungen anzunehmen, zur Gewährleistung der Performanz<br />
bei einer erhöhten Anzahl von Benutzern (Skalierbarkeit). Die aus der Welt der “Ruby on Rails” Web<br />
Application Framework bekannten “minimalistischen” Web <strong>Server</strong>-Lösungen (WEBRick oder Mongrel)<br />
unterstützen diese Anforderung nicht. Weitere Lösungen 23 wie Passsenger oder Unicorn sind für<br />
fortgeschrittene Zwecke, wie die Veröffentlichung von Web-basierten Enterprise-Software geeignet.<br />
Der richtige Ausgleich zwischen mitgelieferten Features und Leichtgewicht wird von dem Web<br />
<strong>Server</strong> namens “Thin” 24 geliefert, welcher sich als ein schneller, leicht bedienbares Web <strong>Server</strong> für<br />
Ruby beschreibt. Thin fasst Ideen aus mehreren Technologien für Ruby-basierte Web Entwicklung in<br />
einer vielseitigen Software-Lösung zusammen.<br />
Thin wird in Form eines Ruby Gems veröffentlicht und bietet eine vereinfachte Benutzung an. Um<br />
eine Instanz des Web <strong>Server</strong>s zu starten werden nur die genannten Parameter (IP-Adresse und Port)<br />
und die entsprechende Rack-konforme Anwendung benötigt. Damit entsteht aus der Perspektive des<br />
Betriebssystems, worauf der <strong>Server</strong> betrieben wird, ein neuer Prozess, welcher den Web <strong>Server</strong> hostet<br />
bzw. der übergebenen Adresse und dem Port lauscht. Thin ermöglicht auch eine Art des “internen”<br />
23<br />
https://www.ruby-toolbox.com/categories/web_servers<br />
24<br />
http://code.macournoyer.com/thin/