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