Glassfish v3 / запись JNDI не может быть найден проблемы!

У меня были проблемы при попытке назвать метод EJB от Клиента JAVA-приложения. Вот код.

EJB удаленный интерфейс

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:global/Test/HelloBeanExample
  2. java:global/Test/HelloBeanExample! com.test. HelloBeanRemote
  3. ejb/HelloBean
  4. ejb/HelloBean#com.test. HelloBeanRemote

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

9
задан Pascal Thivent 19 January 2010 в 02:39
поделиться

2 ответа

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

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

Нет, здесь я подозреваю просто Проблема классов, вы просто пропускаете некоторую банку на классе вашего клиента проекта. С GlassFish V3, добавление $ GF_HOME / модулей / GF-Client.jar должно быть достаточно, как упоминалось в Как доступ к удаленному компоненту EJB из автономного клиента Java? FAQ EJB GlassFish - это то, что эта банка должна заменить $ gf_home / lib / appserv-rt.jar , который есть для соображений совместимости с GFV2). Тем не менее, важно обратиться в GF-Client.jar из каталога установки GlassFish или JARS, объявленные в его манифесте, не будут найдены.

GF-Client.jar относится к многим другим .jars из каталога установки Glassfish, чтобы лучше всего обратиться к нему в самом каталоге установки, а не копировать его (и все остальные .jars) к другому расположение.

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

На всякий случай Какой синтаксис для портативных имен Global JNDI в EJB 3.1? Вход от FAQ Glassfish EJB Предоставляет хорошее резюме этой новой конвенции. И если вы хотите больше информации, проверить: http://blogs.orcle.com/maheshkannan/entry/portable_global_jndi_names .

17
ответ дан 4 December 2019 в 12:18
поделиться

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

С уважением

0
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: