Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT

7. Сценарии

Этот раздел обрисовывает в общих чертах несколько сценариев приложения, чтобы помочь иллюстрировать возможности, включенные JNDI.

Примеры ниже не предназначаются, чтобы быть предписывающими. часто есть несколько способов решить проблему, и JNDI разрабатывается с гибкостью в памяти.

7.1 Пользовательская аутентификация

В защищенных системах пользователь должен аутентифицировать себя к компьютеру, сети, или службе, к которой он хочет получить доступ. Например, журналирование в Unix требует, чтобы пользователь предоставил пароль. Точно так же использование SSL требует, чтобы пользователь предоставил свой сертификат X.509. Такая информация аутентификации может храниться как атрибуты, связанные с каждым пользователем в каталоге. Система, выполняющая аутентификацию, искала бы атрибут (например, "пароль") пользователя и проверила бы подлинность, используя информацию, предоставленную пользователем.

 
DirContext ctx = new InitialDirContext();       
Attribute attr = ctx.getAttributes(userName).get("password");
String password = (String)attr.get();

7.2 Электронная почта

Полезная функция системы электронной почты является службой каталогов, которая обеспечивает отображение между пользователями и адресами электронной почты. Это позволяет почтовым пользователям искать адрес электронной почты определенного пользователя. Это походит на поиск номера телефона человека в телефонной книге, чтобы набрать его номер телефона. Например, когда я хочу отправить почту Джону Смиту в моем отделе, я ищу "Джона Смита" в каталоге, используя виджет "поиска" в почтовом приложении. Виджет возвращает мне пять записей Джона Смита, из которого я выбираю тот, который находится в здании на моем сайте, и используйте атрибут адреса электронной почты, связанный с той записью.

NamingEnumeration matches = deptCtx.search("user", new BasicAttributes("name", "John Smith")); 
// use matches to construct a selectable list for end-user
while (matches.hasMore()) {
    SearchResult item = (SearchResult) matches.next();
    Attributes info = item.getAttributes();     
    /* display attributes */
    ...
}

Каталог мог также использоваться пользователями, чтобы установить персонализированные адресные книги. Например, как только я определил местоположение адреса электронной почты Джона Смита, я не мог бы хотеть искать каталог снова каждый раз, когда я отправляю ему почту. Вместо этого я могу создать персональное поддерево в каталоге, в котором я поддерживаю записи, которые я часто использую, возможно создавая ссылки к существующим записям.

7.3 Базы данных

Приложения базы данных могут использовать каталог, чтобы определить местоположение серверов баз данных. Например, финансовое приложение должно получить биржевые цены от сервера котировки акций, используя JDBC. Это приложение может позволить пользователю выбрать сервер котировки акций, основанный на спецификации некоторых атрибутов (таких как покрытие который рынки и частота обновлений кавычки). Приложение ищет каталог серверы кавычки, которые встречают эти атрибуты, и затем получает атрибут "расположения" (URL JDBC) выбранного сервера кавычки и соединяется с этим.

NamingEnumeration matches =     ctx.search("service/stockQuotes",
                                        "(&(market=NASDAQ)(updateFreqency<=300))", searchctls);        
while (matches.hasMore()) {     
           SearchResult item = (SearchResult)matches.next();    
           Attribute location = item.getAttributes().get("location");         
   ...
}

7.4 Просмотр

При использовании почти любого вида интерактивного приложения, которое просит, чтобы пользователь ввел имена, задание пользователя делается легче, если браузер пространства имен доступен ему. Браузер может или быть встроен в приложение и адаптирован, чтобы удовлетворить тому приложению в частности или это может быть более общего назначения, такие как типичный веб-браузер.

Очень простой пример браузера JNDI позволяет пользователю "идти" через пространство имен, просматривая атомарные имена в каждом шаге по пути. Браузер печатает "*", чтобы выделить имя каждого Context , таким образом говоря пользователю, куда он может пойти затем. 1

// Start at the top -- the initial context.
Context ctx = new InitialContext();
while (ctx != null) {           // display one level
    NamingEnumeration   items = ctx.list();
    while (items.hasMoreElements()) {
        NameClassPair item = (NameClassPair)items.next();
        if (isContext(item.getClassName())) {
            System.out.print("*");
        } else {
            System.out.print(" ");
        }
        System.out.println(" " + item.getName());
    }
    // Take the next step down into the namespace.
    String target = input.readLine();
    try {
        ctx = (Context)ctx.lookup(target);
    } catch (NamingException e) {
        // handle error
    } catch (ClassCastException e) {
        // not a context; cannot traverse
    }
}

7.5 Сетевая Печать

Важная функция службы печати должна предоставить средство своим человеческим пользователям легко обнаружить и выбрать принтеры в сети. Приложение, которое должно напечатать, или машина, на которой оно работает, не придется сконфигурировать каждый раз, когда новый принтер добавляется к сети. Контекст сетевого доступа к принтерам может колебаться от рабочей группы до глобальной переменной. Служба печати может использовать каталог, чтобы обеспечить эту возможность.

Предположите, что принтеры представляются a Printer интерфейс. Один из методов в этом мог быть print() который, когда дано InputStream , считает данные из InputStream и напечатайте это на принтере, представленном этим экземпляром Принтера.

interface Printer {    
        void print(InputStream data) throws PrinterException;   
        ...
}

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

void myAppPrint(String printerName, String fileName) throws IOException {
    try {
        DirContext ctx = new InitialDirContext();
        Printer prt = (Printer) ctx.lookup(printerName);
        prt.print(new FileInputStream(fileName));
    } catch (NamingException e){
        System.err.println("Could not locate printer: " + e);
    } catch (ClassCastException e) {
        System.err.println(printerName + "does not name a printer");
    }
}

7.5.1 Просмотр и поиск принтеров

Выбор принтера, явно давая его имя является всего лишь одним способом идентифицировать принтер. Пользователь может также использовать каталог, чтобы видеть различные принтеры, доступные (просмотр), или искать принтеры с определенными атрибутами. Например пользователь может попросить, чтобы каталог перечислил все принтеры на втором этаже создания 5 в университетском городке Маунтин-Вью, или поиске всех цветных лазерных принтеров с разрешением на 600 точек на дюйм. С точки зрения приложения, так же, как lookup() возвращенный a Printer объект, список и операции поиска также обеспечивают ту же самую возможность возврата Printer объекты, которые приложение могло использовать, чтобы представить запросы печати.


1. isContext () метод, используемый в примере, не является частью JNDI. Это - метод, который должен быть обеспечен приложением.

СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT


Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами