2013-05-10 3 views
6

Я новичок в EJB и пытался использовать программу Hello World для EJB Java. Вот мой EJB:EJB - Поиск не удалось для 'ejb/BookRequestBean'

package dukesbookstore.ejb; 
@Stateless(name="BookRequestBean", mappedName="ejb/BookRequestBean") 
@Named 
public class BookRequestBean { 
    //Other codes here 
} 

и вот мой клиент:

Properties prop = new Properties(); 
    prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); 
    prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); 
    prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
    try { 
     InitialContext ctx = new InitialContext(prop);        
     ctx.lookup("ejb/BookRequestBean"); 
     System.out.println("EJB Look-up successfull!!"); 
    } catch (NamingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Но всякий раз, когда я пытаюсь запустить, я получаю ниже исключения:

javax.naming.NamingException: Поиск не удалось для 'ejb/BookRequestBean' в SerialContext [myEnv = {org.omg.CORBA.ORBInitialPort = 3700, java.naming.factory.initial = com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost = localhost, java

Я добавил appserv-rt.jar, gf-client.jar, javaee.jar, но все еще не повезло. Кто-нибудь может мне помочь, чего я здесь не хватает? Я usign Glassfish 3,1

+0

Полная стежка поможет. Удостоверьтесь, что вы также смотрите на это: http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#POJOLocalEJB – LMeyer

ответ

2

В дополнение к хорошей @RaviTrivedi ответ, вот несколько мыслей:

  • @Named аннотаций не должны использоваться таким образом
  • не используют как name и mappedName, для Glassfish достаточно использовать только mappedName
  • ваш EJB должен реализовать интерфейс удаленного
+0

Незначительное междометие. 'name' используется для идентификации EJB, тогда как' mappedName' является именем JNDI EJB. Также 'mappedName' является специфичным для поставщика. т.е.: поддержка Glassfish, Websphere нет. –

+0

@RaviTrivedi Да, поэтому я отметил, что для Glassfish этого достаточно. Его нельзя использовать, если вы хотите полностью переносить приложения. –

6

Там может быть несколько причин для этого:

1) Ваш EJB не отображается в JNDI имя. Вам необходимо проверить, успешно ли установлен ваш EJB, и он отображается на JNDI. Вы можете проверить Server GUI, Server Log on startup или использовать Universal Test Client, чтобы узнать, правильно ли отображается EJB. Примечание. UTC будет показывать только Удаленный экспонат EJB.

2) Ваш EJB только подвергается воздействию местного применения. В этом случае Удаленный вызов или Перекрестный вызов приложения (разные EAR, WAR ...) на ваш EJB не удастся. В этом случае создайте Удаленный интерфейс и разоблачите его. Локальный интерфейс подвергает EJB только локальным вызовам. Удаленный интерфейс предоставляет EJB удаленным или перекрестные заявки на звонки.

3) Ваш RMI/IIOPпорт может быть неправильным. Вы можете проверить, есть ли Glassfish GUI или Server startup log, чтобы увидеть, что портRMI/IIOP предназначено.

Примечание: Для диагностики точной проблемы, пожалуйста, отправьте полную статистику стека.

+0

+1, спасибо за ответ :) –

+0

Не беспокойтесь, товарищ, привет! –

2

Добавление к @Ravi Триведи и @Miljen Miki c, если вы используете Glassfish, вы должны проверить, как ваш EJB зарегистрирован в JNDI. В Glassfish, например, введите следующую команду:

asadmin list-jndi-entries 
+0

, чтобы увидеть EJB, зарегистрированный в JNDI с asadmin - отлично. – Thufir

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