Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


JNDI: пример

Поиск:
Что такое JNDI - на примере File System

1. JNDI расшифровывается как Java Naming and Directory Interface. Почему интерфейс? По той же причине, по которой и JDBC является интерфейсом - JNDI сам по себе работать не будет, ему нужна конкретная имплементация какого-либо сервиса каким-либо провайдером.

2. Что такое Java Naming and Directory Interface? Примером является DNS. Грубо говоря, это система, которая держит каталог пар "имя-сервис". Таким образом, клиенту не приходится набирать в строку броузера ИП или его репрезентацию в десятичной форме, клиент набрает имя. DNS сопоставляет имени ИП.
Т.е. суть сервиса - хранить пары "имя-объект".

3. Рассмотрим на примере File System Service. Это очень простой сервис, который сопоставляет имени (например, "myfolder\myfile.txt") файл.

4. Начнем с инсталляции сервиса. Для этого нужно зайти на
http://java.sun.com/products/jndi/downloads/index.html
и выбрать Download JNDI 1.2.1 & More. Затем тянем File System Service Provider, 1.2 Beta 3 (fscontext-1_2-beta3.zip, 97.58 KB) .
Разархивируем и добавляем оба jara из папки lib в CLASSPATH.
Они нужны для запуска программы, не для компиляции.

5. Теперь создадим папку для проекта. У себя я создал C:\projects\jndi. Нам нужна такжа папка, являющаяся корнем сервиса, создаем C:\projects\jndi\jndi_root\. Помещаем в нее любой файл, скажем, foo.txt.

6. В C:\projects\jndi\ создаем файл jndi.properties со свойствами, необходимыми сервису. Это 2 свойства:
Код

java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
java.naming.provider.url=file:///c:/projects/jndi/jndi_root


7. Пишем код.
Код

import javax.naming.*;
import java.io.*;
import java.sql.*;
import java.util.*;

public class JndiTest
{
    public static void main(String[] args) throws Exception
    {
        if (args.length != 1)
        {
            printInfo();    
            System.exit(0);
        }
        String file = args[0];
        JndiTest test = new JndiTest();
        test.run(file);
    }
    
    private static void printInfo()
    {
        System.out.println("\nUsage: java JndiTest <filename>\n");
    }
    
    public void run(String name) throws Exception
    {
        Context ctx = new InitialContext();
        try
        {
            File file = (File)ctx.lookup(name);
            System.out.println("File name: " + name);
            System.out.println("File size: " + file.length() + " bytes");
            System.out.println("Last modified: " + new Timestamp(file.lastModified()));
        }
        finally
        {
            ctx.close();    
        }
    }
}

При создании контекста свойства считываются из jndi.properties. Их можно было бы добавить программно:
Код

Hashtable h = new Hashtable();
h.put(Context.INITIAL_CONTEXT_FACTORY, "blahblahblah");
h.put(Context.PROVIDER_URL, "blahblahblah");
Context ctx = new InitialContext(h);

Понятно, что этот метод менее гибок.

8. Запускаем: java JndiTest foo.txt.

9. Это очень простой пример. По сути, мы ничего особенного не сделали, того же результата можно было бы достичь гораздо проще. Зато мы "пощупали" JNDI. JNDI широко используется в RMI-IIOP и EJB, так что 10 минут потрачены с пользой.
Автор: Domestic Cat






Просмотров: 5135

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную