Проблемы с Glassfish v3 / JNDI не найдены! - PullRequest
9 голосов
/ 18 января 2010

У меня возникли проблемы при попытке вызвать метод EJB из Java Application Client. Вот код.

EJB Remote Interface

package com.test;

import javax.ejb.Remote;

@Remote
public interface HelloBeanRemote {

    public String sayHello();

}

EJB

package com.test;

import javax.ejb.Stateless;

@Stateless (name="HelloBeanExample" , mappedName="ejb/HelloBean")
public class HelloBean implements HelloBeanRemote {

    @Override
    public String sayHello(){

        return "hola";

    }

}

Основной класс (другой проект)

import com.test.HelloBeanRemote;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Main {


    public void runTest()throws Exception{

        Context ctx = new InitialContext();
        HelloBeanRemote  bean = (HelloBeanRemote)ctx.lookup("java:global/Test/HelloBeanExample!com.test.HelloBeanRemote");
        System.out.println(bean.sayHello());

    }


    public static void main(String[] args)throws Exception {

        Main main = new Main();
        main.runTest();

    }

}

Ну, в чем моя проблема? Запись JNDI для этого EJB не найдена!

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)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at testdesktop.Main.runTest(Main.java:22)
        at testdesktop.Main.main(Main.java:31) Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/Test/HelloBeanExample!com.test.HelloBeanRemote' in SerialContext  [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]]
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at testdesktop.Main.runTest(Main.java:22)
        at testdesktop.Main.main(Main.java:31) 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)
        ... 3 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)
        ... 4 more Java Result: 1

Я пробовал разные записи JNDI, но ничего не работает (я получил эти записи из консоли NetBeans):

ИНФОРМАЦИЯ: Переносимые имена JNDI для EJB HelloBeanExample: [java: global / Test / HelloBeanExample, java: global / Test / HelloBeanExample! Com.test.HelloBeanRemote]

ИНФОРМАЦИЯ: Специфичные для Glassfish (непереносимые) имена JNDI для EJB HelloBeanExample: [ejb / HelloBean, ejb / HelloBean # com.test.HelloBeanRemote]

Итак, я попробовал следующие записи, но получил то же исключение:

  1. Java: глобальный / Test / HelloBeanExample
  2. Java: глобальный / Test / HelloBeanExample com.test.HelloBeanRemote
  3. EJB / HelloBean
  4. EJB / HelloBean # com.test.HelloBeanRemote

Я использую Netbeans 6.8 и Glassfish v3!

Ответы [ 4 ]

17 голосов
/ 19 января 2010

На самом деле, ваша проблема , а не поиск ссылки JNDI вашего компонента, или вы получите что-то вроде этого:

Caused by: javax.naming.NameNotFoundException: ejb/HelloBean not found

Нет, здесь, я подозреваю, простой путь к классампроблема в том, что вы просто пропускаете банку на пути к классам вашего клиентского проекта.В GlassFish v3 добавления $GF_HOME/modules/gf-client.jar должно быть достаточно, как указано в Как получить доступ к компоненту Remote EJB из автономного Java-клиента? в FAQ по GlassFish EJB (насколько я понимаю, этот jar должензамените $GF_HOME/lib/appserv-rt.jar, который есть по причинам совместимости с GFv2).Однако важно сослаться на gf-client.jar из установочного каталога GlassFish, иначе файлы, объявленные в его манифесте, не будут найдены.

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

После того, как вы исправите это, вы сможете искать ваш компонент, используя имена JNDI, которые GlassFish выводит в журналах.Я бы предложил использовать новые переносимые глобальные имена JNDI из Java EE 6.

На всякий случай, Каков синтаксис для переносимых глобальных имен JNDI в записи EJB 3.1? изВ FAQ по GlassFish EJB содержится краткое изложение этого нового соглашения.А если вам нужна дополнительная информация, проверьте: http://blogs.oracle.com/MaheshKannan/entry/portable_global_jndi_names.

0 голосов
/ 12 апреля 2012

Мой автономный клиент наконец-то запускается! Хитрость заключалась в том, чтобы просто перезапустить IDE Netbeans, развернуть приложение и повторно развернуть его. Это должно решить вашу проблему (при условии, что в вашем коде и конфигурации нет других ошибок).

0 голосов
/ 11 апреля 2012

Я столкнулся с той же проблемой. Я гуглил в Интернете и следовал инструкциям от Oracle построчно, чтобы настроить автономный клиент Java, но все равно ничего не работает. Я наткнулся на http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html, и у него есть информация, что я уже пытался решить проблему.

Я просто перезапущу свою IDE, очистлю и соберу проект; Может быть, также создать проект заново. И кто знает, когда луна полна, мой код может работать нормально :) Так что, возможно, я тоже хочу попробовать

0 голосов
/ 05 апреля 2010

Я что-то нашел! Я думаю, что есть «особый способ» для добавления и настройки компонентов с помощью NetBeans! Я читал учебные пособия по NetBeans с веб-страниц, и, видимо, я все делал неправильно! Таким образом, это не реальное решение этой проблемы, но, возможно, если вы прочитаете один из этих http://netbeans.org/kb/trails/java-ee.html, вы найдете свои ответы!

С уважением

...