Laboratorium Java - CORBA (usługa Naming Service) [2h

Transkrypt

Laboratorium Java - CORBA (usługa Naming Service) [2h
Laboratorium Java - CORBA (usługa Naming Service) [2h]
Deklaracja IDL (ExactTime.idl):
– deklaruje interfejsy i metody udostępniane przez aplikację serwera
– specyfikuje moduły, interfejsy, operacje (metody), typy danych, atrybuty i inne
– odpowiedniki IDL dla Java – patrz dodatek Tabela IDL
module remotetime {
interface ExactTime {
string getTime();
};
};
Klasa Serwera (RemoteTimeServer.java):
– implementuje (rozszerza) interfejs odległego obiektu
– inicjuje ORB (Object Request Broker)
– tworzy i rejestruje odległy obiekt serwera
import
import
import
import
import
import
remotetime.*;
org.omg.CosNaming.*;
org.omg.CosNaming.NamingContextPackage.*;
org.omg.CORBA.*;
java.util.*;
java.text.*;
//implementacja obiektu serwera
class ExactTimeServer extends _ExactTimeImplBase {
public String getTime() {
return DateFormat.getTimeInstance(DateFormat.FULL).format(
new Date(System.currentTimeMillis()));
}
}
//implementacja aplikacji serwera
public class RemoteTimeServer {
//wyrzuca wyjątki na konsole
public static void main(String[] args) throws Exception {
//stworzenie i inicjacja ORB
ORB orb = ORB.init(args, null);
//stworzenie i zarejestrowanie obiektu serwera
ExactTimeServer timeServerObjRef = new ExactTimeServer();
orb.connect(timeServerObjRef);
//pobranie głównego kontekstu nazw
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
//przypisanie nazwy do referencji do obiektu (binding)
NameComponent nc = new NameComponent("ExactTime", "");
NameComponent[] path = { nc };
ncRef.rebind(path, timeServerObjRef);
//oczekiwanie na żądanie klientów
java.lang.Object sync = new java.lang.Object();
synchronized (sync) {
sync.wait();
}
}
}
Laboratorium Java – CORBA/NS (Opracowanie: Konrad Kurczyna)
1/2
Klasa Klienta (RemoteTimeClient.java):
import remotetime.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
public class RemoteTimeClient {
//wyrzuca wyjątki na konsole
public static void main(String[] args) throws Exception {
//stworzenie i inicjacja ORB
ORB orb = ORB.init(args, null);
//pobranie głównego kontekstu nazw
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
//pobranie (resolve) odwołania tekstowego do obiektu
NameComponent nc = new NameComponent("ExactTime", "");
NameComponent[] path = { nc };
ExactTime timeObjRef = ExactTimeHelper.narrow(ncRef.resolve(path));
//wysłanie żądania do obiektu serwera
String exactTime = timeObjRef.getTime();
System.out.println(exactTime);
}
}
Przygotowanie:
– generowanie niezbędnych plików
idlj ExactTime.idl
idlj -fserver ExactTime.idl
–
generowanie niezbędnych plików w JDK 1.4+
idlj ExactTime.idl
idlj -fserver -oldImplBase ExactTime.idl
✔ wygenerowanie plików: stub, skeleton, helper, holder i innych (w zależności od potrzeb, tu
_ExactTimeImplBase.java)
Uruchamianie:
– kompilacja źródeł:
javac remotetime/*.java
javac -classpath . *.java
–
uruchamianie serwera nazw:
tnameserv -ORBInitialPort 1050
–
uruchamianie serwera i klienta:
java RemoteTimeServer -ORBInitialPort 1050
java RemoteTimeClient -ORBInitialHost 127.0.0.1 -ORBInitialPort 1050
Zadanie:
– zapoznać się z dokumentacja JavaAPI
– wykonać aplikację kalkulatora realizującego podstawowe operacje matematyczne za pomocą
mechanizmów CORBA z wykorzystaniem serwera nazw
Laboratorium Java – CORBA/NS (Opracowanie: Konrad Kurczyna)
2/2