当前位置: 首页 > 知识库问答 >
问题:

为什么我可以从WAR而不是从EJB jar模块注入JNDI字符串资源?

陶腾
2023-03-14

我有一个外部字符串资源声明到服务器(JBoss 7.1.1或WA 8)JBoss:

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

我可以从我的war模块中很好地获得它,如下所示:

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

但是如果我试图从EJB模块(Maven dependency作为EJB类型)获取它,比如

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

我得到一个空值!

我错过什么了吗?

共有1个答案

康泽宇
2023-03-14

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
 类似资料:
  • 问题内容: 在.NET Framework 的参考中,使用type 声明请求类型。 在RFC 2616 中,声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE …)。 .NET 和类中也存在类似的行为。 Java在方法上有类似的方法。 这些语言设计者为什么不考虑为这些HTTP方法实现枚举? 你有好主意吗? 问题答案: RFC 2616 链接的第一句话(添加了重点): HTTP

  • 我试图使用本机模块上的反应本机从android获取设备名称和软件包安装程序,但我总是得到一个空值? 我的代码如下 结果总是null! 和包是: 在Main Application类中,我添加了包 在我的应用程序中,我有以下代码 有什么帮助吗,非常感谢。

  • 问题内容: 这是我的: 该文件应在测试期间从中创建数据源,因为缺少具有真实数据源的真实应用服务器: 这是测试类: 不幸的是,没有创建数据源,这就是我一直看到的内容: 我究竟做错了什么?请帮忙! ps。顺便说一下,这是怎么回事(怎么回事?): 问题答案: 查找时应找到 您也可以在TestCase中进行注入。基本上,您: 添加一个空的或 注释您的测试 呼叫 请参阅examples.zip中的示例 编辑

  • 问题内容: 我正在编写有关嵌套库的文档(个人),该文档与感兴趣的子模块程序包所提供的MPL有所不同。我正在编写Python脚本,希望该脚本可以自动从将来的MPL版本中生成文档。 我选择了感兴趣的子模块/程序包,并希望列出其主要类,然后从中生成列表并进行处理。pydoc 问题是我找不到指示Python从字符串加载子模块的方法。这是我尝试过的示例: 这是通过pprint比较上述列表的三种方式: 我不明

  • 问题内容: 我有一个需要一些模块。有没有办法可以注入模块本身?我意识到这有点麻烦。 例: 我想在这种情况下,解决方案是将方法转换为完整的类。这显然是一个简化的示例;我正在处理的代码有很多这样的方法,因此将它们分成单独的类并引入配置它们的模块会增加相当多的混乱- 我认为Guice就是要减少样板混乱? 也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么… 问