Главная » Java » javax.naming — службы каталогов и имен

0

 

   Пакеты javax. naming и javax. naming.di rectory содержат определения типов, поддерживающих функции служб каталогов и имен (directory and naming services) в соответствии с технологией Java Naming and Directory Interface (JNDI) в рамках приложений, написанных на языке программирования Java. Пакет спроектирован так, чтобы обеспечить независимость от возможных конкретных реализаций служб каталогов или имен. Таким образом, множество сервисов — существующих, разрабатываемых или готовых к распространению       могут быть доступны посредством единого набора инструментов.

   Контекст (context), представляемый интерфейсом Context, состоит из набора связей вида имя-объект. Context — это ключевой интерфейс, предлагающий средства поиска, задания и разрыва связей, переименования объектов, а также построения и уничтожения вложенных контекстов. Наиболее часто выполняемой операцией является lookup (поиск). Метод lookup получает в качестве параметра имя искомого объекта и возвращает объект, связанный с указанным именем. Следующий фрагмент кода демонстрирует операции поиска принтера с заданным именем и пересылки объекту принтера документа, подлежащего выводу на печать:

 

Printer printer =  (Printer)ctx.lookup("Duplex");

printer.print(report);

 

   Каждый метод службы имен из состава интерфейса Context обладает двумя перегруженными версиями: одна предполагает передачу аргумента имени типа Name, a вторая — String. Name — это интерфейс, представляющий имя в виде упорядоченной последовательности из нуля или более компонент. В контексте рассматриваемых методов Name допускает использование для задания составного имени (CompositeName), так что имя может охватывать несколько пространств имен.

   Перегруженные варианты методов, предусматривающие использование параметров типа Name, находят полезное применение в приложениях, которым необходимо манипулировать именами: сочетать их в единое целое, сопоставлять отдельные части имен и т.д. Перегруженные формы, в которых для задания имен используются объекты String, вероятно, окажутся приемлемыми для более простых приложений, в которых имя употребляется, например, только в роли ключа поиска соответствующего объекта.

   Объект класса Binding представляет связь вида имя-объект в виде тройки, включающей имя связываемого объекта, название соответствующего ему класса и объект как таковой. Класс Binding является расширенной версией типа NamedassPai r, объекты которого предполагают хранение имени объекта и названия класса этого объекта. Класс NameClassPai r используется в тех ситуациях, когда программе необходима только информация о классе, к которому относится объект, но не сам объект.

  Службы имен и каталогов поддерживают функции хранения объектов, используя различные подходы. Если хранилище предусматривает размещение объектов, созванных средствами языка Java, вполне вероятно, что объекты будут храниться в сериализованной форме. Некоторые службы, однако, не обеспечивают подобных редств. Более того, определенные объекты могут использоваться отнюдь не только Java-программами. В таких условиях выбор сериализованного формата хранения объектов нельзя считать наилучшим решением. Технология JNDI предполагает возможность применения ссылок, задаваемых объектами класса Reference, которые одержат дополнительные сведения о том, каким образом следует конструировать копию объекта. В этом случае система предпринимает попытку преобразовать ссылку, извлеченную из каталога в результате поиска, в объект, который та представляет, так что клиентам JNDI будет казаться, что содержимое хранилища — это реальные объекты, созданные средствами языка программирования Java.

   В рамках JNDI любые операции с именами и каталогами выполняются только относительно определенного контекста — абсолютных корневых адресов хранения Данных просто не существует. Поэтому JNDI обеспечивает задание начального контекста (initial context) средствами объекта класса Initial Context, предлагающего "точку отсчета", относительно которой выполняются все операции с именами и каталогами. Как только начальный контекст определен, программа вправе использовать его для поиска объектов и других контекстов.

   Интерфейс DirContext служит для представления контекста каталога (directory context). В его составе предусмотрены методы, предназначенные для проверки и изменения значений атрибутов, поставленных в соответствие объекту каталога (directory object). Для получения атрибутов объекта каталога используется один из перегруженных вариантов метода getAttributes, которому в качестве параметра передается, в частности, наименование объекта. Чтобы изменить значения атрибутов, следует воспользоваться одной из версий метода modifyAttributes: в ходе этой операции допускается добавлять, заменять или удалять атрибуты и/или их значения.

   DirContext, будучи расширением интерфейса Context, действует так же, как контекст имен. Это значит, что любой объект каталога способен задавать контекст имен. Например, объект каталога, соответствующий определенному сотруднику компании, может содержать атрибуты последнего и вместе с тем задавать контекст имен объектов, имеющих отношение к этому сотруднику, — таких как личный принтер, рабочие каталоги и т.п.

   Интерфейс DirContext содержит методы, позволяющие осуществлять поиск по содержимому каталога. В самом простом и наиболее общем случае приложение в состоянии сформировать набор атрибутов (возможно, с определенными значениями), подлежащих поиску, и передать его одному из методов search. Некоторые перегруженные формы search позволяют фильтровать данные в соответствии с самыми замысловатыми критериями.

   Вложенный пакет javax.naming.event обеспечивает функции уведомления объектов приложений о событиях (events), имеющих отношение к сервисам каталогов и имен: о добавлении объектов в каталог, изменении их содержимого, удалении и т.д.

   Вложенный пакет javax. naming, spi определяет интерфейс провайдера сервисов (Service Provider Interface), который позволяет выполнять динамическое включение поддержки функций JNDI.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии