slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CORBA Programming: Presentation of a simple “Hello World” CORBA client and server application PowerPoint Presentation
Download Presentation
CORBA Programming: Presentation of a simple “Hello World” CORBA client and server application

Loading in 2 Seconds...

play fullscreen
1 / 13

CORBA Programming: Presentation of a simple “Hello World” CORBA client and server application - PowerPoint PPT Presentation


  • 94 Views
  • Uploaded on

ITONK1. CORBA Programming: Presentation of a simple “Hello World” CORBA client and server application. Outline. CORBA programming Code examples We will make a very small CORBA application with a Java server, Java Client & C++ client application In Java (SUN ORB) What gets generated?

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'CORBA Programming: Presentation of a simple “Hello World” CORBA client and server application' - tatyana-blanchard


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

ITONK1

CORBA Programming:Presentation of a simple“Hello World”CORBA client and server application

outline
Outline
  • CORBA programming
    • Code examples
    • We will make a very small CORBA application with a Java server, Java Client & C++ client application
    • In Java (SUN ORB)
      • What gets generated?
      • What files do we need to write (client + server)?
    • In Orbacus C++ ORB
      • We make a client

Only small steps in CORBA programming – much complexity

Studets are not required to be able to use CORBA for development

hello world corba example with file ior

Server returns“Hello World !“

User activa-

tes client

CORBA

Java / C++

Hello World

Client

CORBA

Java

Hello World

Server

TCP/IP

Network

“Hello World” CORBA Example with file IOR

Development PC

Clientapp.

Serverapp.

who s doing what
Who’s doing what?
  • Some code will get generated by the IDL compiler
  • Some code we will need to implement ourselves
  • Staring with the IDL file
idl interface of hello servant
IDL Interface of Hello Servant

module HelloApp

interface Hello{string sayHello();};

idl compiler example java

Java IDLCompiler -IDLJ

IDL Compiler Example Java

Hello.java (Both Client & Server)

contains the Java version of the IDL interface.

HelloOperations.java

contains the methods – here only sayHello(). All the operations in the IDL interface are placed in the operations file.

_HelloStub.java

is the client stub.

HelloPOA.java

is the skeleton class you should extend from. It implements dynamic invocation functions.

HelloHelper.java (Both Client & Server)

provides auxiliary functionality, notably the narrow() method required to cast CORBA object references to their proper types.

HelloHolder.java

Whenever the IDL type is an out or an inout parameter, the Holder class is used.

Hello.idlfile

Generates

Input

What gets generated

by the IDL Compiler

slide7

// HelloServer.java, stringified object reference version

// Stefan Wagner, 2003

import org.omg.CosNaming.*;

import org.omg.CosNaming.NamingContextPackage.*;

import org.omg.CORBA.*;

import org.omg.PortableServer.*;

import org.omg.PortableServer.POA;

import HelloApp.*;

//This is the servant - implementing the methods from the IDL

class HelloServant extends HelloPOA

{

private ORB orb;

public HelloServant(ORB orb) {

this.orb = orb;

}

public String sayHello()

{

return "\nHello world !!\n";

}

}

HelloServant

The server object

(Part 1)

Implemented manually

By extending from HelloPOA we may communicate with ORB

Constructor taking ORB as a parameter (from HelloPOA)

The CORBA operation implemented

slide8

//This is the HelloServer - the server running the HelloServant - Servant

public class HelloServer {

public static void main(String args[])

{

try{ // create and initialize the ORB

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);

// create servant and register it with the ORB

HelloServant helloRef = new HelloServant(orb);

// get reference to rootpoa and activate the POAManager

POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

rootpoa.the_POAManager().activate();

// get object reference from the servant

org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloRef);

Hello href = HelloHelper.narrow(ref);

// stringify the helloRef and dump it in a file

String oir = orb.object_to_string(href);

java.io.PrintWriter out = new java.io.PrintWriter(new java.io.FileOutputStream("object.ref"));

out.println(oir);

out.close();

// wait for invocations from clients

orb.run();

} catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); } }

}

HelloServant

The server object

(Part 2)

Init ORB and register servant with ORB

Implemented manually

Activate rootPOA

The POA produces the reference

Narrow the call (CORBA type cast + IDL type check)

Object reference

”stringified” and

Sent to file object.ref

Start the orb server process

slide9

// HelloClientSOR.java, stringified object reference version

import java.io.*;

import org.omg.CORBA.*;

import HelloApp.HelloHelper;

import HelloApp.*;

public class HelloClientSOR

{

public static void main(String args[])

{

try {

// create and initialize the ORB

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);

// Get the stringified object reference and destringify it.

java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader("object.ref"));

String ref = in.readLine();

org.omg.CORBA.Object obj = orb.string_to_object(ref) ;

Hello helloRef = HelloHelper.narrow(obj);

// call the Hello server object and print results

String Hello = helloRef.sayHello();

System.out.println(Hello);

} catch (Exception e) { System.out.println("ERROR : " + e) ; e.printStackTrace(System.out); }

}

}

HelloClientSOR

The Client program

Implemented manually

Init ORB

Object reference

Read from file

Narrow the call (CORBA type cast + IDL type check)

Call via Proxy

Discuss with your neighbor 2 min. what happens after sayHello()

what is this object ref file
What is this object.ref file?

IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000006c000102000000000e3139322e3136382e312e3130300011b600000021afabcb0000000020a80a250300000001000000000000000000000004000000000a0000000000000100000001000000200000000000010001000000020501000100010020000101090000000100010100

  • IOR: Interoperable Object Reference
    • Includes info on: Repository ID (standard), Endpoint Info (standard) - including IP and port number, Object Key (proprietary)
  • Can be written into a file
  • Not really nice with a file-based reference – or what?
  • May employ a naming service instead
    • This we shall look at later
  • File-based may be necessary due to firewall problems
  • Possible to use a HTTP or FTP server for distributing the references
parsed ior
Parsed IOR

_IIOP_ParseCDR: byte order BigEndian, repository id <IDL:HelloApp/Hello:1.0>, 1 profile _IIOP_ParseCDR: profile 1 is 138 bytes, tag 0 (INTERNET), BigEndian byte order (iiop.c:parse_IIOP_Profile): bo=BigEndian, version=1.2, hostname=172.20.186.138, port=1658, object_key=<....... ..s.................RootPOA..............> (iiop.c:parse_IIOP_Profile): encoded object key is <%AF%AB%CB%00%00%00%00%20%E8%DCs%BE%00%00%00%01%00%00%00%00%00%00%00%01%00%00%00%08RootPOA%00%00%00%00%08%00%00%00%01%00%00%00%00%14> (iiop.c:parse_IIOP_Profile): non-native cinfo is <iiop_1_2_1_%25AF%25AB%25CB%2500%2500%2500%2500%2520%25E8%25DCs%25BE%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2500%2501%2500%2500%2500%2508RootPOA%2500%2500%2500%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2514@tcp_172.20.186.138_1658> object key is <#AF#AB#CB#00#00#00#00 #E8#DCs#BE#00#00#00#01#00#00#00#00#00#00#00#01#00#00#00#08RootPOA#00#00#00#00#08#00#00#00#01#00#00#00#00#14>; no trustworthy most-specific-type info; unrecognized ORB type; reachable with IIOP 1.2 at host "172.20.186.138", port 1658

For the translation of IORs

http://www2.parc.com/istl/projects/ILU/parseIOR/

slide12

#include <OB/CORBA.h>

#include <Hello.h>

#include <fstream.h>

int run(CORBA::ORB_ptr);

int main(int argc, char* argv[])

{ int status = EXIT_SUCCESS;

CORBA::ORB_var orb;

try {

orb = CORBA::ORB_init(argc, argv);

status = run(orb);

} catch (const CORBA::Exception&) {

status = EXIT_FAILURE;

}

if(!CORBA::is_nil(orb))

{ try

{

orb -> destroy();

} catch(const CORBA::Exception&) { status = EXIT_FAILURE; }

}

return status;

}

HelloCorba

C++ Client

Part 1

Implemented manually

Init ORB

Call run method (see next slide)

Destroy ORB

slide13

int run(CORBA::ORB_ptr orb)

{

const char* refFile = "object.ref";

ifstream in(refFile);

char s[2048];

in >> s;

CORBA::Object_var obj = orb -> string_to_object(s);

HelloApp::Hello_var hello = HelloApp::Hello::_narrow(obj);

cout << hello->sayHello() << endl;

return 0;

}

HelloCorba

C++ Client

Part 2

Object reference

Read from file

HelloApp::Hello_var smartpointer type

Generated by IDL compiler + Hello

Narrow the call (CORBA type cast)

to the Hello_var smartpointer

(helper + memory management)

Call method via Proxy and print result

Read more on Smartpointer types in OOMI-1 chapter 4