2010-01-18 5 views
8

У меня возникли проблемы с попыткой вызвать метод EJB из приложения Java Application Client. Вот код.Glassfish v3/JNDI запись не может быть найдена!

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 консоли):

INFO: Переносные имена JNDI для EJB HelloBeanExample: [Java: глобальный/Test/HelloBeanExample, Java: глобальный/Test/HelloBeanExample com.test.HelloBeanRemote]

INFO: Glassfish-специфические (Non-портативные) имена 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!

ответ

17

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

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

Нет, здесь, я подозреваю простую проблему пути к классам, вы просто не хватает jar на пути к классам вашего проекта клиента. С GlassFish v3 добавление $GF_HOME/modules/gf-client.jar должно быть достаточным, как упоминалось в How do I access a Remote EJB component from a stand-alone java client? в FAQ EJB GlassFish (я понимаю, что эта банка должна заменить $GF_HOME/lib/appserv-rt.jar, которая существует по причинам совместимости с GFv2). Однако важно сослаться на gf-client.jar из каталога установки GlassFish, или баны, объявленные в его манифесте, не будут найдены.

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

Как только вы зафиксируете это, вы сможете найти свой bean-компонент, используя имена JNDI, которые выходят Glassfish в журналы. Я бы предложил использовать новые переносные глобальные имена JNDI из Java EE 6.

На всякий случай, запись What is the syntax for portable global JNDI names in EJB 3.1? из FAQ по EJB GlassFish дает хорошее резюме этого нового соглашения. И если вам нужна дополнительная информация, проверьте: http://blogs.oracle.com/MaheshKannan/entry/portable_global_jndi_names.

0

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

С уважением

0

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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^