Sieciowa komunikacja procesów - CORBA
// definicja interfejsu
CORBA1_Interfejs.IDL
module CORBA1_laczniki {
interface CORBA1_Interfejs {
attribute long suma;
long zwiekszaj( );
string podajDate( );
};
};
// CORBA1_Serwer.java
//
import java.util.*;
import CORBA1_laczniki.*;
// wlasne namiastki
import org.omg.CosNaming.*;
//usluga nazewnicza
import org.omg.CosNaming.NamingContextPackage.*;
//wyjatki uslugi nazewniczej
import org.omg.CORBA.*;
//niezbedne we wszystkich aplikacjach CORBA import org.omg.PortableServer.*;
// klasy dla modelu serwera przenosnego
import org.omg.PortableServer.POA;
// klasy dla modelu serwera przenosnego
import java.util.Properties;
// inicjowanie ORB
class CORBA1_Impl extends CORBA1_InterfejsPOA {
private ORB orb;
private int suma;
public void setORB(ORB orb_val) {
orb = orb_val;
}
-----------------------------------------------------------
public String podajDate( ) {
// pobranie daty
String data = new Date().toString();
System.out.println("SERWER: Wyslalem informacje o czasie: " + data); return data;
}
-----------------------------------------------------------
CORBA1_Impl()
{
// Konstruktor
System.out.println("Obiekt CORBA1 stworzony"); suma = 0;
}
-----------------------------------------------------------
public
int suma() {
// pobranie wartości atrybutu suma
return suma;
}
-----------------------------------------------------------
public
void suma(int war) {
// ustawienie wartości atrubutu suma
suma = war;
}
-----------------------------------------------------------
public int zwiekszaj() {
// inkrementacja atrybutu suma
suma++;
return suma;
}
}
Opracował: Zbigniew Suski
1
Sieciowa komunikacja procesów - CORBA public class CORBA1_Serwer {
public static void main(String args[]) {
try {
//
tworzenie i inicjowanie instancji ORB
ORB orb = ORB.init(args,null);
//
pobieranie referencji do glownego POA i aktywowanie zarządcy POA POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate();
//
utworzenie i zarejestrowanie pomocnika (servant) CORBA1_Impl pomocnik = new CORBA1_Impl();
pomocnik.setORB(orb);
//
utworzenie referencji do obiektu serwera)
org.omg.CORBA.Object ref = poa.servant_to_reference(pomocnik); CORBA1_Interfejs pref = CORBA1_InterfejsHelper.narrow(ref);
//pobranie referencji do uslugi nazewniczej org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService"); NamingContextExt nazwaRef = NamingContextExtHelper.narrow(objRef);
//powiazanie nazwy z referencja do obiektu String nazwa = "CORBA1";
NameComponent path[] = nazwaRef.to_name(nazwa); nazwaRef.rebind(path,pref);
System.out.println("CORBA1_Serwer gotowy - oczekuje na zgloszenia \n"); orb.run();
}
catch (Exception e) {
System.err.println("BLAD: " + e); e.printStackTrace(System.out);
}
System.out.println("CORBA1_Serwer konczy dzialanie \n");
}
}
Opracował: Zbigniew Suski
2
Sieciowa komunikacja procesów - CORBA
// CORBA1_Klient.java
//
import java.io.*;
import java.util.*;
import org.omg.CORBA.*;
//niezbedne we wszystkich aplikacjach CORBA import org.omg.CosNaming.*;
//usluga nazewnicza
import org.omg.CosNaming.NamingContextPackage.*;
//wyjatki uslugi nazewniczej
import CORBA1_laczniki.*;
// wlasne namiastki
public class CORBA1_Klient {
static CORBA1_Interfejs interfejs;
public static void main(String args[]) {
try {
//
tworzenie i inicjowanie ORB
ORB orb = ORB.init(args,null);
//pobranie referencji do uslugi nazewniczej (root naming context) org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService"); NamingContextExt nazwaRef = NamingContextExtHelper.narrow(objRef);
//pobranie referencji obiektu obslugujacego String nazwa = "CORBA1";
interfejs = CORBA1_InterfejsHelper.narrow(nazwaRef.resolve_str(nazwa)); System.out.println("Uzyskano uchwyt do serwera: "); System.out.println("\nPoczatkowa wartosc atrybutu suma = 0"); interfejs.suma((int)0);
System.out.println("\nCzas poczatkowy: " + interfejs.podajDate()); for (int i = 0 ; i < 300 ; i++ ) {
interfejs.zwiekszaj();
System.out.print('.');
}
System.out.println("\nSuma koncowa= " + interfejs.suma()); System.out.println("\nCzas koncowy: " + interfejs.podajDate());
}
catch (Exception e) {
System.err.println("BLAD: " + e); e.printStackTrace(System.out);
}
}
}
Opracował: Zbigniew Suski
3
Sieciowa komunikacja procesów - CORBA
// CORBA1_KlientDII.java
//
import CORBA1_laczniki.*;
// wlasne namiastki
import org.omg.CosNaming.*;
//usluga nazewnicza
import org.omg.CosNaming.NamingContextPackage.*;
//wyjatki uslugi nazewniczej
import org.omg.CORBA.*;
//niezbedne we wszystkich aplikacjach CORBA public class CORBA1_KlientDII {
static CORBA1_Interfejs interfejs;
public static void main(String args[]) {
org.omg.CORBA.Request request;
try {
//
tworzenie i inicjowanie ORB
ORB orb = ORB.init(args,null);
//pobranie kontekstu uslugi nazewniczej (root naming context) org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService"); NamingContextExt nazwaRef = NamingContextExtHelper.narrow(objRef);
//pobranie referencji obiektu obslugujacego String nazwa = "CORBA1";
interfejs = CORBA1_InterfejsHelper.narrow(nazwaRef.resolve_str(nazwa)); System.out.println("Uzyskano uchwyt do serwera: ");
// pobranie referencji bez uzycia namiastki, dla metody zwiekszaj org.omg.CORBA.Object obj = nazwaRef.resolve_str(nazwa); System.out.println("\nPoczatkowa wartosc atrybutu suma = 0"); interfejs.suma((int)0);
System.out.println("\nCzas poczatkowy: " + interfejs.podajDate()); for (int i = 0 ; i < 300 ; i++ ) {
request = buildRequest(obj,orb);
request.invoke();
System.out.print('.');
}
System.out.println("\nSuma koncowa= " + interfejs.suma()); System.out.println("\nCzas koncowy: " + interfejs.podajDate());
}
catch (Exception e) {
System.err.println("BLAD: " + e); e.printStackTrace(System.out);
}
}
public static org.omg.CORBA.Request buildRequest(org.omg.CORBA.Object obj, ORB orb)
{
org.omg.CORBA.Request r2 = obj._request("zwiekszaj"); r2.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_long)); return r2;
}
}
Opracował: Zbigniew Suski
4