Eine Entwicklungsumgebung im Web IFC-Seminar WS98/99 20.01.1999 Holger Otte.

Slides:



Advertisements
Ähnliche Präsentationen
programmiert April-Juni 2003 von Knut Riechmann
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
der Universität Oldenburg
Imperative Programmierung -Entwicklungswerkzeuge
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Enno Rehling und Roger Butenuth, Uni-GH Paderborn: Arminius: Software für Linux-basierte SCI-Cluster Arminius: Software für Linux-basierte SCI-Cluster.
Internetzugriff mit Strings und Streams
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Das JavaCard-Betriebssystem
Reflection API ETIS SS04.
Reflection API ETIS SS05.
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Datenströme DVG Datenströme.
JDBC EDV JDBC.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Seminar aus Softwareentwicklung: Inside Java and .NET
Java und Eclipse.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Betriebssysteme Übung Tutorium „System Calls & Multipgrogramming“
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Parallelisierung für Multiprozessor-Maschinen
Javelin Internet-based parallel computing using Java.
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
JAVA - Einführung. © Übersicht Hintergrund und Geschichte Wie sieht ein JAVA Programm aus ? Was ist ein JAVA Programm ? Wie schreibt/übersetzt.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
Dynamisches Laden von Klassen
 Präsentation transkript:

Eine Entwicklungsumgebung im Web IFC-Seminar WS98/ Holger Otte

Ziel der Arbeit Ziel: Ausführung von Java-Programmen in einem Web-Browser Start sowohl von Kommandozeile als auch in Browser Zugriff auf System.in und System.out ohne Zugriff auf native Methoden Shell Erweiterungen: Quellcode ansehen, editieren und abspeichern, neu übersetzen

Inhalt Dynamisches Zuladen und Ausführen eines Java-Programms Umlenken der Standardeingabe und -ausgabe ClassLoader Aufbau des Systems –Prozeßverwaltung –Virtuelles Dateisystem –Terminaltreiber Abschlußbetrachtung Ausblick

Dynamisches Zuladen und Ausführen eines Java-Programms Reflection-API try { Class cl = Class.forName(className); Method m = cl.getMethod ("main", new Class[] {args.getClass()}); m.invoke (null, new Object[] {args}); } catch (ClassNotFoundException e) { } catch (InvocationTargetException e) { } catch (IllegalAccessException e) { } catch (NoSuchMethodException e) { }

Umlenken der Standardeingabe und -ausgabe Methoden der System-Klasse: –setIn(InputStream in) –setOut(PrintStream out) –setErr(PrintStream err) obwohl System.in, System.out, System.err als public final deklariert!? Umlenken auf TextArea => Terminaltreiber Implementierung mit Methoden der Klasse TextArea: –append(String str) –setCaretPosition(int position) –addKeyListener(KeyListener l)

Nachteile/Probleme der vorgeschlagenen Lösung Zugriff auf Standardeingabe und -ausgabe über Klasse FileDescriptor Probleme bei parallel betriebenen Programmen: –alle Applets eines Browser laufen in einer virtuellen Maschine –nur ein System.in und ein System.out für alle Applets –Probleme sowohl bei zwei oder mehr Terminals, als auch –in einem Terminal mit Hintergrundbetrieb Laden von Klassen mit Class.forName() unflexibel

Verbesserungsvorschlag 1: Verteiler-InputStream Idee: –System.in auf Verteiler-InputStream umlenken –Verteiler-InputStream handelt in Abhängigkeit vom lesenden Thread –entsprechender Verteiler-OutputStream Programm 1 Programm 2 Programm 3 System.in read()

Verbesserungsvorschlag 1: Verteiler-InputStream Problem: –Unterklassen von Reader synchronisieren in Methode read auf Objekt lock –lock wird in InputStreamReader auf InputStream gesetzt –mit new InputStreamReader(System.in) synchronisiert InputStream auf System.in ==> liest ein Thread, so kann kein anderer mehr lesen ==> Idee unbrauchbar

Wie lädt die virtuelle Maschine dynamisch Klassen zu? Klasse ClassLoader bzw. Unterklasse von ClassLoader Zu Klassenname Binärform finden ==> Datei, URL, Speicher Virtuelle Maschine: interne Tabelle mit Spalten –Klassenname –ClassLoader –Class-Objekt Zwei Klassen sind identisch, falls : –Klassenname identisch und –ClassLoader identisch Klasse referenziert weitere Klassen => gleicher ClassLoader

Implementierung ClassLoader Unterklasse der abstrakten Klasse java.lang.ClassLoader Methoden: –implementieren: Class loadClass(String name) –zurückgreifen auf: Class defineClass(String name, byte data[], int offset, int length) void resolveClass(Class c) Class findSystemClass(String name)

