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

Jakarta ee 无法在Websphere中的组件级别查找资源,jakarta-ee,reference,resources,websphere,jndi,Jakarta Ee,Reference,Resources,Websphere,Jndi,目前,我正在开发一个必须使用连接工厂的应用程序。 当我通过在中设置的名称直接在全局级别上查找连接工厂时,一切正常,但为了实现解耦,我希望在应用程序中定义一个资源引用并查找该名称。因此,我在application.xml中创建了以下条目: <resource-ref> <res-ref-name>jms/connectionFactory</res-ref-name> <res-type>javax.jms.ConnectionFac

目前,我正在开发一个必须使用连接工厂的应用程序。 当我通过在中设置的名称直接在全局级别上查找连接工厂时,一切正常,但为了实现解耦,我希望在应用程序中定义一个资源引用并查找该名称。因此,我在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>
这导致了以下例外情况:

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.
有人知道我做错了什么吗?
提前谢谢

进一步的调查使我想到:

答案如下:

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>

java:comp资源引用的作用域是组件,因此需要为您试图从中查找资源的同一组件定义资源引用。请注意,java:app的作用域是整个应用程序,因此,如果您切换到java:app并成功,那么java:comp很可能无法工作,因为资源引用是为错误的组件定义的

<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");