3.3    JavaScript Image Linker Toolkit



Der JaSIL.Toolkit übersetzt Java Anwendungen in JavaScript. Der Toolkit besteht derzeit aus drei Komponenten: JaSIL.Self übersetzt Java Klassen und erzeugt daraus ein JavaScript Programm, JaSIL.GUI wird verwendet um GUIs zu entwickelt, die auf dem Document Object Model (DOM) basieren und JaSIL.Harmony ist ein auf Apache Harmony basierender JDK für JavaScript. Das vom Linker erzeugte Programm enthält nur die referenzierten Klassen, Felder und Methoden.

Das JaSIL Projekt bietet die Möglichkeit preemitve Java Threads mit JavaScript in Clients von Web-Applikationen zu verwenden. Das beinhaltet die Entwicklung eines Toolkits, mit dem solche Clients sowohl als JavaScript Code, als auch als Java-Applets laufen können.

JaSIL.Self übersetzt Bytecode in JavaScript und verwendet daher einen allgemeinerer Ansatz als ähnliche Projekte mit speziellen Java Front-Ends. Ein Thema ist daher die Anwendung von Techniken für die Optimierung und das Dekompilieren von Bytecode. Im Prinzip sollte es möglich sein, JaSIL.Self zu verwenden, um auch weitere Sprachen, deren Compiler Bytecode erzeugen, in JavaScript zu übersetzen.


• Motivation für die Übersetzung von Java in JavaScript

JavaScript ist eine funktionale Sprache, die in allen populären Web-Browsern verfügbar ist. Auf diese Weise ist diese Sprache eine der weltweit meistgenutzten Plattformen. Java ist eine populäre objektorientierte Programmiersprache mit einem starken Typkonzept, die ebenfalls auf vielen verschieden Plattformen verfügbar ist. Sehr gute IDE Unterstützung erlaubt es EntwicklerInnen auf effiziente Weise komplexe Java Anwendungen zu erzeugen und zu warten. Java auf JavaScript zu portieren, sollte die Entwicklung von gut skalierbaren Web-Anwendungen mit smarten Clients, die benutzerfreundlicher sind und den Server entlasten, einfacher und effizienter machen.


• Java/JVM Kompatibilität

Wenn die Ausführungsgeschwindigkeit von JavaScript beeinflußt wird, bietet JaSIL.Self Optionen für mehr oder weniger Java/JVM Kompatibilität des generierten JavaScript Codes. So ist die Unterstützung für preemtive Java Threads, einschließlich Synchronisierung optional. Derartige Threads sind vollständig durch Software realisiert und bieten kein echtes hardwarebasiertes Multiprocessing. Es ist gegenwärtig nicht beabsichtigt dynamisches Laden von Klassen oder clientseitig Reflection zu unterstützen.

Anwendungen, die mit JaSIL.GUI und JaSIL.Harmony entwickelt worden sind, können auch als Java-Applets ausgeführt werden. Dies beruht auf dem Design von JaSIL.GUI, welches eine DOM-Bridge sowohl für JavaScript, als auch für Java-Applets anbietet. Abhängig vom Java-Plugin ist mit Applets echtes hardwareunterstütztes Multiprocessing möglich. Die Java-Applets verwenden den JDK von SUN, dessen API kompatibel mit JaSIL.Harmony ist.

Die Applet Kompatibilität kann verwendet werden, um Anwendungen, die mit dem JaSIL.Toolkit entwickelt worden sind, auch unter den Bedingungen der JVM Implementierung eines Java Plugins zu testen.


• Eine erste Anwendung mit JaSIL

Diese Web-Site kann in zwei verschieden Formen gestartet werden. Beide Versionen wurden aus dem gleichen Java Sourcecode erstellt.




• Ein Beispiel mit Threads

Über untenstehenden Pushbutton wird ein Dialog geöffnet und eine einfache Wortzählfunktion gestartet. Es wird eine Datei vom Server gelesen, die Anzahl der einzelnen Worte in der Datei ermittelt und das Resultat in einer Tabelle angezeigt. Das Schließen des Dialogs beendet die Funktion. Beide Versionen - JavaScript und Java-Applets - verwenden ein Thread mit niedriger Priorität für diese Aufgabe.

Durch die Verwendung von Threads bleibt die GUI reaktiv, der Dialog kann bewegt oder auf das WEB-Dock minimiert werden und die Tabelle wird permanent aktualisiert. Java EntwicklerInnen können die Threadkonzepte verwenden, die ihnen bereits vertraut sind. Zu beachten: Das System unterstützt Threads mit Prioritäten. GUI Aktivität kann das Worte zählende Thread bremsen.

Würde man die Funktion ohne Threads im Vordergrund ausführen, so wäre das GUI blockiert und der Browser würde regelmäßig lästige Nachrichtenfenster anzeigen, weil ein Script zu lange läuft. Die Tabelle würde nur aktualisiert werden, wenn eine dieser Nachrichten angezeigt wird. Um dieses Verhalten zu beseitigen, wäre zusätzlicher Programmieraufwand notwendig. Eine komplexe Funktion in kleinere Einheiten zu unterteilen kann eine nicht triviale Aufgabe sein und erhöht den Entwicklungs- und Wartungsaufwand.


• Ähnliche Projekte