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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с доступом к JNDI из NetBeans 
V
    Опции темы
perceptron01
Дата 16.3.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Только недавно начал разбираться со средой JDK и NetBeans. Задача заключается в том, чтобы создать клиент обмена сообщениями.

Создал в GlassFish ConnectionFactory. 

Вот код доступа к ней:

Код

 public void Send() {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.println("Enter Connection name");
            String factoryname = reader.readLine();       

            //Поиск администрируемых объектов
            InitialContext initContext = new InitialContext();
            ConnectionFactory factory = (ConnectionFactory) initContext.lookup(factoryname);
.....
             }
}


При попытке доступа, кидает мне эксепшн такого содержания
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

Не могу определить:
1) где хранится этот файл java.naming.factory.initial;
2) И как туда правильно прописывать?
    Делал попытки прописать в файл *.properties  корне каталога проекта что то типа этого
   
Код

   java.naming.factory.initial=com.sun.enterprise.naming.jms.Example1ConnectionFactory
   

   но всеравно не фурычит, так как не совсем понимаю весь смысл этого
   
Код

   com.sun.enterprise.naming.jms.Example1ConnectionFactory
   


Буду рад любым дельным советам
PM MAIL ICQ   Вверх
mbasil
Дата 17.3.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Найдите по адресу 

тут

ответ на вопрос

How do I access a Remote EJB from a stand-alone java client?

Можно проще и вручную:

Создайте файл с названием jndi.properties в корневой директории Java проекта и поместите в него следующий контент:
Код

java.naming.factory.initial = com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs = com.sun.enterprise.naming
java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
#optional.  Defaults to localhost.  Only needed if web server is running
#on a different host than the appserver
org.omg.CORBA.ORBInitialHost = localhost
#optional.  Defaults to 3700.  Only needed if target orb port is not 3700.
org.omg.CORBA.ORBInitialPort = 3700

Теперь можно загрузить свойства следующим образом:
Код

package testclient;

import java.io.FileInputStream;
import java.util.Properties;
import javax.naming.InitialContext;
import stateless.TestEJBRemote;

public class Main {

    public static void main(String[] args) {
        try {
            Properties props = new Properties();
            props.load(new FileInputStream("jndi.properties"));
            InitialContext ctx = new InitialContext(props);
            Object obj = ctx.lookup(". . .");
            System.out.println( obj );
        } catch (NamingException nex) {
            nex.printStackTrace();
        } catch (FileNotFoundException fnfex) {
            fnfex.printStackTrace();
        } catch (IOException ioex) {
            ioex.printStackTrace();
        }

    }
 }
}


Это сообщение отредактировал(а) mbasil - 17.3.2009, 14:00
PM MAIL   Вверх
perceptron01
Дата 17.3.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Запустил ваш пример, но получил ошибку такого содержания
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]

также пробовал зарегистрировать через консоль
java -classpath $APS_HOME/lib/appserv-rt.jar:$APS_HOME/lib/javaee.jar: C:\JMSexample\src MainClass

Выдало эксепшн, хотя класс "MainClass" есть в той папке и в нем есть main()

Exception in thread "main" java.lang.NoClassDefFoundError: MainClass
Caused by: java.lang.ClassNotFoundException: MainClass
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: MainClass  Program will exit.




Это сообщение отредактировал(а) perceptron01 - 17.3.2009, 17:26
PM MAIL ICQ   Вверх
mbasil
Дата 17.3.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Извините, а класс не в пакете ?

В частности тот глупый пример класса, что я привел использует пакет testclient,
так что его надо вызывать как testclient.Main

Интересно ссылки, на JARы как в UNIX через:
Код
$APS_HOME
 и разделитель двоеточие
а на C:\JMSexample\src как в Windows ?
 И еще у вас здесь 
Код
. . . javaee.jar: C:\JMSexample\src

после двоеточия стоит пробел ест ли UNIX это ?

Это сообщение отредактировал(а) mbasil - 17.3.2009, 18:21
PM MAIL   Вверх
perceptron01
Дата 17.3.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот только что поместил класс в пакет, но ничего не изменило. 

