Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JNDI: пример, File System 
:(
    Опции темы
Domestic Cat
Дата 14.3.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Что такое 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 минут потрачены с пользой.


--------------------

PM   Вверх
polosatij
Дата 23.3.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



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

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

Код Java
1:
2:

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

--------------------

сорри.. я чего-то не пойму.. а где ты указываешь, что тебя интересует папка "С:\projects\jndi\" ?

быстро закинул твой файл в eclipse и он мне естественно кидает исключение

Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

как мне ему сказать, что его интересует именно "jndi.properties" ?


--------------------
PM   Вверх
Domestic Cat
Дата 23.3.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



JVM ищет файл на CLASSPATH'e, вот и все smile


--------------------

PM   Вверх
polosatij
Дата 23.3.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



smile во.. млин... конец рабочего дня smile получилось smile

УРЯ!
домой....

пасиба >=)


--------------------
PM   Вверх
polosatij
Дата 23.3.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



хотя..

еще есть вопрос..

Код


import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;

/**
  * Demonstrates how to use a name parser and compound name to
  * avoid dealing with JNDI composite name syntax.
  *
  * usage: java CompoundWrap
  */
class CompoundWrap {
    public static void main(String[] args) {
     
    // Set up environment for creating initial context
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
    
//    env.put(Context.PROVIDER_URL, "http://localhost:8080");

    try {
        // Create the initial context
        DirContext ctx = new InitialDirContext(env);

        // Get the parser for this namespace
        NameParser ldapParser = ctx.getNameParser("");

        String dn = "cn=backslash\\\\a";

        // Parse name
        Name compound = ldapParser.parse(dn);

        // List components in name
        for (int i = 0; i < compound.size(); i++) {
        System.out.println(compound.get(i));
        }

        // Add to directory
        ctx.rebind(compound, "Hello");

        // Look for it in the directory
        System.out.println(ctx.lookup(compound));
        System.out.println(ctx.getAttributes(compound));

        // Clean up
        ctx.unbind(compound);

        // Close ctx when done
        ctx.close();
    } catch (NamingException e) {
        System.out.println(e);
    }
    }
}




ты не встречался с таким?

есть ли ldap на виндовс?


--------------------
PM   Вверх
Domestic Cat
Дата 23.3.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



С LDAP не работал, но Апи одно нa всех.
На винду надо его ставить, например, отсюда
http://www.openldap.org/


--------------------

PM   Вверх
polosatij
Дата 24.3.2005, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



доброе утро smile

продолжаю изучать дальше..
у мя вопрос такой.. ню получил я ссылку на объект:

Код

            Context initialContext = new InitialContext();
            //Context initialContext = new InitialContext(props);    
            
            Object obj = initialContext.lookup(name);


что я могу сделать терь с этим "объектом"? или смысл всего - это лишь получить привязку на "объект" и куда-нибудь потом передать?! если передать, то куда именно (можеш пример привести?) smile

пасиба за помощь smile


--------------------
PM   Вверх
Domestic Cat
Дата 24.3.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Дa все что хочешь можо делать. Посмотри например код клиента в топике
http://forum.vingrad.ru/index.php?showtopic=46374


--------------------

PM   Вверх
Се ля ви
Дата 30.8.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



А вот - для коннекта к БД пример - http://forum.vingrad.ru/index.php?showtopi...ndpost&p=502629

P.S. если, канешь, уметь правильно сервак J2EE настроить...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
redwhite90
Дата 11.8.2013, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



Код

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


что значит и первая и вторая строчка?
я так понимаю во второй строчке после file это уже комментарии. что за загадочное слово file?
PM MAIL   Вверх
mbasil
Дата 9.9.2013, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



file:///c:/projects/jndi/jndi_root

Это не комментарии, а описание протокола file: и места хранения самого файла,
также, как   http://   это название протокола с последующим адресом
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0767 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.