Unterstützung tzung von Programmiersprachen. von Tobias Schlösser



Ähnliche Dokumente
Mobile und Verteilte Datenbanken

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Remote Method Invocation

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP

Remote Method Invocation

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

Middleware. im Schweinsgalopp

Mobile und Verteilte Datenbanken

Remote Method Invocation

Michael Stumpen Grid Computing. Prof. Dr. Fuhr SS04 Kommunikation. Wide-Area Implementation of the Message Passing Interface

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg

Einführung Verteilte Systeme - Java Threads I -

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Kommunikation. Björn und Georg

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

Kommunikation in verteilten Anwendungen

Client/Server-Programmierung

Client/Server-Programmierung

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Internetanwendungstechnik (Übung)

39 Object Request Brokers. 40 Components of an ORB Stubs and Skeletons Stub

Netzwerkprogrammierung unter Linux und UNIX

Java Remote Method Invocation (RMI)

Java-Programmierung. Remote Method Invocation - RMI

Parallele und Verteilte Systeme

CORBA. Systemprogrammierung WS

SOAP Integrationstechnologie für verteilte Middlewarearchitekturen?

Lebenszyklus von Threads

AVO Übung 4. AspectIX. 18. Januar 2005 (WS 2004) Andreas I. Schmied Universität Ulm Fakultät für Informatik

7 Praktische Aspekte (Wie mache ich...)

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Verteilte Systeme. Verteilte Objektorientierte Systeme II. Prof. Dr. Oliver Haase

39 Object Request Brokers


H.1 FORMI: An RMI Extension for Adaptive Applications H.1 FORMI: An RMI Extension for Adaptive Applications

3.2 Der CORBA-Standard Common Object Request Broker Architecture

Softwareentwicklung in verteilten Umgebungen Middleware Case Studies (Coulouris et al., Kapitel 5 und 19) Dieter Schmalstieg Jens Grubert

Janeva:.NET meets J2EE

Projektgruppe 453: Entwurf eines Managementwerkzeugs zur Verwaltung von Sicherheitsdiensten für komplexe eingebettete Dienstesysteme

Enterprise JavaBeans Überblick

Einführung: Verteilte Systeme - Remote Method Invocation -

Konzepte von Betriebssystem- Komponenten Middleware. Jini. Vortrag von Philipp Sommer

39 Object Request Brokers

-Testen verteilter Anwendungen

Testen nebenläufiger Objekte

Javakurs für Fortgeschrittene

7.1.5 Java RMI Remote Method Invocation ( (

Inhaltsverzeichnis. Zusammenfassung CORBA

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

Komponentenmodelle II

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 30. März 2006

Parallele Prozesse. Prozeß wartet

Grundlagen und Implementation. Jan Kraft

Funktionale und Objekt-Orientierte Programmierkonzepte

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

Übungen zu Softwaretechnik

Modellierung CORBA-basierter Anwendungssysteme mit der UML

Objektorientierte Programmierung

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Threading. Arthur Zaczek. Aug 2015

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden

Modul Software Komponenten 10 Komponentenarchitektur

Remote Methode Invocation (RMI) ETIS SS05

Auszug aus JAX-WS Folien

CLICK TO EDIT MASTER TITLE STYLE

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

Praxis der Programmierung

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Grundlagen der Web-Entwicklung INF3172

Java-Grundkurs für Wirtschaftsinformatiker

Programmierung mit Threads in Java

D.1 Organisatorisches

Die Magie von MBeans und JMX. DOAG 2014 Andreas Chatziantoniou - Foxglove-IT BV

14. Java Klassen. Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung

Inhaltsverzeichnis. Vorwort... Einleitung... Einführung... 1

Corba. Systemprogrammierung WS 08 / Roginer - Fontana - Heinisch 1

Programmieren 2 Java Überblick

Verlagerung von Java-Anwendungen in die Datenbank (Teil I)

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Integration von UIS-Webdiensten

Client/Server-Systeme

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006

Verteilte Systeme - Überblick

Definition Web Service

Praktikum Softwareentwicklung 2

Abbildung 3-1: Clients und Server C+S

Grundlagen der Informatik für Ingenieure I

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

Transkript:

Unterstützung tzung von Programmiersprachen von Tobias Schlösser

Überblick Ubiquitous Supercomputing Anforderungen an Programmiersprachen Grid Computing in Java Higher-level Kommunikationsmöglichkeiten

Ubiquitous Supercomputing Verbindet Aspekte des Ubiquitous (=allgegenwärtig) Computings und des Supercomputings Ziel: Lokale Applikationen nutzen Ressourcen entfernter Supercomputer

Smart Instruments Wissenschaftliche Instrumente Nutzen kann durch Supercomputer erhöht ht werden High-speed Netzwerke ermöglichen Supercomputern viele Instrumente zu versorgen Computational Power der Instrumente steigt

Beispiel Wettersatellit Erstellt Bilder in verschiedenen Wellenlängen ngen Daten: Wettersatellit Bodenstation Supercomputer (Verarbeitung( zu 3D Displaygerät Wissenschaftler verfolgen 3D Bilder in Realzeit Verarbeitung zu 3D-Bild)

Smart Applications Desktop Applikationen Hoch entwickelte User Interfaces, aber nur einfache Berechnungen Anspruchsvollere Berechnungen durch Supercomputer

Beispiel NEOS Network Enable Optimization System Berechnet Optimierungsprobleme Optimierungsprobleme erreichen schnell hohe Komplexität Supercomputer zur Berechnung Desktop Applikation zur Datenübertragung

Collaborative Environments Computersysteme zur Unterstützung tzung der Zusammenarbeit an verschiedenen Orten Große e Vielfalt solcher Systeme Möglichkeit, gemeinsame Dokumente zu nutzen (z.b. Lotus Notes) Freie elektronische Diskussion in geteilten virtuellen Räumen R (z.b. MUD)

Beispiel Mirror Worlds Verhalten einer gesamten Institution Computermodelle interessanter Aspekte der Realität Kommunikation zwischen Erkundenden der Mirror World möglichm Durch Internet nicht mehr nur Modell, sondern auch System selbst

Anforderungen an Kommunikationsmöglichkeiten einer Programmiersprache Asynchronie: Ubiquitous Supercomputing Applikationen benötigen Mechanismen, die Synchronisation nicht erzwingen Symmetrie: Clients und Server gleichberechtigte Partner Gegenseitiger Prozeduraufruf möglichm

Anforderungen an Kommunikationsmöglichkeiten einer Programmiersprache Globale Namen: Referenz auf Objekt Ermöglichen komplexe verteilte Datenstrukturen Globaler Namensraum Globaler Adressraum High Performance: Keine Engpässe Anpassung an komplexe heterogene Systeme

Anforderungen aus universellem Einsatz Einfache Verbreitung Kostengeringes Interface Zugriff auf entfernte Datenquellen Vorbild: Web-Browser

Grundsätzliche Vorteile von Java Objektorientierte Programmiersprache wieder verwendbare Softwarekomponenten Unterstützung tzung in der Softwareentwicklung Vordefinierte APIs,, Bibliotheken, Komponenten Hochentwickeltes GUI Framework Java Interpreter in vielen Browsern integriert

Universeller Einsatz durch Java Plattformunabhängiger ngiger Bytecode Tragbare kompakte Repräsentation Prozess kann Java Bytecode mit Interpreter oder just-in in-time Compiler ausführen Prinzip: write-once once-run-anywhere Attraktive Basis für f r portable Grid Computing

Was kann Java denn nicht? Nur grundlegender Support für f Kommunikation (durch TCP und UDP) Keine higher-level Kommunikationsmechanismen Implementation von Ubiquitous Supercomputing Applikationen schwierig

Was ist Nexus? Kommunikationsbibliothek Unterstützt: tzt: Multithreading Adressraum Management Asynchrone Kommunikation Synchronisation Relativ low-level level Interface, auf das higher- level Kommunikationsmöglichkeiten aufgebaut werden könnenk

Das Nexus Interface Nodes Threads Context Global Pointer Remote Service Request

Das Nexus Interface Thread Thread Thread Thread Thread Thread Context Context Context int j; GP int i; GP GP int i; NODE NODE

Java Binding für f r Nexus Erlaubt Java Programmen Global Pointer zu erstellen und auszutauschen RSR auf entfernten Objekten auszuführen Besteht aus vier Klassen: Nexus GlobalPointer PutBuffer GetBuffer

Beispiel Implementation -Client- public class ExampleClient{ private Nexus nexus; public static void main(string args[]){ ExampleClient n= new ExampleClient(); n.start(args);} public void start(string args[]){ GlobalPointer gp; nexus = new Nexus() args = nexus.init(args,"nx,null); try { gp = nexus.atach( x-nexus://cosmo.mcsanl.gov:1234/"); call_server_handler(gp,10); gp.destroy(); } catch(exception e) e.printstacktrace(); nexus.destroy_curent_context(false) } public void call_server_handler(globalpointer gp,int i){ putbuffer buffer; try{ buffer=gp.init_remote_service_request("server_handler",42); buffer.set_buffer_size(buffer.size_of_int(1),1); buffer.put_int(i); buffer.send_remote_service_request(); } catch(exception e) e.printstacktrace(); }}

Beispiel Implementation -Client- public class ExampleClient{ private Nexus nexus; public static void main(string args[]){ ExampleClient n= new ExampleClient(); n.start(args);} public void start(string args[]){ GlobalPointer gp; nexus = new Nexus() args = nexus.init(args,"nx,null); try { gp = nexus.atach( x-nexus://cosmo.mcsanl.gov:1234/"); call_server_handler(gp,10); gp.destroy(); } catch(exception e) e.printstacktrace(); nexus.destroy_curent_context(false) } public void call_server_handler(globalpointer gp,int i){ putbuffer buffer; try{ buffer=gp.init_remote_service_request("server_handler",42); buffer.set_buffer_size(buffer.size_of_int(1),1); buffer.put_int(i); buffer.send_remote_service_request(); } catch(exception e) e.printstacktrace(); }}

Beispiel Implementation -Client- public class ExampleClient{ private Nexus nexus; public static void main(string args[]){ ExampleClient n= new ExampleClient(); n.start(args);} public void start(string args[]){ GlobalPointer gp; nexus = new Nexus() args = nexus.init(args,"nx,null); try { gp = nexus.atach( x-nexus://cosmo.mcsanl.gov:1234/"); call_server_handler(gp,10); gp.destroy(); } catch(exception e) e.printstacktrace(); nexus.destroy_curent_context(false) } public void call_server_handler(globalpointer gp,int i){ putbuffer buffer; try{ buffer=gp.init_remote_service_request("server_handler",42); buffer.set_buffer_size(buffer.size_of_int(1),1); buffer.put_int(i); buffer.send_remote_service_request(); } catch(exception e) e.printstacktrace(); }}

