# Apache Flex

Apache Flex, vorher Adobe Flex, ist ein Software Development Kit (SDK) zum Entwickeln von Rich Internet Applications (RIAs) auf der technischen Basis der Flash-Plattform. Neben dem als Open Source veröffentlichten SDK besteht das Framework aus dem kostenpflichtigen Flash Builder (ab Version 4, davor hieß dieser Flex Builder), den LiveCycle Data Services und den Flex Charting-Komponenten. Obwohl es schon vor der Veröffentlichung von Flex möglich war, mit Adobe Flash (früher Macromedia Flash) reichhaltige Anwendungen zu erstellen, bot Flash als Werkzeug nicht das von Software-Entwicklern von einer IDE geforderte Funktionsspektrum, sondern wurde weiterhin hauptsächlich von Webdesignern und Grafikern eingesetzt. Flex soll deshalb gezielt Software-Entwickler ansprechen.

## Unterschiede zu Flash

Flex hat mehrere Bestandteile, die als Framework auf die Technik der Adobe Flash-Plattform aufsetzen.

### MXML und Actionscript

Eine Flex-Anwendung wird mit Hilfe der Auszeichnungssprache MXML für die Benutzeroberfläche und der Programmiersprache ActionScript für die Anwendungslogik entwickelt. MXML basiert auf XML, mit der ein Entwickler die Zusammensetzung der Benutzeroberfläche aus sichtbaren und unsichtbaren Komponenten beschreibt. Der Flex-Compiler übersetzt in einem Zwischenschritt die MXML-Dateien in ActionScript-Quelldateien, die im Weiteren zu einer Flashdatei kompiliert werden. Der Entwickler kann die Benutzeroberfläche daher auch ohne MXML teilweise oder komplett in ActionScript imperativ beschreiben. Änderungen an der Zusammensetzung der Benutzeroberfläche sind deshalb auch während der Laufzeit möglich.

### LiveCycle Data Services

Die LiveCycle Data Services (vormals Flex Data Services) sind die Serverkomponente aus der Flex-2-Produktfamilie. Über diesen Dienst kann die Flexanwendung andere Serveranwendungen (zum Beispiel Java-Anwendungen) ansprechen. Teile davon sind unter der Bezeichnung BlazeDS Open Source bekannt.

### Flash Builder

Der Flash Builder ist die integrierte Entwicklungsumgebung von Flex und basiert auf Eclipse. Mit ihr können vollständige und komplexe ActionScript-Projekte, sowohl für den Einsatz auf Websites als auch für den Desktop entwickelt werden. Grafische Oberflächen werden in Flash Builder mit der XML-basierten Sprache MXML beschrieben, wobei der Flash Builder auch eine Design View von MXML-Code zulässt, mit der die mausunterstützte Komposition von Benutzeroberflächen möglich ist. Der Flash Builder ist kostenpflichtig und ist in einer Standard und einer Professional Version verfügbar, die sich durch den Umfang der verfügbaren Komponenten zur Datenverarbeitung und durch das Vorhandensein bestimmter Profiling-Werkzeuge unterscheiden. Die Professional Version ist für Schulen jedoch kostenlos (Adobe Flash Builder Pro for Education).
Adobe hat angekündigt, dass im Rahmen der Übergabe von Flex an die Apache Software Foundation die Design View des Flash Builders nicht mehr weiterentwickelt wird.

### Flex-Charting-Komponenten

Die Flex-Charting-Komponenten (Data Visualization) sind eine Erweiterung des Flex SDK. Mit diesen Komponenten können in einfacher und optisch ansprechender Weise Diagramme dargestellt werden. Die Charting-Komponenten sind ab der Version 4 enthalten (vorher nur mit Flex Builder 3 Professional).

## Geschichte
### Flex 2

Der Flex Builder 1.5 baute noch auf Dreamweaver MX 2004 auf. Ab Version 2.0 basiert der Flex Builder auf Eclipse 3.1. In dieser Version ist es nicht mehr erforderlich, die Flex-Anwendungen von einem Server kompilieren zu lassen. Die Kompilierung übernimmt nun die integrierte Entwicklungsumgebung oder der Kommandozeilen-Compiler des Flex SDK. Mit Flex 2 wurde zudem ActionScript 3 eingeführt.

### Flex 3

Am 25. Februar 2008 veröffentlichte Adobe Flex 3. Das SDK selbst ist nun als kostenloser Download verfügbar. In Flex 3 neu hinzugekommen sind hauptsächlich die Unterstützung von Adobe AIR sowie Funktionen für Profiling und Refactoring.

### Flex 4

