Поиск EJB JNDI из режима разработки GWT в Glassfish v3

Я пытаюсь выполнить поиск по JNDI из режима разработки GWT.

У меня есть местный glassfishv3, на котором запущены EJB-компоненты, которые я хочу найти. Если я разверну GWT-Webapp в указанной стеклянной рыбке, все будет работать, как ожидалось. Но если я попытаюсь найти EJB-компоненты из режима разработки, я получу следующее исключение:

javax.naming.NamingException: Lookup failed for 'myBean' in SerialContext  [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]] ... Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]
        at com.sun.enterprise.naming.impl.SerialContext.getProvider (SerialContext.java:276)
        at com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:430)
        ... 22 more Caused by: java.lang.NullPointerException
        at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider (SerialContext.java:297)
        at com.sun.enterprise.naming.impl.SerialContext.getProvider (SerialContext.java:271)
        ... 23 more

Кажется, что встроенная пристань не может найти класс SerialContextProvider в пути к классам.

Я попытался добавить gf-client.jar и glassfish-naming.jar в путь к классам (в дополнение к добавлению glassfish v3 в целевые среды выполнения в eclipse), но безрезультатно.

Я даже собрал небольшой образец (здесь: http://satansoft.de/jnditest/jnditest.tgz), содержащий простой проект EJB, а также проект GWT, выполняющий поиск. Архив также содержит небольшой клиент CLI, который отлично работает при запуске с gf-client.jar в пути к классам.

Я также задавал этот вопрос в официальном списке рассылки gwt, но никто из них не смог мне помочь.

Итак: кому-нибудь удалось выполнить поиск JNDI из режима разработки GWT в Glassfish v3?


person nsn    schedule 01.02.2010    source источник
comment
Этот документ может быть полезен: docs.sun. com / app / docs / doc / 820-7695 / beanv? l = en & a = view. Похоже, что для доступа сервера Jetty к компоненту на удаленном GF необходимо выполнить некоторую настройку. Наиболее вероятная проблема заключается в том, что вы пропустили одно или настроили приложение GWT, а не сервер.   -  person vkraemer    schedule 04.02.2010


Ответы (3)


Добавьте все jar-файлы из каталога модулей Glassfish в каталог war / WEB-INF / lib вашего проекта Eclipse GWT.

person Serge Bajda    schedule 03.03.2010

Я не проверял это, но не уверен, что Jetty подберет все банки, указанные в манифесте gf-client.jar (см. Часто задаваемые вопросы по EJB GlassFish или предыдущий ответ, чтобы узнать об этом подробнее). Итак, хотя я уверен, что этот JAR хорошо работает при использовании автономного клиента (потому что я это тестировал), я не пробовал использовать встроенный Jetty.

Итак, попробуйте добавить следующие JAR-файлы вручную: glassfish-naming.jar, internal-api.jar, javax.ejb.jar, hk2-core.jar, auto-depends.jar, glassfish-api.jar.

person Pascal Thivent    schedule 01.02.2010
comment
Нет, это тоже не сработало - я получаю ту же ошибку. Я даже попытался добавить все JAR в папку glassfish / modules - поиск по-прежнему не удался - person nsn; 02.02.2010

Я не понимаю твоих настроек. Вы работаете либо в Glassfish, либо во встроенной Jetty. Если вы работаете в Jetty, это не сработает, поскольку вы работаете не на том сервере.

Я также использую сессионные компоненты и другую технологию J2EE в сочетании с GWT, и это работает очень хорошо.

Единственное, что вам нужно сделать, это НЕ запускать сервер Jetty. Я запускаю режим разработки с помощью -noserver и запускаю Glassfish. Если вы настроили это правильно, вы можете использовать DevMode, и код сервера в Glassfish работает нормально. Развертывание немного сложнее, так как вам нужно убедиться, что сервер Glassfish обновлен.

person David Nouls    schedule 02.02.2010
comment
Сами SessionBeans работают на Glassfish, а по мере разработки с использованием Eclipse я использую плагин GWT-Eclipse. Таким образом, само приложение GWT работает на встроенной пристани. Вы предлагаете запустить само приложение на Glassfish и использовать режим devmode без сервера ... Но разве тогда мне не нужно повторно развертывать веб-приложение каждый раз, когда я вношу изменения в исходный код? - person nsn; 02.02.2010
comment
Хорошо, я смог настроить devmode с помощью -noserver. Теперь Webapp работает на сервере Glassfish, и я все еще могу отлаживать его в режиме разработки. Но теперь мне приходится повторно развертывать приложение каждый раз, когда я вношу изменения в исходный код, это почти невыносимо, так как это продлевает цикл разработки. Забавно: использование этого метода делает JNDI-поиск устаревшим, потому что я мог бы просто использовать инъекцию зависимостей для получения EJB-компонентов ...;) - person nsn; 02.02.2010
comment
Да, вы правы, нужно передислоцировать. Но если он использует горячее развертывание, вы этого не заметите. Для изменений пользовательского интерфейса повторное развертывание не требуется. Вам просто нужно собрать один раз, чтобы был доступен файл начальной загрузки js. - person David Nouls; 03.02.2010