JBoss Seam: компонент установлен в JNDI, доступ к компоненту говорит «Не привязан» - PullRequest
2 голосов
/ 05 марта 2010

Мой компонент SFSB Seam связан с JNDI при развертывании, о чем свидетельствует это сообщение журнала:

Component: example, scope: CONVERSATION, type: STATEFUL_SESSION_BEAN,
class:com.purecharger.action.ExampleAction, JNDI: purecharger/ExampleAction/local

Мой интерфейс:

@Local
public interface Example {    
    public List<String> getExample();
    public void destroy();
}

и моя реализация:

@Stateful
@Scope(ScopeType.CONVERSATION)
@Name("example")
@Restrict("#{identity.loggedIn}")
public class ExampleAction implements Example, Serializable {

    ....
}

Однако, когда я получаю доступ к компоненту voting на странице xhtml, например, я получаю следующую ошибку:

javax.el.ELException: /home.xhtml: Could not instantiate Seam component: example
....
Caused by: javax.naming.NameNotFoundException: ExampleAction not bound

Если Seam был достаточно умен, чтобы установить мой компонент, используя шаблон JNDI в файле components.xml (purecharger/#{ejbName}/local), почему он также не применяет шаблон при поиске компонентов?

Спасибо.

UPDATE: Глядя на JNDIView в JBoss, имя purecharger/ExampleAction/local нигде не связано. Итак, я думаю, что мой вопрос теперь звучит так: почему Seam не добавляет этот SFSB в JNDI?

1 Ответ

1 голос
/ 06 марта 2010

Почему Seam не добавляет этот SFSB в JNDI?

Ну,

Как показано в вашем вопросе, я думаю, что у вас есть ушное приложение, потому что оноГлобальный адрес JNDI

purecharger/ExampleAction/local

, который отображается в соответствии с

<EAR_APPLICATION>/<STATEFUL_BEAN>/local

При развертывании одного модуля EJB его глобальный адрес JNDI в JBoss выглядит как

<STATEFUL_BEAN>/local

Поскольку у вас есть приложение для ушей, каждый модуль EJB должен быть объявлен в application.xml (файл, который описывает ваше ухо) следующим образом

Таким образом, ваше приложение для уха выглядит как

pureCharger.ear

    META-INF
        application.xml
    pureCharger-ejb.jar
    pureCharger-war.war
    jboss-seam.jar
    lib
        // libraries shared by your modules goes here

И ваш application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
    <display-name>pureCharger</display-name>
    <module>
        <ejb>pureCharger-ejb.jar</ejb>
    </module>
    <module>
        <ejb>jboss-seam.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>pureCharger-war.war</web-uri>
            <context-root>pureCharger</context-root>
        </web>
    </module>
</application>

Обратите внимание, что jboss-seam.jar является EJB-модулем, поэтому он также должен быть объявлен в файле application.xml

Если возможно,используйте Seam-gen для генерации вашего проекта.Он включает в себя все библиотеки, необходимые для вашего проекта, и может быть открыт без ограничений в NetBeans, например.

regards,

...