Verbesserungvorschlag 2: ClassLoader ersetzt Klasse System ClassLoader lädt statt Systemklassen eigene Versionen dieser Klassen eigene Klasse System: –jedes Programm bekommt seine eigene Klasse System –System.in, System.out, System.err können für jedes Programm unabhängig gesetzt werden Problem: –Java Systemklasse greift auf alte Systemklasse zu

Möglichkeiten durch den Einsatz eines eigenen ClassLoaders Klassen können flexibel zugeladen werden: –von lokaler Platte –übers Netz (URL) –aus Speicher Programme können parallel ausgeführt werden: –jedes Programm bekommt seine eigene System-Klasse weitere System-Klassen können durch eigene ersetzt werden: –Klassen des java.io - Pakets => virtuelles Dateisystem –Runtime-Klasse ==> Simulation Komponenten eines Betriebssystems

System - Aufbau Java Programme Eigene System-Klassen virtuelles Datei- system Prozeß- verwal- tung Terminal- Treiber VM

Prozeßverwaltung Aufgaben Sicherheitsbeschränkungen, Thread eines Prozesses darf nicht: –auf Speicherbereich eines anderen Prozesses, d.h. auf dessen Objekte und Methoden zugreifen –Threads eines anderen Prozesses manipulieren –unbeschränkt auf System-Klassen zugreifen (Bsp: System.exit()) Prozeß besitzt eigene Standardeingabe und -ausgabe, Dateiverbindungen kontrollierendes Terminal Vererbung

Prozeßverwaltung Realisierung Sicherheitsbeschränkungen ==> Sandbox-Modell innerhalb der Sandbox ist alles erlaubt, Zugriffe auf Umgebung enden mit SecurityException Wesentliche Konzepte: –ClassLoader –SecurityManager

Prozeßverwaltung SecurityManager befragt, bevor Systemklasse potentiell sensible Operation ausführt ggf. Auslösen SecurityException Beispiel: Methode canRead() in Klasse java.io.File public boolean canRead() { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkRead(path); } return canRead0(); } ==> SystemSecurityManager

Prozeßverwaltung SystemSecurityManager Netzwerkzugriff Zugriffe auf das lokale Dateisystem Virtuelle Maschine und Umgebung Zugriff auf Threads Anlegen eines ClassLoaders

Prozeßverwaltung Implementierung Klasse SystemSecurityManager Klasse Process: –ProcessClassLoader –ProcessManager –ThreadGroup für User-Threads Klasse ProcessManager –Verwaltung Prozesse –Signale vom kontrollierenden Terminal Klasse JIDProcess –Schnittstelle für Anwendungen

Prozeßverwaltung Wann ist ein Prozeß zu Ende? Organisation von Threads in ThreadGroups Prioritäten Ende der Virtuellen Maschine: alle nicht Dämon-Threads beendet Dämon-Threads –unerheblich für Frage nach dem Ende der virtuellen Maschine –Bsp.: Garbage Collection –Methode setDaemon() Ende eines Prozesses: alle nicht Dämon-Threads des Prozesses beendet

Prozeßverwaltung Lebenszyklus eines Threads new Thread() VMThreadThreadGroup add() setPriority() run() exit()remove() start() Threadzustände: deaktiviertaktiviertzerstört

Prozeßverwaltung Lösungsvorschläge Ermittlung Prozeßende Regelmäßige Überprüfung –Nachteil: Prozeßende erst mit Verzögerung festzustellen Eigene Thread-Klasse –Problem: Threads, die in Systemklassen gestartet werden Einklinken in remove-Methode der ThreadGroup –Nachteil: Dämon-Threads werden erfaßt oder...

Prozeßverwaltung Realisierung: Ermittlung Prozeßende Join() WaitThread Thread join() WaitThreadGroupUserThreadGroup ProcessSecurityManager System Security Manager checkAccess()

Virtuelles Dateisystem Orientierung an Klassen aus dem Paket java.io.*: –File –FileDescriptor –FileInputStream, FileOutputStream Aufbau des virtuellen Dateisystems: –FileSystem –FD, Filp –VFile, VDirectory VFile: –Datei auf Festplatte –Datei auf bel. URL –Datei im Speicher der Virtuellen Maschine –Terminal

Abschlußbetrachtung Realisiert: –Ausführen von Java-Programmen im Browser –Parallelbetrieb mehrerer Programme –Quellcode ansehen, verändern, speichern Problematisch –Virtuelles Dateisystem –Compilieren von Java-Klassen ==> Java-Compiler in Java geschrieben ==> Quellen von SUN

Ausblick Lösung Compilerproblem Ausbau virtuelles Dateisystem –Schnittstellen zu File-Servern –Benutzer-Management –verteiltes Dateisystem verteilte Prozesse Ausbau Entwicklungsumgebung –Debugger –Interface-Builder