WikiDer > API isolieren
Das API isolieren oder Anwendungsisolations-API ist ein API innerhalb der Java Plattform. Diese API erweitert die Definition der Java Virtual Machine (JVM) aus, damit mehrere JavaProgramme kann gleichzeitig laufen. Zum Zeitpunkt dieses Schreibens wurde die Isolate API von der Java-Community-Prozess wie JSR-121, aber noch nicht in Implementierungen der JVM.
Anwendungsisolierung
Seit der Einführung des Programmiersprache Java ist der "normale" Weg, ein Java-Programm mit einer JVM auszuführen. Dieser sogenannte "Container" für Java-Anwendungen liest eine Sammlung von Klassen im einzigartigen Format einer Java-Klasse ein, übersetzt den Code in Anweisungen für die darunterliegende Hardware und führt diese aus. Dieselbe JVM ist auch eine Brücke zwischen dem Programm und einigen spezifischen Teilen der zugrunde liegenden Plattform (Dienste innerhalb der Betriebssystem, Hardware wie Netzwerkkarten, Mäuse, Festplatten, und so weiter).
Dieses System ermöglicht es, ein Java-Programm einmalig zu schreiben und zu kompilieren und das Ergebnis ohne weitere Anpassungen auf (theoretisch) jeder Plattform ausführen zu lassen. Es ermöglicht auch einige angenehme Abstraktionen, die dem Entwickler helfen. Andererseits ist das System recht intensiv in der Nutzung: Eine JVM erfordert eine ziemlich schnelle Prozessor und ziemlich viel Erinnerung reibungslos zu laufen. Aus diesem Grund ist es schade, dass innerhalb einer einzelnen JVM-Instanz nur ein Java-Programm ausgeführt werden kann.
Die Java-Sprachdefinition definiert eine Reihe von Dingen, die innerhalb der JVM eindeutig sind (insbesondere statische Felder). Und darauf aufbauend wurden auch Muster entwickelt, die große, statische Strukturen innerhalb der JVM einführen können (die Singleton Muster im Besonderen und damit verbunden FabrikKlassen). All dies ist innerhalb der JVM garantiert eindeutig und wird von der Sprache als solche behandelt. Aus diesem Grund können zwei Programme, selbst wenn sie nicht miteinander verbunden sind, nicht sicher innerhalb einer einzelnen JVM ausgeführt werden: Die statischen Strukturen in der JVM können dazu führen, dass sie sich gegenseitig beißen, da diese Strukturen innerhalb der gesamten JVM eindeutig sind.
Die Isolate API ändert diese Situation, indem sie die JVM um Segmente erweitert – isoliert - die jeweils völlig unabhängig voneinander sind. Ein Segment hat seinen eigenen isolierten Speicherplatz und auch eine eigene Version jeder Klasse, was auch das Problem der statischen Strukturen löst. Darüber hinaus kann ein Isolat auch Kinderisolate haben (Kinder, die völlig voneinander getrennt sind und im Prinzip nichts voneinander wissen). Die JVM selbst wird dann zu einer virtuellen Maschine, die ein primäres Isolat startet. Und das primäre Isolat kann mehrere Java-Programme ausführen, jedes als eigenes untergeordnetes Isolat. Das ganze sieht dann ein bisschen aus wie ein UnixMaschine, in der Programme als Prozesse auf dem Computer parallel laufen und alle Kinder des drin-Prozess.
Isolate vs. Fäden
Die Beziehung zwischen den neuen Isolaten und denen, die in Java bereits bekannt sind Faden ist auch ungefähr das gleiche wie zwischen einem Unix-Prozess und einem Thread: Ein Isolat hat ein höheres "Gewicht", verlangt mehr von der JVM in Bezug auf Speicherplatz und Prozessorzeit, ist aber strikt vom Rest der Maschine isoliert, während a thread zusammen mit führt andere Threads innerhalb eines einzelnen Isolats aus und teilt mit diesen Threads den Speicher und die Klassendefinitionen dieses Isolats – und ist somit überhaupt nicht von den anderen Threads in diesem Isolat isoliert.
API
Die Isolate API ist an sich recht einfach und definiert nur drei für den Entwickler Klassen (und ein paar Hilfsklassen):
- javax.isolate.Isolate
- Eine Klasse, die Isolate innerhalb einer JVM verbreitet. Für jedes innerhalb einer JVM erstellte und noch nicht beendete Isolat gibt es eine Instanz dieser Klasse innerhalb der JVM. Dadurch ist es möglich, untergeordnete Isolate zu verwalten und mit der JVM über andere Isolate innerhalb der JVM zu sprechen.
- javax.isolate.Link
- Eine Klasse, die die Kommunikation zwischen zwei Isolaten ermöglicht.
- javax.isolate.LinkMessage
- Eine Nachricht zwischen zwei Isolaten.
Wir sehen hier, dass es nicht möglich ist, zwischen zwei Isolaten zu interferieren (z.B. durch statische Strukturen), aber dass es möglich ist, explizite Kommunikation zwischen Isolaten durch Nachrichten (und durch Namen) nicht durch gemeinsamen Speicher). Dies ist die Analogie in der "neuen" JVM von Interprozesskommunikation da es auch innerhalb verschiedener Betriebssysteme existiert. Die Klassen Link und LinkMessage ermöglichen die synchrone Kommunikation zwischen zwei Isolaten (die offensichtlich voneinander wissen müssen), sowohl von Daten als auch einfachen Statusmeldungen. Da die Nachrichten synchron sind, machen sie auch Synchronisation möglich mit dem sogenannten Rendezvous Semantik.
Neben diesem Mechanismus bleiben natürlich die anderen Kommunikationsmechanismen bestehen, die Java bereits kannte (Kommunikation über die Dateisystem, durch RMI, Internetdienste, CORBA, usw.).
Darüber hinaus besteht die API aus einer Reihe von Hilfsklassen; -Klassen, um den Zustand oder die Berechtigung für den Zugriff auf das Isolat anzuzeigen, sowie eine spezielle IsolateException.
| Quellen, Anmerkungen und/oder Verweise |