lect4

advertisement
Распределенные
системы
(Naming Service)
Ссылки на объекты в CORBA
IOR (Interoperable Object Reference) – ссылка на CORBA
объект, содержащая информацию, необходимую для
обеспечения возможности подключения клиентского
ORB к объекту или серванту. Для взаимодействия
может использоваться протокол IIOP.
IIOP, GIOP
IIOP (Internet Inter-ORB Protocol) – интернет протокол
взаимодействия между ORB. Является одой из
реализаций протокола GIOP.
GIOP (General Inter-ORB Protocol) – обобщенный
протокол обмена между ORB. Является
стандартизованным протоколом обмена между
различными ORB. Поддерживает 8 типов сообщений
Пример IOR
IOR:000000000000002B49444C3A6F6D672E6F72672F43
6F734E616D696E672F4E616D696E67436F6E746578744
578743A312E30000000000002000000000000007400010
2000000000E3139322E3136382E372E313234000E6D000
0001F5374616E646172644E532F4E616D6553657276657
22D504F412F5F726F6F740000000002000000000000000
8000000004A414300000000010000001C0000000000010
00100000001050100010001010900000001050100010000
00010000002C0000000000000001000000010000001C00
00000000010001000000010501000100010109000000010
5010001
Организация IOR со специфической для
IIOP иформацией
Теговый профиль (tagged profile)
Содержит всю информацию, необходимую для доступа
к объекту. Если сервером поддерживается несколько
протоколов, то информация о каждом из них
содержится в теговом профиле.
Пример использования IOR (Server)
package ior;
import org.omg.CORBA.ORB;
import java.io.*;
public class IorServer {
public static void main(String args[]) throws IOException {
//create object and register with ORB
SimpleObjectImpl simple = new SimpleObjectImpl();
//initialize ORB and stringify object
ORB orb = ORB.init(args, null);
String ior = orb.object_to_string(simple);
System.out.println("IOR: " + ior);
//write stringified object to file
FileWriter fw = new FileWriter("simple.ior");
fw.write(ior);
fw.close();
}
}
//Some other code … …
Пример использования IOR (Client)
package ior;
import org.omg.CORBA.ORB;
import java.io.*;
public class IorClient {
public static void main(String args[]) throws IOException {
//initialize ORB and stringify object
ORB orb = ORB.init(args, null);
//read stringified object to file
FileReader fr = new FileReader("simple.ior");
BufferedReader br = new BufferedReader(fr);
String ior = br.readLine();
org.omg.CORBA.Object obj = orb.string_to_object(ior);
//downcast obj to SimpleObject, then invoke methods
SimpleObject proxy = SimpleObjectHelper.narrow(obj);
}
}
//invoke methods
proxy.invoke();
System.out.println("Invoked method on simple object");
Некоторые варианты
обеспечения доступа к IOR
Распределенные ФС – сервер записывает
преобразованну в строку IOR в известную общую папку,
для обеспечения доступа клиентским приложениям
Web публикация – сервер записывает IOR в соответствии
с определенным локатором ресурса
Использование БД для хранения симвлических имен и
сылок на объекты.
Сервис именований
(naming service)
Сервис именований (naming service) – базовый сервис
CORBA, содержащий набор пар (имя, IOR) для объектов,
к которым может подключиться клиент. Клиент
предоставляет имя объекта и служба находит и
возвращает IOR этого объекта. Naming Service хранит
ссылки на объекты в иерархическом пространстве имен.
Иерархичность пространства имен можно сравнить с
файловой системой.
Пример иерархического
именования
building-461-fax 1
Работа с сервисом
именований
Получение начального контекста именований (initial
naming context)
…
//initialize ORB
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef;
objRef = orb.resolve_initial_references(“NameService”);
NamingContext ncRef;
ncRef = NamingContextHelper.narrow(objRef);
...
Работа с сервисом
именований
Получение ссылки на объект
NamingContext предоставляет методы для создание вложенных контекстов,
регистрации CORBA объектов и поиска CORBA объектов.
bind() – связывает объект с контекстом именования;
rebind() – уничтожает связь имени с объектом и связывает это имя с
другим объектом;
resolve() – возвращает ссылку на объект, связанный с указанным
именем
new_context() – создает новый, не связанный контекст именования.
bind_context() – привязывает новый контекст к сервису именования
(аналог создания подкаталога в файловой системе) }
Работа с сервисом
именований
Получение ссылки на объект (пример)
NamingContext ncRef = //get initial context here
//create the naming path, a compound name
NameComponent name[] = {
new NameComponent("simple", ""),
new NameComponent("object", "")
};
//resolve the path to a reference
org.omg.CORBA.Object ref;
SimpleObject obj;
ref = ncRef.resolve(name);
obj = SimpleObjectHelper.narrow(ref);
Работа с сервисом
именований
привязка (пример)
NameComponent simpleName[] = { new NameComponent("simple", "") };
simpleCxt = ncRef.new_context();
try {
ncRef.bind_context(simpleName, simpleCxt);
} catch(AlreadyBound ex) {
//already bound so resolve to it instead
objRef = ncRef.resolve(simpleName);
simpleCxt = NamingContextHelper.narrow(objRef);
}
//export the object to the naming service
NameComponent objName[] = { new NameComponent("object", "") };
simpleCxt.rebind(objName, obj);
//block to prevent program from ending and wait for client requests
System.out.println("Ready for client simple requests...");
Download