我的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 {

    ....
}


但是,当我在xhtml页面中访问voting组件时,出现以下错误:

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


如果Seam足够聪明,可以使用components.xml(purecharger/#{ejbName}/local)中的JNDI模式安装我的组件,为什么在查找组件时它也没有应用该模式?

谢谢。

更新:
查看JBoss中的JNDIView,名称purecharger/ExampleAction/local没有绑定到任何地方。所以我想我的问题现在变成了,为什么Seam不将此SFSB添加到JNDI?

最佳答案

为什么Seam不将此SFSB添加到JNDI?


好,

如您的问题所示,我认为您有一个耳部应用程序,因为它的JNDI全球地址

purecharger/ExampleAction/local


根据

<EAR_APPLICATION>/<STATEFUL_BEAN>/local


当您部署单个EJB模块时,其在JBoss中的JNDI全局地址看起来像

<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中不受限制地打开它。

问候,

关于java - JBoss Seam:组件安装在JNDI中,访问该组件时显示Not Bound,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2389596/

10-11 09:31