Upload
mercer
View
48
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA. SNU iDB Lab. Taewhi Lee. May 2nd, 2007. Outline. Overview – Distributed Programming Socket RPC CORBA References. Overview – Distributed Programming [1/2] Paradigm Shift. Service-Oriented Architecture. - PowerPoint PPT Presentation
Citation preview
Distributed Object-Oriented Programming(1) – Socket, RPC, CORBA
SNU iDB Lab.Taewhi Lee
May 2nd, 2007
Outline
Overview – Distributed Programming
Socket
RPC
CORBA
References
Overview – Distributed Programming [1/2]
Paradigm Shift
Socket
RPC
CORBA RMI
CORBA Component
Model
OOP CBD Object – limited reusability Component – independent service Several components are plugged
in to a component architecture
systemStructured Programming
OOP SP – Complexity of system modeling Difficulty in code change/extension OOP – Natural object modeling Reusability by inheritance Flexibility by polymorphism
Distributed Component Model
Distributed Object Model
Basic Inter-Process Communication
Distributed Structural Model
Web Services
Service-Oriented Architecture
Distributed Computing SOA DC – client/server are tightly coupled SOA – everything is decoupled
EJB
Overview – Distributed Programming [2/2]
Comparison of the Paradigms
Structured Development
Object-Oriented Development
Component Based Development
Service Oriented Development
Granularity Very fine Fine Medium Coarse
Contract Defined Private/public Public Published
Reusability Low Low Medium High
Coupling Tight Tight Loose Very loose
Dependencies
Compile-time
Compile-time
Compile-time Run-time
Communication Scope
Intra-application
Intra-application
Inter-application
Inter-enterprise
[Java Web Services Architecture, McGovern]
Outline
Overview – Distributed Programming
Socket
RPC
CORBA
References
Socket [1/8]
What is Socket?
Socket Interface for network access Originated from the ARPA network in 1971
Socket = Internet address + port number
Only one receiver / Multiple senders per port
Socket [2/8]
Characteristics of Socket
Characteristics Endpoint for inter-process communication Message transmission between sockets Socket associated with either UDP or TCP No port sharing
Advantage Several points of entry to process
Disadvantage Location dependence
Socket [3/8]
Three Types of Socket
SOCK_DGRAM For datagram communication (UDP)
SOCK_STREAM For stream communication (TCP)
SOCK_RAW For advanced user Direct access to network layer Security problem may occur (not supported in
Java)
Socket [4/8]
Communication Service Types
UDP (User Datagram Protocol) Connectionless Unreliable delivery – ‘send and pray’ Each message contains source and destination
address Each message may be delivered through
different path Messages are possibly lost / duplicated /
delivered out of order, without telling the user Efficient and easy to implement
Socket [5/8]
Communication Service Types (cont’d)
TCP (User Datagram Protocol) Connection-based Reliable delivery Establishes data stream connection to ensure
reliable, in-sequence delivery
Error checking and reporting to both ends Attempts to match speeds (timeouts, buffering) Less efficient, memory and time overhead for
error correction
Socket [6/8]
Socket Programming Create socket Read & write Close
socket Example: TCP socket programming in Java
Client Server
1) Create ServerSocket
2) Wait accept() from ServerSocket
3) Create Socket 4) Connect
5) Client’s socket is returned by accept()
6) Get InputStream & OutputStream from the socket
6) Get InputStream & OutputStream from the socket
7) Communicate using theInputStream & OutputStream
7) Communicate using theInputStream & OutputStream
8) Communicate
9) Close Socket
9) Close Socket
Socket [7/8] TCP Socket Programming in Java (1/2) Code Example: Echo Server EchoServer.javaimport java.net.*;import java.io.*;
public class EchoServer { public static void main (String args[]) {
try { int serverPort = 10001;
ServerSocket listenSocket = new ServerSocket(serverPort); Socket clientSocket = listenSocket.accept(); OutputStream out = sock.getOutputStream();
InputStream in = sock.getInputStream(); PrintWriter pw = new PrintWriter(new
OutputStreamWriter(out)); BufferedReader br = new BufferedReader(new
InputStreamReader(in)); String line = null; while ((line = br.readLine()) != null) { System.out.println(“String from client : “ + line); pw.println(line); pw.flush();
} pw.close(); br.close(); sock.close();
} catch(Exception e) { System.out.println(e) } }}
1)2), 5)6)
7), 8)
9)
Socket [8/8] TCP Socket Programming in Java (2/2) Code Example: Echo Client EchoClient.javaimport java.net.*;import java.io.*;
public class EchoClient { public static void main (String args[]) {
try { int serverPort = 10001;
Socket sock = new ServerSocket(“127.0.0.1”, serverPort); BufferedReader keyboard = new BufferedReader(
new InputStreamReader(System.in)); OutputStream out = sock.getOutputStream();
InputStream in = sock.getInputStream(); PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); BufferedReader br = new BufferedReader(new
InputStreamReader(in)); String line = null; while ((line = keyboard.readLine()) != null) { if (line.equals(“quit”)) break; pw.println(line); pw.flush(); String echo = br.readLine(); System.out.println(“String from server : “ + echo);
} pw.close(); br.close(); sock.close();
} catch(Exception e) { System.out.println(e) } }}
3), 4)
6)
7), 8)
9)
Outline
Overview – Distributed Programming
Socket
RPC
CORBA
References
RPC [1/10]
What is RPC?
RPC (Remote Procedure Call) Birell and Nelson at Xerox PARC, 1980 To support distributed programming in procedural
languages To make distributed nature of service transparent
to the programmer – ‘RPC like a local call’
RPC [2/10]
Message RPC
Message Flexible But, not natural for programming
Programmers have to worry about message formats Messages must be packed and unpacked Messages have to be decoded by server to figure out
what is requested Messages are often asynchronous They may require special error handling functions
RPC is a more natural way to communicate!
17
A
Parameter
Result
B’
A’
Parameter
Result
B
Client ServerClient Stub Server StubNetwork
RPC [3/10]
RPC Architecture
RPC [4/10]
RPC Stubs
The stubs send messages to each other for RPC Client-side stub
Looks to the client as if it were a callable server procedure
Is linked with the client program
Server-side stub Looks to the server as if it’s a calling client Is linked with the server program
Stub compiler Reads the IDL Produces two stub procedures for each server procedure
RPC [5/10]
Marshalling
The packing of procedure parameters into a message packet
The RPC stubs call type-specific procedures to marshall (or unmarshall) all of the parameters to the call
Representation needs to deal with byte ordering issues, strings, alignment, etc.
Pentium SPARC
RPC [6/10]
Interface Definition
IDL (Interface Definition Language) Defines the interface of server program
e.g., names, parameters, and types
Files interface in Sun XDR(IDL)/* PrintSquare service interface definition in file
square.x */program SQUAREPROG { version SQUAREVERS { int PRINTSQUARE(string) = 1; } = 1;} = 99;
# of bytes returned
version #
program #
RPC [7/10]
RPC Programming (Sun RPC)
21
HP RPC IDL
HP RPCGENInterface Compiler
Client Stub Server Stub
HeaderFile
C Compiler C Compiler
ClientProcess
ServerProcess
HP RPCRuntimeLibrary
square.x
rpcgen square.x
square.h
ClientProgram
ServerProgramClient.c Server.c
client server
square_svc.csquare_clnt.c
22
Client.c
#include <stdio.h>#include <rpc/rpc.h>#include “square.h"main( argc, argv )int argc ;char *argv[] ;{ CLIENT *cl ; int *result ; char *server ; char *message ; if( argc != 3 ) { printf( "Usage : %s host message \n", argv[0] ) ; exit( 1 ) ; } server = argv[1] ; message = argv[2]; cl = clnt_create(server, SQUAREPROG, SQUAREVERS, "tcp" ) ; // get a client
handle if( cl == NULL ) { clnt_pcreateerror(server) ; exit( 1 ) ; } // unable to
contact server result = printsquare_1(&message, cl) ; if( result == NULL ) { clnt_perror(cl, server) ; exit( 1 ) ; } if( result == 0 ) { printf( "%s : %s could not print your messgae \n", argv[0],
server) ; exit( 1 ); } printf( "Returned Message %d !!!!!\n", *result ) ; exit( 0 ) ;}
RPC [8/10] RPC Programming in C – Sun RPC (1/3) Code Example: PrintSquare Client
23
Server.c
#include <stdio.h>#include <rpc/rpc.h>#include “square.h“
int *printsquare_1_svc(msg, req)char **msg; struct svc_req *req;{ static int result; int x = atoi(*msg); printf("%d Recieved \n", x); result = x * x; printf("Transfer Processing Message.....\n"); return (&result);}
RPC [9/10] RPC Programming in C – Sun RPC (2/3) Code Example: PrintSquare Server
24
RPCGEN $> rpcgen square.x Generated files – square.h, square_svc.c, square_clnt.c
Server program $> cc Server.c square_svc.c –o server
Client program $> cc Client.c square_clnt.c –o client
RPC [10/10] RPC Programming in C – Sun RPC (3/3)Code Example: Compile & Run
Outline
Overview – Distributed Programming
Socket
RPC
CORBA
References
CORBA [1/26]
Object Management Architecture (OMA)
A standard architecture for distributed programming
Developed by the industry consortium OMG CORBA services Fundamental servicese.g., object location (naming)
Standard service interfaces (horizontal)
Basic information system services
e.g., transactions, persistence
Standard domain interfaces (vertical)
Interfaces for special application domains e.g., medical, telecommunication
Application objects – not standardized
CORBA [2/26]
What is CORBA?
CORBA = Common Object Request Broker Architecture ORB (Object Request Broker) standard The core of the OMA
The goal of CORBA Location transparency Interoperability – platform-independent, language-
independent
CORBA [3/26]
CORBA
Standard Interface : IDL (Interface Definition Language)
Standard Communication Protocol : IIOP (Internet Inter-ORB Protocol)
Language-independentservice interfaces
IDL Interface
C++
IRIX
HP-UX
SmallTalk
Alpha NT
Ada
Visual C++
NT
Java
Java OS
C++
AIX
Solaris
C++
MVS
COBOL
ORB = IIOP + IDL
CORBA [4/26]
RPC vs. CORBA
RPC When a specific function is called, the data types
of parameters are fixed Language dependent
CORBA The data types of parameters are more flexible by
polymorphism
Language independent Dynamic method invocation & dispatching
CORBA [5/26]
CORBA History 1.0~1.2 (1991.10 ~ )
CORBA object model (Core 92) IDL & mapping from IDL to the C language APIs for interfacing to the ORB Interfaces for the Basic Object Adapter (BOA) and memory
management
2.0~2.3 (1996.8 ~ ) General Inter-ORB Protocol / Internet Inter-ORB Protocol Portable Object Adapter (POA) Mapping from IDL to Java, Cobol, Ada, Smalltalk, C++
2.4~3.0 (2000.10 ~ ) Java and Internet integration Asynchronous messaging and QoS control Minimum, fault-tolerant, and real-time CORBA
CORBA [6/26]
CORBA Architecture
CORBA [7/26]
Main CORBA Features
Object Request Broker (ORB) Interface Definition Language (IDL) Inter-ORB protocols Object Adapter Stub & Skeleton Interface Repository Dynamic Invocation & Dispatching
CORBA [8/26]
Object Request Broker
Object Request Broker (ORB) CORBA object bus The key to location transparency
The roles of ORB Routing the client’s request and the server’s reply Management of the Interface Repository
a distributed database of IDL definitions Client side services for converting remote object
references to and from strings Client side dynamic invocation of remote objects Server side resource management – object activation &
deactivation
Client
ORB
Serverinvoke & response
CORBA [9/26]
Interface Definition Language Interface Definition Language (IDL)
Object service specification for interoperability Only to define interface signatures (not
implementation) The key to programming language transparency Most OO concepts support (e.g., multiple
inheritance)
ORB (Object Request Broker)
Client Server
IDL IDL
C C++ Java … C C++ Java …
CORBA [10/26]
Inter-ORB Protocols General Inter-ORB Protocol (GIOP)
Specifies a set of message formats and common data representations for communication between ORBs
Internet Inter-ORB Protocol (IIOP) Specifies how GIOP messages are exchanged
over a TCP/IP network
C++
Smalltalk
Ada
OLE
. . . .
Java
Network
CORBA [11/26]
Object Adapter Object Adapter
Serves as glue between object (servant) & ORB The roles of Object Adapter
Object registration & management Inter-operable Object Reference (IOR) generation Request dispatching from server-side ORBs to the
servants of target objects Basic Object Adapter (BOA)
Vendor-specific implementation low portability Replaced by Portable Object Adapter (POA)
CORBA [12/26]
Stub & Skeleton Stub (client side)
Generated from IDL compiler in client’s language Acts as a local proxy for the remote object Marshalls data to be send & unmarshalls result One client stub instance per instance of remote
object
Skeleton (server side) Generated from IDL compiler in server’s language Unmarshalls request data & dispatch request to
servant & marshalls reply data Used by the POA
CORBA [13/26]
Interface Repository
A distributed database of IDL definitions Used for performing operations on objects
whose interface is not known at compile time Knowing interfaces of all objects a priori may be
impractical Independently developed components Fast changing parts of system Dynamic manipulation
Allows CORBA dynamic invocation
CORBA [14/26]
CORBA Invocation Static Invocation Interface
Using pre-compiled static stub High performance
Dynamic Invocation Interface Using dynamic invocation High flexibility
The interfaces for dynamic invocation & dispatching Dynamic Invocation Interface (DII) Dynamic Skeleton Interface (DSI)
CORBA [15/26]
Dynamic Invocation Interface Dynamic Invocation Interface (DII)
To invoke remote objects without having stubs Generic run-time invocation A generic stub is used
DII steps Search & fetch an interface name & method
description from an Interface Repository Construct an argument list & a request Remote method invocation
CORBA [16/26]
Dynamic Skeleton Interface
Dynamic Skeleton Interface (DSI) To dispatch request to remote objects without
having skeletons Generic run-time invocation A generic skeleton is used
CORBA [17/26]
CORBA Programming
IDLcompiler
Server“skeleton”Source
Server developer
Server
Compile & Link(Java, C++, PL1, COBOL…)
Client developer
Client
Compile & Link(Java, C++, PL1, COBOL, …)
IDLcompiler
IDLcompiler
Client“stub”Source
Client Program Source
IDL
1. Write IDL interface2. Compile the IDL interface using an IDL compiler in your programming language3. Write server/client program using generated skeleton/stub
CORBA [18/26] CORBA ProgrammingCode Example: IDL Interface
Hello.idlinterface Hello { string sayHello(in string name);};
CORBA ORB used in this example C++ – omniORB
(http://omniorb.sourceforge.net) Java – Java SDK
CORBA [19/26] CORBA Programming – using Naming ServiceCode Example: Hello Server in C++ (1/3)
HelloServer.cpp [1/3]#include <iostream>#include <cstdlib>#include "Hello.hh" using namespace std; class Hello_i : public POA_Hello {public: inline Hello_i() {} virtual ~Hello_i() {} char* sayHello(const char* name);}; char* Hello_i::sayHello(const char* name) { char* buffer = CORBA::string_alloc(256); if (buffer == NULL) return NULL; sprintf(buffer, "Hello, %s!", name); return buffer;}
CORBA [20/26] CORBA Programming – using Naming ServiceCode Example: Hello Server in C++ (2/3) HelloServer.cpp [2/3]int main(int argc, char **argv){ // creates & initializes the ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); // get RootPOA references CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow(obj); // activate Hello CORBA object Hello_i* myhello = new Hello_i(); PortableServer::ObjectId_var myhelloid = poa->activate_object(myhello); obj = myhello->_this(); CORBA::String_var sior(orb->object_to_string(obj)); cout << (char*) sior << endl;
CORBA [21/26] CORBA Programming – using Naming ServiceCode Example: Hello Server in C++ (3/3)
HelloServer.cpp [3/3] // bind object to name service CORBA::Object_var obj2 = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var nc = CosNaming::NamingContext::_narrow(obj2); CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup("Hello"); name[0].kind = CORBA::string_dup("Object"); nc->rebind(name, obj); myhello->_remove_ref(); PortableServer::POAManager_var pman = poa->the_POAManager(); pman->activate(); orb->run(); return 0;}
CORBA [22/26] CORBA Programming – using Naming ServiceCode Example: Hello Client in Java
HelloClient.java import org.omg.CosNaming.*;import org.omg.CORBA.*; public class HelloClient { public static void main(String args[]) { try { ORB orb = ORB.init(args, null); org.omg.CORBA.Object namingContextObj = orb.resolve_initial_references("NameService"); NamingContext namingContext = NamingContextHelper.narrow(namingContextObj); NameComponent[] path = { new NameComponent("Hello", "Object") }; org.omg.CORBA.Object helloObj = namingContext.resolve(path); Hello helloRef = HelloHelper.narrow(helloObj); String hello = helloRef.sayHello("World"); System.out.println(hello); } catch (Exception e) { e.printStackTrace(); } }}
CORBA [23/26] CORBA Programming – using Naming ServiceCode Example: Makefile for C++ Server Compile
MakefileCC = /usr/bin/g++CPPFLAGS = -g -cLDFLAGS = -gOMNI_HOME = /usr/localOMNI_INCLUDES = -I$(OMNI_HOME)/includeOMNI_LIB_DIR = $(OMNI_HOME)/libOMNIIDL = $(OMNI_HOME)/bin/omniidlINCLUDES = $(OMNI_INCLUDES)LIBS = -lomniORB4 -lomnithread -lomniDynamic4OBJECTS = HelloSK.o HelloServer.o all Server: $(OBJECTS) $(CC) $(LDFLAGS) -o HelloServer -L$(OMNI_LIB_DIR) $(OBJECTS) $(LIBS) HelloSK.o: HelloSK.cc Hello.hh $(CC) $(CPPFLAGS) $(INCLUDES) HelloSK.cc HelloServer.o: HelloServer.cpp Hello.hh $(CC) $(CPPFLAGS) $(INCLUDES) HelloServer.cpp HelloSK.cc: Hello.idl $(OMNIIDL) -bcxx Hello.idl clean clean_all: rm -fr *.o rm -fr core rm -fr *.hh rm -fr *SK.cc rm -fr HelloServer
CORBA [24/26] CORBA Programming – using Naming ServiceCode Example: Compile
Compile the server code – make using the makefile
Compile the client code
CORBA [25/26] CORBA Programming – using Naming ServiceCode Example: Run Name Server
Run C++ name server (omniNames)
CORBA [26/26] CORBA Programming – using Naming ServiceCode Example: Run Server & Client Program
Run the server program
Run the client program
Outline
Overview – Distributed Programming
Socket
RPC
CORBA
References
References
Sams’ Teach Yourself CORBA in 14 Days
http://ovir.icp.ac.ru/corba/books/Teach14/ The omniORB version 4.1 User’s Guide
http://omniorb.sourceforge.net/omni41/omniORB/