RMI,JNDI.pptx
- Количество слайдов: 22
Java Lecture #16 RMI, JNDI Saint Petersburg, 2012
RMI (англ. Remote Method Invocation) — программный интерфейс вызова удаленных методов в языке Java. Цель RMI- получить доступ к объектам на другом компьютере и вызвать их методы. Шаги RMI: § передать параметры на другой компьютер § сообщить объекту о необходимости выполнения метода § получить обратно возвращаемое значение При вызове метода удаленного объекта на самом деле вызывается обычный метод языка Java, инкапсулированный в специальном объекте-заглушке (stub), который является представителем серверного объекта. Заглушка находится на клиентском компьютере, а не на сервере. Она упаковывает параметры удаленного метода в блок байтов. Передаваемые параметры сериализуются и кодируются алгоритмом, обеспечивающим независимость от аппаратуры. Объект становится удаленным, если § он реализует интерфейс java. rmi. Remote § Каждый метод объекта объявляется “throws 2 §
RMI На принимающей машине задействован протокол, который позволяет принимать таски от клиента, обрабатывать их и возвращать результат. Этот протокол выражен интерфейсами, которые управляются принимающей машиной. Каждый интерфейс содержит удаленный(е) метод(ы). Следующий интерфейс Task создан для метода execute task. Так класс не реализует Remote – его метод не генерирует Remote Exception. 3
RMI серверу необходимо создать и загрузить удаленные объекты в среду выполнения RMI для приема вызовов с других JVM. Эта процедура включает в себя: § Создание и загрузка Security Manager(защита RMI кода от кода, выполняемого в рамках той же виртуальной машины) § создание и загрузка удаленных объектов § регистрация по крайней мере одного удаленного объекта с помощью RMI Registry или JNDI 4
RMI
RMI Передача и прием параметров происходит следующим образом: § удаленные объекты передаются по ссылке(заглушке) – объекте, который реализует удаленного интерфейса. §локальные объекты передают свою копию, используя Serializable интерфейс Compute engine = new Compute. Engine(); Compute stub = (Compute) Unicast. Remote. Object. export. Object(engine, 0); - экспорт удаленного объекта для приема запросов, 0 – порт(указывается для конкретной машины отдельно, по умолчанию порт RMI 1099, необходимо указать отличный от 1099 порт), результат выполнения метода – искомая заглушка интерфейса Compute, но не экземпляр класса Compute. Engine. 6
RMI Создание клиента 7
Servers Взаимодействие клиента и RMI показано на рисунке 8
RMI Класс клиента, вычисляющий значение пи: 9
Servers 10
RMI 11
RMI Класс PI реализует интерфейс Task и вычисляет значение Pi. Интерфейс Serializable предполагает создание private static final long serial. Version. UID = 227 L; для гарантии совместимости версий сериализации. Если данное поле ининициализировано, а сериализация важна, то serial. Version. UID присваивается значение из предыдущей версии класса. 12
JNDI Java Naming and Directory Interface (JNDI) это Java API, организованный в виде службы каталогов, который позволяет Java клиентам открывать и просматривать данные и объекты по их именам. API предоставляет: § механизм ассоциации(связывания) объекта с именем § интерфейс в виде директорий позволяющий общие запросы § интерфейс событий, который позволяет определить клиентам, когда элементы директории были изменены § LDAP расширение для поддержки дополнительных возможностей LDAP сервисов. § Для удобства доступа к объектам в вычислительных системах созданы Naming -services. Его основная задача – связывать имена с реальными объектами, например – IP адрес(192. 9. 48. 5) и веб-сайт(www. sun. com) – релизуется службой DNS(Internet Domain Name System ), асболютное имя файла - c: binautoexec. bat используется, чтобы получить доступ к файлу. Именная конвенция для Lightweight Directory Access Protocol (LDAP) предполагает наличие уникальности имени на одном уровне каталогов. 13
JNDI § Уникальное имя может выглядеть, например, следующим образом: «cn=Иван Петров, ou=Сотрудники, dc=example, dc=com» [1]. Уникальное имя состоит из одного или нескольких относительных уникальных имен (RDN — англ. Relative Distinguished Name), разделённых запятой. Относительное уникальное имя имеет вид Имя. Атрибута=значение. На одном уровне каталога не может существовать двух записей с одинаковыми относительными уникальными именами. В силу такой структуры уникального имени записи в каталоге LDAP можно легко представить в виде дерева. § Context – набор связей типа имя-объект. Context включает в себя lookup поиск объектов по имени, а также содержит в себе функциональность связывания(binding) имен, отвязывания(unbinding) имен, упорядочивание связанных имен. Имя в Context’е может быть связано с другим именем в контексте (subcontext). Например, в UNIX системах какталог /usr является контекстом. Подкаталог /bin в дереве /usr/bin также является субконтекстом. 14
JNDI § Общая структура JNDI включает API и Service Provider Interface (SPI). SPI делает прозрачным использование Naming и Directory services. JNDI включен в релизы, начиная с Java 2 SDK, v 1. 3. Для использования JNDI необходимы JNDI классы и один или более сервис – провайдер, такие как: 15
JNDI Lightweight Directory Access Protocol (LDAP) - Internet protocol for accessing and managing directory services § Common Object Request Broker Architecture (CORBA) Common Object Services (COS) name service (стандарт, позволяющий взаимодействовать приложениям разного типа). § Java Remote Method Invocation (RMI) Registry. § NIS -Network Information Service( storing information related to users, machines and network services) § DNS – Domain Name System(IP Address of the machine from the Hostname) § Novell Directory Service (file and print services) JNDI пакеты: § javax. naming. directory § javax. naming. event § javax. naming. ldap § javax. naming. spi § 16
JNDI Naming Package - содержит классы и интерфейсы для доступа к Naming services и определяет Context API для lookup(“”), binding/unbinding, переименования, создания и удаления субконтекстов. Printer printer = (Printer) ctx. lookup("treekiller"); printer. print(report); The Initial Context Все операции с именами и директориями – относительны. Initial Context позволяет определить начальную точку этих операций. Exceptions Naming. Exception 17
JNDI Directory Package Расширяет функционал пакета Naming Package, добавляется функцональность получения атрибутов, связанных с объектами, хранящихся в директориях, а также поиск объектов по этим атрибутам. The Directory Context Определяет методы для получения и изменения атрибутов, связанных с объектом директории - get. Attributes() и modify. Attributes(), поиск объектов search(). Dir. Context расширяет функционал интерфейса Context. 18
JNDI § Event Package § содержит классы и интерфейсы для обработки событий. Naming. Event генерирует событие по типу (например object added, object changed). Naming. Listener – “слушает” событие. Каждый тип события соответствует своему типу Naming. Listener’а (например Namespace. Change. Listener, Object. Change. Listener) Event. Context или Event. Dir. Context – получатели событий. § § § 19
JNDI § LDAP Package содержит классы и интерфейсы для ипользования функционала, специфичного только для LDAP v 3. Это значит, что JNDI приложения, использующие протокол LDAP могут использовать только пакет javax. naming. directory, а не javax. naming. ldap. Служит для определения “extended” операций между LDAP клиентом и сервером. Объекты, именованные Controls, обеспечивают выполнение таких операций. Пример – запрос клиента на поиск включает в себя также сортировку результата по какому-либо признаку. Также имеют место быть Unsolicited Notifications (невостребованные уведомления) – сообщения от сервера, посылаемые асинхронно и не в рамках ответа клиенту. Context Ldap. Context – позволяет обрабатывать “extended” операции, “Controls” отправки запроса и получения ответа. 20
JNDI § Service Provider Package Предоставляет средства для динамического подключения поддержки доступа имен и каталогов через javax. naming и сопутствующих пакетов. Позволяет независимо от других реализаций JNDI взаимодействовать клиенту и серверу. 21
References § § http: //docs. oracle. com/javase/jndi/tutorial/trailmap. html http: //docs. oracle. com/javase/1. 3/docs/api/javax/naming/ldap/packagesummary. html 22
RMI,JNDI.pptx