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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к JNDI-хранилищу извне 
:(
    Опции темы
Се ля ви
Дата 4.10.2009, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Oracle WebLogic позволяет обращаться к JNDI-дереву из внешнего приложения - при чём как класть, так и забирать из него объекты. Выглядит это примерно так:
Ложим -
Код
import javax.naming.*;
import weblogic.jndi.Environment;
import package1.Company;
//...
    public static void main(String args[]) {

        System.out.println("Binding Company object to WebLogic JNDI tree.");
        Company company = new Company();

        try {
            Context ic = getInitialContext();
            Context subcontext = ic.createSubcontext("LabExample");

            subcontext.rebind("Company", company);

            ic.close();

        } catch (Exception e) {
            System.out.println("ERROR: Unable to bind object to JNDI Tree. " + e);
        }

    }

    static Context getInitialContext() {
        Context ic = null;

        try {
            Environment env = new Environment();

            env.setProviderUrl("t3://127.0.0.1:7001");
            env.setSecurityPrincipal("system");
            env.setSecurityCredentials("weblogic");

            ic = env.getInitialContext();

        } catch (Exception e) {
            System.out.println("ERROR - Unable to retrieve InitialContext. " + e);
        } finally {
            return ic;
        }
    }


Тащим так-
Код
public static void main(String args[]) {

        System.out.println("Retrieving Company object from WebLogic JNDI tree.");

        try {
            Context ic = getInitialContext();
            Context subcontext = (Context) ic.lookup("LabExample");

            Object obj = subcontext.lookup("Company");

            if (obj != null) {
                Company company = (Company) obj;

                System.out.println("Context Path: " + subcontext.toString());
                System.out.println("");
                System.out.println("Company Object retrieved.....");
                System.out.println("Company Name: " + company.getName());
            } else {
                System.out.println("Unable to retrieve Company object!.");
            }

            ic.close();

        } catch (Exception e) {
            System.out.println("ERROR: Unable to retrieve object from JNDI Tree. " + e);
        }

    }


Как видим, здесь за взаимодействие отвечает класс weblogic.jndi.Environment и протокол t3. Подробнее можно почитать тут.
Вопрос - есть ли в стандарте Java EE такие или подобные возможности или хотя бы расширения в других реализациях - скажем, под IBM WebSphere`ой? Или в других реализациях к хранилищу JNDI можно обращаться только изнутри?


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

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


Опытный
**


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

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



Кажется, что всегда можно (во всяком случае в GlassFish я это проделывал).
Только нужно описать сервис провайдера и адрес JNDI хранилища (то есть эту информацию надо выяснить для данного, используемого поставщика).

Можно использовать файл jndi.properties, например с таким содержанием:

Код

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

Здесь сервис провайдер обеспечивает хранение в файле.
Или примерно так, как сделали Вы: 
Код

    try {
         Hashtable env = new Hashtable(5);
         env.put( Context.INITIAL_CONTEXT_FACTORY,
                  "com.sun.jndi.fscontext.RefFSContextFactory" );
         env.put( Context.PROVIDER_URL, "file:///E:/W_J6/jndi_root" );
         ctx = new InitialContext( env );
     } catch( NamingException ne ) {
         ne.printStackTrace();
     }


Это сообщение отредактировал(а) mbasil - 5.10.2009, 19:38
PM MAIL   Вверх
Се ля ви
Дата 5.10.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Это всё хорошо, но env - это объект какого класса?


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

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


Опытный
**


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

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



Обычный старенький Hashtable

Если Вы "запихнете" все настройки в файл jndi.properties и положите этот файл в правильную директорию, то можно обойтись вариантом:
Код
ctx = new InitialContext();

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


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата

Обычный старенький Hashtable


Это weblogic.jndi.Environment.

Добавлено через 2 минуты и 6 секунд
Цитата(Се ля ви @  4.10.2009,  01:59 Найти цитируемый пост)
Вопрос - есть ли в стандарте Java EE такие или подобные возможности или хотя бы расширения в других реализациях - скажем, под IBM WebSphere`ой? Или в других реализациях к хранилищу JNDI можно обращаться только изнутри?

Да, все стандартным образом стоит делать, не связываясь с веблоджиковскими классами.
См. ответ mbasil плюс стандартный туториал по JNDI.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1042 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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