2016W CT02 The Beginnings

Werbung
Komponententechnologien
Winter2016/17
Komponenten
1
2. Die Anfänge
3
©PeterSturm,UniversitätTrier
1
Komponententechnologien
Winter2016/17
Selbstzufrieden
Anwendung
Betriebssystem
Hardware
4
Oh? Da gibt es noch jemanden?
Anwendung
Betriebssystem
Hardware
Anwendung
TCP/IP
Betriebssystem
Hardware
5
©PeterSturm,UniversitätTrier
2
Komponententechnologien
Winter2016/17
… und der ist anders als ich?
Anwendung
?
Anwendung
Betriebssystem
Betriebssystem
Hardware
Hardware
6
Jeder versteht Jeden!
©PeterSturm,UniversitätTrier
7
3
Komponententechnologien
Winter2016/17
RPC
8
Betriebssystem
• Dateisystem, E/A,
Prozeßverwaltung, Paging, ...
Server
Betriebssystem
Rechner1
• Lokale Server
Server
Client
Client
Server
Server
Client
Client
Client/Server-Architektur
Rechner2
• Entfernte Server
• Netzwerkdateisystem, z.B.
NFS, Verteiltes Dateisystem,
SSH, WWW-Server (httpd),
Uhrensynchronisation (ntp), ...
©PeterSturm,UniversitätTrier
9
4
Komponententechnologien
Winter2016/17
RPC-Architektur
Anwendung
Lokaler
Prozeduraufruf:
r := f(p);
f
Client
Server
r := rp(p);
Client-Stub
rp
6
rp
3
1
Server-Stub
rp
4
send/receive
Betriebssystem
Betriebssystem
Rechner
Rechner
2
5
Netzwerk
10
Marshalling
• Encoding of basic data types may differ
• Little endian vs. big endian
• …
• Define a generic network standard
• Sender converts from local to network
• Receiver converts from network to local
• Examples
•
•
•
•
External data representation (xdr)
ASN.1
XML (SOAP)
JSON
11
©PeterSturm,UniversitätTrier
5
Komponententechnologien
Winter2016/17
RPC Compiler
Interface
Description
• Server
• Defines a set of remote
procedures
IDLCompiler
• Define signatures
• Name of procedure
• Type and sequence of
arguments
• Return type
ServerStub
ClientStub
.c
.c
.c
.c
.c
• Interface Definition Language
Compiler
(e.g.C++)
• IDL compiler generates
• Client stubs
• Server stubs
• Additional server functionality
Server
Client
12
OO-RPC
13
©PeterSturm,UniversitätTrier
6
Komponententechnologien
Winter2016/17
Aus RPC wird RMI
• Zusätzlicher Objektbezug wird deutlicher
• Siegeszug virtueller Maschinen
• Java-Ökosystem
• .NET Framework
14
JAVA RMI
15
©PeterSturm,UniversitätTrier
7
Komponententechnologien
Winter2016/17
Java RMI
• Remote Method Invocation
• Java-basierte OO-Variante eines RPC
• Objekte inkl. Code können ausgetauscht werden
• Vorteil einer homogenen Sprachumgebung
• Sicherheitsproblematik „Function Shipping“
• Reflection
• U.a. Generierung der Proxies
16
Architektur
RMI
RMI
Client
rmiregistry
RMI
RMI
RMI
Server
WebServer
URLProtocol
URLProtocol
WebServer
17
http://java.sun.com/docs/books/tutorial/rmi/overview.html
©PeterSturm,UniversitätTrier
8
Komponententechnologien
Winter2016/17
Am Anfang war das Interface
package syssoft.rmi_example;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Compute extends Remote {
int Add ( int x, int y ) throws RemoteException;
int Sub ( int x, int y ) throws RemoteException;
}
• Ableitung von Marker-Interface Remote (leeres
Interface)
• Erkennen RMI-zugänglicher Interfaces über Reflection
• Remote-Methoden „werfen“ RemoteException
• Zugeständnis an mögliche Fehlerfälle in verteilten Systemen
18
package syssoft.rmi_example.server;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
Server
import syssoft.rmi_example.*;
public class Server implements Compute {
public Server() { super(); }
public int Add ( int x, int y ) { return x+y; }
}
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "SyssoftCompute";
Compute engine = new Server();
Compute stub = (Compute) UnicastRemoteObject.exportObject(engine,0);
Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, stub);
System.out.println("ComputeEngine bound");
} catch (Exception e) {
System.err.println("ComputeEngine exception:");
e.printStackTrace();
}
}
19
©PeterSturm,UniversitätTrier
9
Komponententechnologien
Winter2016/17
package syssoft.rmi_example.client;
Client
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import syssoft.rmi_example.*;
public class Client {
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "SyssoftCompute";
Registry registry = LocateRegistry.getRegistry(args[0]);
Compute comp = (Compute) registry.lookup(name);
int result = comp.Add(21, 21);
System.out.println(result);
} catch (Exception e) {
System.err.println("SyssoftCompute exception:");
e.printStackTrace();
}
}
}
20
# Compiling, packaging, and distributing the interface
javac syssoft/rmi_example/Compute.java
jar cvf run/Compute.jar syssoft/rmi_example/Compute.class
cp run/Compute.jar ~peter/Sites
42
# Preparing the server
javac -cp run/Compute.jar syssoft/rmi_example/server/Server.java
# Preparing the client
javac -cp run/Compute.jar syssoft/rmi_example/client/Client.java
# Starting RMI registry
# rmiregistry &
# Running server
java -cp .:run/Compute.jar Djava.rmi.server.codebase=http://localhost/~peter/Compute.jar
-Djava.rmi.server.hostname=localhost Djava.security.policy=run/server.policy
syssoft.rmi_example.server.Server &
sleep 10
# Running client
java -cp .:run/Compute.jar -Djava.rmi.server.codebase=http://localhost/~peter/
-Djava.security.policy=run/client.policy syssoft.rmi_example.client.Client
localhost
21
©PeterSturm,UniversitätTrier
10
Komponententechnologien
Winter2016/17
.NET Remoting
22
Interface
23
©PeterSturm,UniversitätTrier
11
Komponententechnologien
Winter2016/17
Implementierung
24
Server
25
©PeterSturm,UniversitätTrier
12
Komponententechnologien
Winter2016/17
Client
26
©PeterSturm,UniversitätTrier
13
Herunterladen