JBoss Seam:安装在JNDI中的组件,组件的访问称为Not Bound

时间:2010-03-05 19:59:14

标签: java jsf jboss seam

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

1 个答案:

答案 0 :(得分:1)

  

为什么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中无限制地打开。

的问候,