【问题标题】:why I can inject JNDI string resource from WAR and not from EJB jar module?为什么我可以从 WAR 而不是从 EJB jar 模块注入 JNDI 字符串资源?
【发布时间】:2013-10-29 12:11:04
【问题描述】:

我在服务器中声明了一个外部字符串资源(Jboss 7.1.1 或 WAS 8) 老板:

...
<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;
...

我得到了一个空值!

我错过了什么吗?

【问题讨论】:

  • 您的web.xml 中是否有相关的resource-env-refejb-jar.xml 中没有?
  • 我的错.. 我错过了 ejb-jar.xml 资源引用条目!现在工作正常^^谢谢 Nikos!
  • 请标记为已解决。谢谢。

标签: jakarta-ee jboss resources cdi websphere-8


【解决方案1】:

Nikos 为我指出了正确的解决方案:必须将 ejb-jar.xml 放入类路径 (src\main\resources\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>

请注意,如果您使用 WAS 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 值在 WAS 8 中声明如下:

打开管理控制台,进入环境 > 管理名称空间绑定。选择范围和

  • 绑定类型=字符串
  • 绑定标识符 = foovalue
  • 名称空间中的名称= foovalue
  • 字符串值 = helloworld

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多