Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

53
Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA SNU iDB Lab. Taewhi Lee May 2nd, 2007

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

Transcript of Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Page 1: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Distributed Object-Oriented Programming(1) – Socket, RPC, CORBA

SNU iDB Lab.Taewhi Lee

May 2nd, 2007

Page 2: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Outline

Overview – Distributed Programming

Socket

RPC

CORBA

References

Page 3: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 4: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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]

Page 5: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Outline

Overview – Distributed Programming

Socket

RPC

CORBA

References

Page 6: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 7: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 8: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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)

Page 9: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 10: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 11: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 12: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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)

Page 13: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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)

Page 14: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Outline

Overview – Distributed Programming

Socket

RPC

CORBA

References

Page 15: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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’

Page 16: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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!

Page 17: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

17

A

Parameter

Result

B’

A’

Parameter

Result

B

Client ServerClient Stub Server StubNetwork

RPC [3/10]

RPC Architecture

Page 18: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 19: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 20: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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 #

Page 21: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 22: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 23: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 24: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 25: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Outline

Overview – Distributed Programming

Socket

RPC

CORBA

References

Page 26: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 27: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 28: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 29: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 30: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 31: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

CORBA [6/26]

CORBA Architecture

Page 32: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 33: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 34: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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 …

Page 35: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 36: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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)

Page 37: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 38: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 39: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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)

Page 40: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 41: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 42: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 43: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 44: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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;}

Page 45: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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;

Page 46: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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;}

Page 47: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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(); } }}

Page 48: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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

Page 49: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

CORBA [24/26] CORBA Programming – using Naming ServiceCode Example: Compile

Compile the server code – make using the makefile

Compile the client code

Page 50: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

CORBA [25/26] CORBA Programming – using Naming ServiceCode Example: Run Name Server

Run C++ name server (omniNames)

Page 51: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

CORBA [26/26] CORBA Programming – using Naming ServiceCode Example: Run Server & Client Program

Run the server program

Run the client program

Page 52: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

Outline

Overview – Distributed Programming

Socket

RPC

CORBA

References

Page 53: Distributed Object-Oriented Programming (1) – Socket, RPC, CORBA

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/