Сам только заметил что по видимому java не различает "/" и  "\".  
Менял и так и сяк, на результат не повлияло(

Видимо упустил какую то мелочь... 

Это сообщение отредактировал(а) perceptron01 - 17.3.2009, 18:26
PM MAIL ICQ   Вверх
mbasil
Дата 17.3.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если вы работаете в NetBeans просто подключите библиотеки в свойствах проекта.

Да дело не в косых чертах, Java жрет их так "/" и на Windows
Вы в какой операционке работаете. В Windows ссылка на переменную окружающей среды делается с использованием знаков %, а не $ и разделитель в CLASSPATH символ "точка с запятой"

Добавлено через 10 минут и 33 секунды
Кстати для простоты можете контекст JNDI искать без файла свойств программно :
Код

  Properties props = new Properties();
  props.setProperty( Context.PROVIDER_URL, "iiop://myremoteserver:3700");
// props.put( Context.PROVIDER_URL, "iiop://173.24.56.356:3700" );
  props.setProperty( Context.INITIAL_CONTEXT_FACTORY,
                    "com.sun.enterprise.naming.SerialInitContextFactory");
  props.setProperty( Context.URL_PKG_PREFIXES, "com.sun.enterprise.naming");
  props.setProperty( Context.STATE_FACTORIES,
                     "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 
  Context ic = new InitialContext( props );


Это сообщение отредактировал(а) mbasil - 17.3.2009, 18:30
PM MAIL   Вверх
perceptron01
Дата 17.3.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну почти заработало, только выкинуло это

Exception in thread "main" java.lang.NoClassDefFoundError: org/netbeans/modules/schema2beans/BaseBean

я так понимаю что оно не может найти этот JNDI обьект, который я создал на сервере?
PM MAIL ICQ   Вверх
mbasil
Дата 17.3.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В консоли Gjassfish есть монитор всех JNDI объектов в текущий момент помещеных в JNDI с их именами. Каждый сервер генерирует внутренним образом свой формат имен. Поищите настоящее имя, скорее всего оно не совпадает с тем, которое вы предполагаете.  
PM MAIL   Вверх
perceptron01
Дата 18.3.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



С вашей помощью я разобрался с Контекстом вдоль и в поперек) 

Но вот последний эксепшн, никак не могу понять с чем он связан
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/enterprise/admin/monitor/registry/MonitoringLevelListener
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        .......


Мою ConnectionFactory находит я уверен на все 100, так как если бы не находило выкидывало бы эксепшн такого характера
javax.naming.NameNotFoundException: myConneector not found
PM MAIL ICQ   Вверх
mbasil
Дата 18.3.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тупо, поиском в ОС, нашел это класс в JAR файле appserv-admin.jar
Попробуйте подключить и его.
PM MAIL   Вверх
perceptron01
Дата 18.3.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все никак не хочет корректно запускаться!

Снова меня обрадовало ..

WARNING: "IOP00810211: (MARSHAL) Exception from readValue on ValueHandler in CDRInputStream"
org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 211 completed: Maybe
.......
Caused by: java.io.IOException: Mismatched serialization UIDs : Source (Rep. IDRMI:com.sun.enterprise.deployment.OrderedSet:B90A5B5267765469:A24145634121AEA9) = A24145634121AEA9 whereas Target (Rep. ID RMI:com.sun.enterprise.deployment.OrderedSet:B90A5B5267765469:05208D7E42793708) = 05208D7E42793708



вот нашел на сайте IBM предположительное решение
This is a known problem and results from the way that VA Java generates the serialized version UID for EJB classes. This problem can be corrected by modifying the last 3 or 4 digits of the serialVersionUID that was generated for the bean and primary key classes. Change the last 3 or 4 digits to some unique value, generate the deployed code, and export the jar file.

Только мне неясно где изменить этот UID

Это сообщение отредактировал(а) perceptron01 - 18.3.2009, 15:45
PM MAIL ICQ   Вверх
perceptron01
Дата 19.3.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Огромное спасибо за ваше время!

Хоть и остались некоторые вопросы, но они уже вне темы этого топика

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


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

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