Java Plug-in
# Java Plug-in

Das Java Plug-in ist eine Softwarekomponente, mit der man Java-Applets in einem Webbrowser ablaufen lassen kann.

Es stellt die Verbindung zwischen verschiedenen Browsern (Mozilla Firefox, Mozilla, Internet Explorer, Apple Safari, Netscape Navigator, Opera) und dem auf dem Computer installierten Java Development Kit (JDK) dar. Damit wird es möglich, durch <object>- oder <applet>-Tags in einer HTML-Seite Java Applets zu starten. Der Google Chrome Browser unterstützt ab Version 45 (September 2015) die für das Ausführen von Java Applets benötigte Plug-in-Architektur NPAPI nicht mehr.

## Aufbau

Das Java Plug-in besteht grundsätzlich aus einem nativen und einem in Java geschriebenen Codeanteil. Der native Codeanteil stellt die Verbindung zu dem jeweiligen Browser her und ist im Falle des Internet Explorers z. B. ein ActiveX Control (jpishare.dll, jpicom32.dll, RegUtils.dll, jpiexp32.dll, npjpi142_08.dll). Der Java-Code-Anteil befindet sich in einem Java Archive namens „plugin.jar“.

## Initialisierung

Der Start bzw. die Initialisierung des Java-Applets erfolgt mittels des Plugins in einem dreistufigen Prozess. Dieser Ablauf soll hier am Beispiel des Internet Explorers und einer Seite mit <object>-Tag erläutert werden.

* Der Browser parst die HTML-Seite und startet das zu dem <object>-Tag per CLSID angegebene ActiveX Control. Dadurch initialisiert sich der C++ Teil des Java Plugins. Dieser lädt die Java Virtual Machine der entsprechenden Plattform als Bibliothek (JVM.DLL oder libjvm.so) in den Speicher und startet diese durch das JNI Invokation Interface.
* Der native Teil übergibt die Kontrolle an den Java Teil (AppletViewer.initEnvironment) und dieser initialisiert seinen Zustand. Hier werden z. B. browserabhängige Klassen geladen, verschiedene Lokationen nach Einstellungsdateien abgesucht, der JarCache initialisiert und auch die Java-Konsole gestartet. Sämtliche Applets laufen in einer eigenen Thread-Group. Die Parameter des Tags (archive, codebase usw.) werden dem Native Code mittels Windows PropertyBags übergeben. Der Java-Code bekommt diese dann aber auf jeder Plattform als eine Java HashMap zugestellt.
* Die Klasse IExplorerPluginObject in der nun aktivierten JVM wartet auf zwei Callbacks (containerReady, frameReady) die dieser Komponente signalisieren, das der Internet Explorer bereit ist. Nun werden die Archive des Applets von mehreren Download Threads parallel geladen. Abschließend beginnt der Lebenszyklus des Applets durch Aufruf der init- und start-Methoden.
