2010-03-05 51 views
2

我SFSB Seam組件被綁定到JNDI上的部署,通過這個日誌消息證明:JBoss 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組件在XH TML頁面就好了,我得到以下錯誤:

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

如果接縫查找部件時很聰明用在components.xml的JNDI模式(purecharger/#{ejbName}/local),它爲何不同樣適用的模式來安裝我的組件?

謝謝。

UPDATE: 綜觀關於JNDIView在JBoss中,這個名字purecharger/ExampleAction/local不被任何約束。所以我想現在我的問題就變成了,爲什麼Seam不將這個SFSB添加到JNDI中?

回答

1

Why is Seam not adding this SFSB to JNDI ?

好,

正如你的問題表示,我認爲你有一個耳朵的應用程序,因爲這是根據

<EAR_APPLICATION>/<STATEFUL_BEAN>/local 
映射的JNDI全局地址

purecharger/ExampleAction/local 

當您部署單個EJB模塊時,其在JBoss中的JNDI全局地址看起來像

<STATEFUL_BEAN>/local 

Bacause你有耳朵的應用,每個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-SE am.jar是一個EJB模塊,所以它也應該在application.xml文件中聲明

如果可能,使用Seam-gen生成你的項目。它需要注意包括項目所需的所有庫,並且可以在NetBeans中無限制地打開它。

關於,

+0

謝謝亞瑟,這是問題所在。我不僅沒有在application.xml中聲明我的包含EJB的jar,我還試圖將它放在war/WEB-INF/lib中,這是不正確的(至少在EJB規範的v3.1之前)。 – purecharger 2010-03-08 03:59:33