2013-10-29 65 views
0

我有一個外部的字符串資源宣佈進入服務器(Jboss的7.1.1或爲8) JBoss的:爲什麼我可以從WAR注入JNDI字符串資源,而不是從EJB jar模塊注入?

... 
<subsystem xmlns="urn:jboss:domain:naming:1.1"> 
    <bindings> 
    <simple name="jboss/resources/foovalue" value="helloworld"/> 
    </bindings> 
</subsystem> 
... 

我可以從我的戰爭模塊得到好聽這樣的:

@ManagedBean 
@RequestScoped 
public class Footest 
... 
@Resource(name = "foovalue") 
private String externalFoo; 
... 

但如果我試圖從EJB模塊(Maven依賴如EJB類型)獲得它,就像

@Stateless 
public class FooServiceImpl implements FooServiceLocal 
... 
    @Resource(name = "foovalue") 
    private String externalFoo; 
... 

我得到一個空值!

我錯過了什麼嗎?

+1

你碰巧有一個相關的'資源-env-ref'在你的'web.xml'中,而不是在'ejb-jar.xml'中? –

+0

我的壞..我錯過了ejb-jar.xml資源ref條目!現在工作很好^^謝謝Nikos! – mid491

+0

請標記爲已解決。謝謝。 –

回答

0

尼科斯向我指出了正確的解決方案:必須有一個ejb-jar.xml中到類路徑中(src \主\資源\ META-INF)

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar 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/ejb-jar_3_1.xsd" 
    version="3.1"> 

     <enterprise-beans> 
      <session> 
       <ejb-name>FooServiceImpl </ejb-name> 
       <resource-ref> 
        <res-ref-name>foovalue</res-ref-name> 
        <res-type>java.lang.String</res-type> 
       </resource-ref> 
      </session> 
     </enterprise-beans> 
    </ejb-jar> 

需要注意的是,如果你使用的爲8。 X您必須聲明的資源爲IBM-EJB-JAR-bnd.xml文件:

<?xml version= "1.0" encoding="UTF-8"?> 
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0"> 

    <session name="FooServiceImpl" > 
     <resource-ref name="foovalue" binding-name="foovalue"/> 
    </session> 
</ejb-jar-bnd> 

參考FOO值被宣佈爲爲8所示:

打開管理控制檯,進入環境>管理名稱空間綁定。選擇範圍和

  • 綁定類型=字符串
  • 綁定標識符= foovalue
  • 在命名空間名稱= foovalue
  • 字符串值=的HelloWorld
相關問題