无法在Websphere中的组件级别上查找资源

时间:2017-06-02 09:33:14

标签: java-ee reference resources websphere jndi

目前,我正在处理必须使用连接工厂的应用程序。 当我在WAS中设置的名称直接在全局级别查找连接工厂时,一切正常,但是为了解耦,我想在我的应用程序中定义资源引用并查找该名称。所以我在application.xml中创建了以下条目:

<resource-ref>
    <res-ref-name>jms/connectionFactory</res-ref-name>
    <res-type>javax.jms.ConnectionFactory</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

然后我在EJB中做的是进行以下查找:

ConnectionFactory connectionFactory = 
(ConnectionFactory) ic.lookup("java:comp/env/jms/connectionFactory");

这导致了这个例外:

javax.naming.NameNotFoundException: Name comp/env/jms not found in context "java:".

我也尝试过:

ConnectionFactory connectionFactory = 
(ConnectionFactory) ic.lookup("java:app/jms/connectionFactory");

导致:

javax.naming.NameNotFoundException: Context: BPMDev/applications/com.ibm.ws.AppNameSpaces/MAN_POT/root,
name: jms/connectionFactory: First component in name jms/connectionFactory not found.

有谁知道我在这里做错了什么? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

进一步调查让我: Lookup jndi resources WebSphere 8.5, Spring 3.1.3, Hibernate 4.1.10 EJB 3

答案包含在内:

application.xml中的条目和查找都必须以java:app / env开头。对于我的情况,这是:

<resource-ref>
    <res-ref-name>java:app/env/jms/connectionFactory</res-ref-name>
    <res-type>javax.jms.ConnectionFactory</res-type>
    <res-auth>Container</res-auth>
   <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

ConnectionFactory connectionFactory = 
(ConnectionFactory) ic.lookup("java:app/env/jms/connectionFactory");

答案 1 :(得分:0)

java:comp资源引用的作用域是组件,因此需要为您尝试查找它的同一组件定义资源引用。请注意,java:app的范围限定为整个应用程序,因此如果您切换到java:app并且工作正常,则java:comp可能不起作用,因为资源引用是针对错误的组件定义的。