Каким образом должен быть правильно вставлен сеансовый компонент EJB без сохранения состояния в веб-модуль?

Будучи совершенно новичком в Java EE (но не в самой Java), я пытаюсь создать очень простое «корпоративное приложение» с Hibernate в качестве поставщика JPA и JSF в качестве фактической инфраструктуры пользовательского интерфейса. Для этих целей я использую NetBeans 7 с GlassFish 3.1.

{ApplicationName} -ejb:

Мне удалось сгенерировать классов сущностей из базы данных и локальных сессионных компонентов для этих лиц. Beans.xml на месте.

@Stateless
public class QuestFacade extends AbstractFacade<Quest> implements QuestFacadeLocal {
    // some methods here as well as EntityManager injection ...
}

{ApplicationName} -war:

Я создал простой POJO в качестве вспомогательного bean-компонента для страницы JSF. Я аннотировал его с помощью javax.inject. @ Named и javax.enterprise.context. @ SessionScoped . Этот компонент поддержки теперь доступен со страницы JSF, а также внедряется при обращении к фактической странице. Beans.xml также на месте.

@Named
@SessionScoped
public class QuestBean implements Serializable {

    @EJB
    protected QuestFacade questFacade;

    // several methods delegating lookups to the questFacade ...
}

После того, как это развернуто и страница открыта, я, однако, получаю сообщение об ошибке от GlassFish, что QuestFacade не может быть найден с помощью JNDI.

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

Caused by: javax.naming.NamingException: Lookup failed for 'model.session.QuestFacade#model.session.QuestFacade' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: model.session.QuestFacade#model.session.QuestFacade not found]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:173)
    ... 74 more
Caused by: javax.naming.NameNotFoundException: model.session.QuestFacade#model.session.QuestFacade not found
    at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:248)
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:215)
    at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
    at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:119)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:505)
    ... 78 more

Я понимаю, что убеждаю GlassFish внедрить EJB из другого модуля в том же приложении. Следует ли вместо этого использовать интерфейс @Remote ?Я также попытался явно указать имя для аннотации @Stateless и @EJB , но безуспешно.

Я считаю, что делаю что-то в корне неправильно, но Я не могу выяснить, что.

Любое предложение или будет очень признательно!

9
задан Arjan Tijms 12 June 2011 в 15:10
поделиться