Adobe hat Flex 4 (Codename Gumbo) im März 2010 veröffentlicht. Neu ist die „Spark“ genannte Komponentenarchitektur und die Unterstützung des Austauschformats FXG, die zum Release von Adobe Flash Catalyst einen integrierten Arbeitsfluss ermöglichen soll. Mit „Spark“ wurde das Layoutmodell erneuert und erlaubt nun die Anwendung von 2D- und 3D-basierten Animationen auf Komponenten sowie die automatische Umkehrung von Übergängen, den Einsatz von Pixel Bender-Filtern und keyframebasierte Animationen. Das Status-Feature (Viewstates), das verschiedene Zustände der Anwendung ermöglicht, wurde verbessert. Die Compilerleistung wurde optimiert. Das ASDoc-Werkzeug zur Dokumentation von Anwendungen unterstützt nun ASDoc in MXML-Dateien. Die DataBinding-Funktion unterstützt jetzt die bidirektionale Kommunikation und Veränderung von Daten. Die mit Flash Player 10 verbesserte Text-Engine wurde in Flex integriert. Die HTML-Vorlagen zur Einbettung von Flex-Anwendungen in HTML-Code basieren nun auf der Open-Source-Methode SWFObject.

### Weiterentwicklung von Flex

Adobe hat das Flex SDK inklusive der Spark genannten Komponenten und des neuen Falcon-Compilers an die Apache Software Foundation abgegeben, wo es aktiv weiterentwickelt wird. Die Weiterentwicklung des MXML-Designers im Flash Builder, des in der Creative Suite enthaltenen Tools Adobe Flash Catalyst sowie der Introspektion genannten datenzentrierten Entwicklerfeatures wurde eingestellt. Darüber hinaus will Adobe die eigenen Runtime Shared Libraries, die das Flex-Framework enthalten, nicht mehr signieren. Im Unterschied zu RSLs von Drittentwicklern waren die RSLs von Adobe vorkompiliert und digital signiert, da der Adobe Flash Player sie so allen gleichzeitig laufenden Anwendungen, unabhängig von ihrer Domain, zur Verfügung stellen kann. Eigene RSLs konnten nur von Anwendungen der gleichen Ursprungsdomain gleichzeitig verwendet werden.

### Ende des Flash Players

Nachdem der Adobe Flash Player zum Ende des Jahres 2020 endgültig aufgegeben wurde, hat auch Apache Flex die Ausgabe von Inhalten für den Browser eingestellt. Die Ausgabe für Anwendungen der Adobe-AIR-Plattform für Desktops und bestimmte Mobilgeräte steht weiterhin zur Verfügung. Apache Flex empfiehlt für ihren Einsatz im Browser die Entwicklung einer Applikation in Apache Royale, eine Entwicklungsumgebung, aus der die Herstellung von Applikationen für alle Plattformen aus einer Codebasis von MXML, CSS und ActionScript 3 (welches in JavaScript umgewandelt wird) möglich werden soll.

## Vor- und Nachteile von Flex-Anwendungen
### Vorteile

* Mit Flex entwickelte Anwendungen liefen auf allen Plattformen, die eine Version des Flash Players installiert haben, gleich. Der Flash Player stand für viele Betriebssysteme zur Verfügung, daher galten Flex-Anwendungen als plattformunabhängig.
* Nach dem Laden der Anwendung werden nur noch Daten über das Netzwerk getauscht, die der Entwickler als Geschäftsdaten der Anwendung vorsieht.
* Das Flex SDK ist quelloffen (Open Source) und seit Januar 2013 ein Top-Level-Projekt der Apache Software Foundation.
* Kostenlose Middleware für das Action Message Format (AMF) ist für alle bekannten Websprachen vorhanden (z. B. BlazeDS für Java, FluorineFX für .NET, AMFPHP für PHP, WebORB für Ruby).

### Nachteile

* Die integrierte Entwicklungsumgebung Flash Builder war bei Adobe kostenpflichtig. Es existieren jedoch alternative Entwicklungsumgebungen, wie FlashDevelop. Nach der Übernahme durch Apache wurden einige Features in der nun quelloffenen Entwicklungsumgebung eingestellt.
* Die LiveCycle Data Services waren für mehr als eine CPU kostenpflichtig.
* Die HTML-Ausgabe wurde nur unzureichend unterstützt. Die Unterstützung hat sich mittlerweile verbessert.
* Der Flash Player für die Ausführung von Flex-Anwendungen im Browser wurde mittlerweile endgültig eingestellt.
* Die Fähigkeiten der Flash-Plattform, insbesondere im Multimedia-Bereich, sind unter Adobe AIR nur eingeschränkt verfügbar.

## Versionsgeschichte

| 1.0 | März 2004 |
| 1.5 | Oktober 2004 |
| 2.0 | 28. Juni 2006 |
| 3.0 | 25. Februar 2008 |
| 4.0 | 22. März 2010 |
| 4.5 | 3. Mai 2011 |
| 4.6 | 30. November 2011 |
| 4.8 | 25. Juli 2012 |
| 4.9 | 27. Dezember 2012 |
| 4.9.1 | 28. Februar 2013 |
| 4.10 | 4. August 2013 |
| 4.15 | 11. Januar 2016 |
| 4.16 | 14. März 2017 |