Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  2.2.1 Verwendung von.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
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 -
Internetzugriff mit Strings und Streams
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Ausnahmen HS Merseburg (FH) WS 06/07.
Daten Anzeigen und Ausdrucken Zu Zeigende Daten (z.B. Studentenplan) Daten in XML müssen geparst und in PDF- Format umgewandelt werden. Dazu iTEXT Bibliothek.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
SWITCH - Anweisung.
Verzweigung oder bedingte Anweisung Weiter mit PP.
IF-ELSE-IF-Ketten Weiter mit PP..
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
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 Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
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 Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Datenströme DVG Datenströme.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Bestimmung des ggT zweier Zahlen
Verzweigung.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Socket-Programmierung
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Objektorientiertes Konstruieren
Optimale Ursprungsgerade
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Robuste Programme durch Ausnahmebehandlung
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Netzwerk - Programmierung
Dynamisches Laden von Klassen
 Präsentation transkript:

Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von C-Funktonen in Java Programmen  Zugriff auf Methoden von Java-Objekten in nativem Kode  Zugriff auf Attribute von Java-Objekten in nativem Kode  Ausnahmebehandlung  JNI in Multithread-Anwendungen  Aufruf der JVM in nativen Anwendungen

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung  Der vom Betriebssystem initiierte Prozess, der durch den Aufruf eines Java- Programms, erzeugt wird, hat eine Ablaufumgebung, auf die das Java- Programm zugreifen kann.  Der Zugriff erfolgt über Objekte der Klassen Process und Runtime, die von der JVM instanziiert werden.  Die aktuelle Umgebung eines Java-Programms erhält man durch Aufruf der Methode getRuntime, die ein Process-Objekt zurück liefert  Dieses Objekt hat Zugriff auf die Standard-Ein- und -Ausgabe und Fehler- Ströme der Ablaufumgebung.  Beispiel: Java-Programm, das ein Betriebssystem-Kommando ausführt

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung 1. // Exec.java 2. import java.io.*; 3. public class Exec { 4. public static void main(String args[]) { 5. try { // create new process, exec command and print output 6. // of command line by line 7. String line; 8. Process p = Runtime.getRuntime().exec(args); // new process 9. BufferedReader in = // pipe with stdout 10. new BufferedReader // from p 11. (new InputStreamReader(p.getInputStream())); 12. while ((line = in.readLine()) != null) { 13. System.out.println(line); 14. } 15. in.close(); 16. } 17. catch (Exception err) { 18. err.printStackTrace(); 19. } 20. } // main 21. }

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung 1. // Exec.java 2. import java.io.*; 3. public class Exec { 4. public static void main(String args[]) { 5. try { // create new process, exec command and print output 6. // of command line by line 7. String line; 8. Process p = Runtime.getRuntime().exec(args); // new process 9. BufferedReader in = // pipe with stdout 10. new BufferedReader // from p 11. (new InputStreamReader(p.getInputStream())); 12. while ((line = in.readLine()) != null) { 13. System.out.println(line); 14. } 15. in.close(); 16. } 17. catch (Exception err) { 18. err.printStackTrace(); 19. } 20. } // main 21. } $ java Exec ps -ao "pid ppid command" PID PPID COMMAND login -pf as bash java Exec ps -ao pid ppid command /bin/ps -ao "pid ppid command" $

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung  Genauso, wie das Java-Programm lesend mit einem erzeugten Prozess kommunizieren kann, ist es auch möglich, die Standardeingabe eines erzeugten Prozesses mit Daten zu bestücken.  Beispiel: Arithmetischen Ausdruck vom Programmaufruf senden an bc, das den Ausdruck auswertet und das Ergebnis wieder an das Java-Programm mit dem o.a. Mechanismus zurückgibt.  Verwendet wird das Gegenstück zu getInputStream(), die Methode getOutputStream(), um dem Prozess über seine Standard-Eingabe Daten zu senden. $ java Bc ( )*5*2 10 $

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung 1. // Bc.java 2. import java.io.*; 3. public class Bc { 4. public static void main(String args[]) { 5. try { // create new process, exec bc and print output 6. String line; 7. Process p = Runtime.getRuntime().exec("bc"); // new process 8. BufferedReader in = // pipe with 9. new BufferedReader // stdout from p 10. (new InputStreamReader(p.getInputStream())); 11. BufferedWriter out = // pipe with 12. new BufferedWriter // stdin from p 13. (new OutputStreamWriter(p.getOutputStream())); 14. out.write("scale=2\n"); // some inits for bc 15. out.write(args[0],0, args[0].length()); // expression 16. out.write(’\n'); // bc starts eval 17. out.flush(); 18. out.close(); // bc is waiting to read from pipe 19. // program would hang iff not closed 20. // because in.readLine could not terminate 21. while ((line = in.readLine()) != null) { 22. System.out.println(line); 23. } 24. in.close(); 25. } catch (Exception err) {err.printStackTrace(); } 26. } // main 27. } $ java Bc ( )*5*2 10 $

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung  In Unix wird jedem Prozess ein Exit-Status zugeordnet, der Auskunft über die Art der Termination des Prozesses gibt. Der Integer-Wert Null bedeutet dabei normalerweise, dass ein Prozess fehlerfrei terminiert, ein von Null verschiedener Wert drückt eine Beendigung im Fehlerfall aus. Ein Java-Programm kann auf den Exit-Status des von ihm erzeugten Prozesses mit der Methode exitValue der Klasse Process zugreifen.  Eine weitere Methode dieser Klasse ( destroy ) erlaubt es, einen erzeugten Prozess zu beenden.  Ein Prozess hat eine Ablaufumgebung, in der Umgebungsvariable Werte annehmen können. Z.B. zeigt die Variable HOME in Unix auf das Standard- Verzeichnis eines angemeldeten Benutzers. Durch das Unix-Kommando env kann man sich die Umgebungsvariablen anzeigen lassen. Beispiel: Umgebung des erzeugten Prozesses bestimmen

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung 1. // Exec1.java 2. import java.io.*; 3. public class Exec1 { 4. public static void main(String args[]) { 5. StringBuffer cmdLine = new StringBuffer(args[0]); 6. for (int i=1; i<args.length; i++) 7. cmdLine = cmdLine.append(" ").append(args[i]); 8. try { // create new process, exec command and print output 9. String line; 10. // Environment for new process 11. String[] env = {"NAME=as", new String("HOST=hal")}; 12. Process p = Runtime.getRuntime().exec(cmdLine.toString(), 13. env); // Environment 14. BufferedReader 15. input = new BufferedReader 16. (new InputStreamReader(p.getInputStream())); 17. while ((line = input.readLine()) != null) { 18. System.out.println(line); 19. } 20. input.close(); 21. if (p.exitValue() != 0) // process terminated normaly? 22. System.out.println("Command terminated with exit code " p.exitValue()); 24. } catch (Exception err) {} 25. } 26. } $ java Exec1 env NAME=as HOST=hal $ java Exec1 cat DateiExistiertNicht Command terminated with exit code 1 $

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung  Wenn ein Java-Programm ausgeführt wird, so wird es von der JVM in einem Betriebssystemprozess verarbeitet. Jeder Prozess kann asynchron eintretende Ereignisse empfangen. Diese werden je nach Betriebsystem unterschiedlich behandelt. In Unix reagiert ein Prozess auf ein eintreffendes Signal mit einem je nach Signal spezifizierten Default-Verhalten. Will man das Verhalten per Programm beeinflussen, muss man einen Signal- Handler schreiben, der den gewünschten Kode ausführt, wenn ein Signal eintrifft.  Die Behandlung von Signalen im JVM-Prozess erfolgt mehrstufig.  Wenn der JVM-Prozess ein Signal empfängt, wird zunächst geprüft, ob es für diesen Prozess eine eigene Signalbehandlungsroutine gibt.  Ist dies der Fall, wird das Signal durch ihn behandelt, ansonsten wird es an die JVM weitergereicht.  Damit ein Signal von der JVM mit einem in Java geschriebenen Signal-Handler abgefangen werden kann, kann die Klasse sun.misc.Signal verwendet werden. Eine Java Signalbehandlung unterscheidet sich nicht viel von einem Signal-Handler der z.B. in C realisiert ist. Der Unterschied ist, dass ein eintreffendes Signal bewirkt, dass die JVM einen neuen Thread erzeugt, der die Signalbehandlung durchführt.  Beispiel: Abfangen von TERM

Alois Schütte Advanced System Programming Interprozeßkommunikation: JVM Ablaufumgebung 1. // SignalDemo.java 2. import sun.misc.Signal; 3. import sun.misc.SignalHandler; 4. class SignalDemo { 5. public static void main(String[] args) { 6. try { // Install signal handler 7. Handler h = new Handler("TERM");// while (true) { 9. System.out.println("main"); 10. Thread.sleep(1000); 11. } 12. } catch (Exception e) { 13. System.out.println("AppWrap exception "+e); 14. } 15. } 16. } 17. class Handler implements SignalHandler { 18. Handler (String signalName) { 19. Signal signal = new Signal(signalName); 20. Signal.handle(signal,this); // handle signal 21. } 22. // Signal handler method 23. public void handle(Signal sig) { 24. System.out.println("Signal handler called for signal "+sig); 25. } 26. }

Alois Schütte Advanced System Programming Interprozeßkommunikation: JNI