无法在 Websphere 中的组件级别查找资源
Unable to lookup resource on component level in Websphere
目前我正在开发一个必须使用连接工厂的应用程序。
当我通过 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.
有谁知道我在这里做错了什么?
提前致谢!
进一步调查使我发现:
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");
java:comp 资源引用的范围仅限于组件,因此需要为您尝试查找的同一组件定义资源引用。请注意,java:app 作用于整个应用程序,因此如果您切换到 java:app 并且有效,则可能 java:comp 无效,因为为错误的组件定义了资源引用.
目前我正在开发一个必须使用连接工厂的应用程序。 当我通过 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.
有谁知道我在这里做错了什么? 提前致谢!
进一步调查使我发现: 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");
java:comp 资源引用的范围仅限于组件,因此需要为您尝试查找的同一组件定义资源引用。请注意,java:app 作用于整个应用程序,因此如果您切换到 java:app 并且有效,则可能 java:comp 无效,因为为错误的组件定义了资源引用.