Beispiel Implementation -Client- public class ExampleClient{ private Nexus nexus; public static void main(string args[]){ ExampleClient n= new ExampleClient(); n.start(args);} public void start(string args[]){ GlobalPointer gp; nexus = new Nexus() args = nexus.init(args,"nx,null); try { gp = nexus.atach( x-nexus://cosmo.mcsanl.gov:1234/"); call_server_handler(gp,10); gp.destroy(); } catch(exception e) e.printstacktrace(); nexus.destroy_curent_context(false) } public void call_server_handler(globalpointer gp,int i){ putbuffer buffer; try{ buffer=gp.init_remote_service_request("server_handler",42); buffer.set_buffer_size(buffer.size_of_int(1),1); buffer.put_int(i); buffer.send_remote_service_request(); } catch(exception e) e.printstacktrace(); }}

Beispiel Implementation -Server- public class ExampleServer implements HandlerInterface, AttachApprovalInterface{ private GlobalPointer this_gp; public void start(string args[]){ nexus = new Nexus(); args = nexus.init(args,"nx,null); register_my_handlers(); this_gp = nexus.global_pointer(this); nexus.allow_attach(1234, this); wait_for_client(); nexus.disallow_attach(1234); this_gp.destroy(); nexus.destroy_current_context(false); } public void register_my_handlers() { Handler h[] = new Handler[2]; h[0] = new Handler( server_handler, 42, Handler.NEXUS_HANDLER_TYPE_THREADED, this, 0); h[1]=new Handler( other_handler, 53, Handler.NEXUS_HANDLER_TYPE_NONTHREADED, this, 1); nexus.register_handlers(h);}

Beispiel Implementation -Server- public class ExampleServer implements HandlerInterface, AttachApprovalInterface{ private GlobalPointer this_gp; public void start(string args[]){ nexus = new Nexus() args = nexus.init(args,"nx,null); register_my_handlers(); this_gp = nexus.global_pointer(this); nexus.allow_attach(1234, this); wait_for_client(); nexus.disallow_attach(1234); this_gp.destroy(); nexus.destroy_current_context(false); } public void register_my_handlers() { Handler h[] = new Handler[2]; h[0] = new Handler( server_handler, 42, Handler.NEXUS_HANDLER_TYPE_THREADED, this, 0); h[1]=new Handler( other_handler, 53, Handler.NEXUS_HANDLER_TYPE_NONTHREADED, this, 1); nexus.register_handlers(h);}

Beispiel Implementation -Server- public class ExampleServer implements HandlerInterface, AttachApprovalInterface{ private GlobalPointer this_gp; public void start(string args[]){ nexus = new Nexus() args = nexus.init(args,"nx,null); register_my_handlers(); this_gp = nexus.global_pointer(this); nexus.allow_attach(1234, this); wait_for_client(); nexus.disallow_attach(1234); this_gp.destroy(); nexus.destroy_current_context(false); } public void register_my_handlers() { Handler h[] = new Handler[2]; h[0] = new Handler( server_handler, 42, Handler.NEXUS_HANDLER_TYPE_THREADED, this, 0); h[1]=new Handler( other_handler, 53, Handler.NEXUS_HANDLER_TYPE_NONTHREADED, this, 1); nexus.register_handlers(h);}

Beispiel Implementation -Server- public class ExampleServer implements HandlerInterface, AttachApprovalInterface{ private GlobalPointer this_gp; public void start(string args[]){ nexus = new Nexus() args = nexus.init(args,"nx,null); register_my_handlers(); this_gp = nexus.global_pointer(this); nexus.allow_attach(1234, this); wait_for_client(); nexus.disallow_attach(1234); this_gp.destroy(); nexus.destroy_current_context(false); } public void register_my_handlers() { Handler h[] = new Handler[2]; h[0] = new Handler( server_handler, 42, Handler.NEXUS_HANDLER_TYPE_THREADED, this, 0); h[1]=new Handler( other_handler, 53, Handler.NEXUS_HANDLER_TYPE_NONTHREADED, this, 1); nexus.register_handlers(h);}

Beispiel Implementation -Server- public class ExampleServer implements HandlerInterface, AttachApprovalInterface{ private GlobalPointer this_gp; public void start(string args[]){ nexus = new Nexus() args = nexus.init(args,"nx,null); register_my_handlers(); this_gp = nexus.global_pointer(this); nexus.allow_attach(1234, this); wait_for_client(); nexus.disallow_attach(1234); this_gp.destroy(); nexus.destroy_current_context(false); } public void register_my_handlers() { Handler h[] = new Handler[2]; h[0] = new Handler( server_handler, 42, Handler.NEXUS_HANDLER_TYPE_THREADED, this, 0); h[1]=new Handler( other_handler, 53, Handler.NEXUS_HANDLER_TYPE_NONTHREADED, this, 1); nexus.register_handlers(h);}

Beispiel Implementation -Server-... public void invoke_handler(string name,int id,int local,object Addr,GetBuffer buf){ switch(local){ case 0: case 1: try { int i = buf.get_int(); server_handler(i); } catch(exception e) e.printstacktrace(); break; }} public GlobalPointer attach_approval(string url) { return(this_gp); } private synchronized void wait_for_client() { try { wait(); } chat(exception e) e.printstacktrace(); }

Beispiel Implementation -Server-... public void invoke_handler(string name,int id,int local,object Addr,GetBuffer buf){ switch(local){ case 0: case 1: try { int i = buf.get_int(); server_handler(i); } catch(exception e) e.printstacktrace(); break; }} public GlobalPointer attach_approval(string url) { return(this_gp); } private synchronized void wait_for_client() { try { wait(); } chat(exception e) e.printstacktrace(); }

Beispiel Implementation -Server-... public void invoke_handler(string name,int id,int local,object Addr,GetBuffer buf){ switch(local){ case 0: case 1: try { int i = buf.get_int(); server_handler(i); } catch(exception e) e.printstacktrace(); break; }} public GlobalPointer attach_approval(string url) { return(this_gp); } private synchronized void wait_for_client() { try { wait(); } chat(exception e) e.printstacktrace(); }

Beispiel Implementation -Server-... public void invoke_handler(string name,int id,int local,object Addr,GetBuffer buf){ switch(local){ case 0: case 1: try { int i = buf.get_int(); server_handler(i); } catch(exception e) e.printstacktrace(); break; }} public GlobalPointer attach_approval(string url) { return(this_gp); } private synchronized void wait_for_client() { try { wait(); } chat(exception e) e.printstacktrace(); }

Nexus im Überblick Kann auf einer großen Breite von Netzwerkcomputersystemen implementiert werden Mechanismen zur Konfiguration und Auswahl von Kommunikationsmethoden Erfüllt Forderungen an Kommunikationsmöglichkeiten

Higher-level Interfaces auf Nexus Ziel: automatische Generierung des Quellcodes: Handler Registrierung Marshalling der Daten IDL: Beschreibt entfernt aufrufbare Methoden IDL-Compiler konvertiert in Java Code

CORBA Common Object Request Broker Architecture Objekt Export Interface in IDL Internet Inter-ORB Protokol (IIOP) Object Request Broker als zentraler Bus Läuft auf allen Plattformen mit implementiertem ORB

RMI JavaSoft Remote Method Invocation Java Interface Definition anstatt IDL Java Remote Method Protocol Nutzt Javas Objekt Serialisierung Namensmechanismus im Server

RMI

Nexus vs. CORBA vs. RMI NEXUS CORBA RMI Asynchronie Symmetrie Globale Namen High Performance Universeller Einsatz Global Pointer Leicht integrierbar ORB Integriert Remote Object Integriert

Vielen Dank für f r Eure Aufmerksamkeit