2013-08-21 6 views
0

Я хотел бы узнать, как работать с EJB, поэтому я начал читать «Enterprise JavaBeans 3.1 6th edition». После создания первого примера (глава примера FirstEJB) у меня проблема с NameNotFoundException. Насколько я знаю, это означает, что EJB не отображается/не существует на контейнере. Проект кажется очень простым, но я не знаю, как решить проблему. Любая помощь? Проект можно найти здесь https://github.com/pepuch/EJB-ch04-firstejb. Так я работал с этим проектом.Первый EJB - NameNotFoundException

  1. Я построил ejb проект с использованием gradle clean build команды и развернутым создал ejb-1.0.jar на сервер с помощью GlassFish администратора сайта.
  2. Я начал тестирование клиентского модуля, используя gradle clean test. Этот тест показывает исключение NameNotFoundException.

В нескольких словах проект состоит из двух подпроектов:

  1. EJB - проект создает EJB JAR
  2. клиента - проект содержит только один модульный тест, который пытается создать и использовать EJB

[ОБНОВЛЕНИЕ]

Я начал заявку на jboss serve r и он работает. Вот как выглядит код для JBoss:

// класс, который использует EJB

Context context = new InitialContext(); 
context = new InitialContext(); 
final String JNDI_NAME_CALC = "SimpleCalculatorBean/remote"; 
CalculatorCommonBusiness calc = (CalculatorCommonBusiness)context.lookup(JNDI_NAME_CALC); 
calc.add(2,3,4,5); 

// jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory 
java.naming.provider.url=localhost:1099 

Я до сих пор не может начать приложение на GlassFish сервере.

ответ

0

Сначала проверьте, создан ли EJB. Для этого проверьте журнал сервера приложений. Он должен написать doen имя опубликованного EJB. Создано? Проверьте имя.

Шаг 2: Проверьте, что пакет вашего интерфейса-заглушки совпадает с опубликованным удаленным/локальным интерфейсом EJB. Это может быть причиной.

UPDATE:

calc = (SimpleCalculatorBean) namingContext.lookup(JNDI_NAME_CALC); 

Вы должны получить интерфейс EJB, а не боб непосредственно. Кроме того, @Local интерфейс на EJB может не работать - возможно, вам нужно сделать это @Remote.

+1

1. Я проверил журнал, и я нашел 'Портативные имена JNDI для EJB SimpleCalculatorBean: [java: global/ejb-1.0/SimpleCalculatorBean, ...]', поэтому это правильно. Если вы можете, проверьте исходный код на github. 2. Насколько я понимаю, вы - класс bean-классов реализуете интерфейс, поэтому он должен быть правильным. Можете ли вы написать, что вы имеете в виду? – pepuch

+0

Все еще без успеха на сервере. Я тестировал приложение на сервере jboss, и он работает над ним. – pepuch

+0

Вы изменили интерфейс на Remote? –

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