2017-06-02 85 views
0

此刻我正在处理必须使用连接工厂的应用程序。 当我通过在WAS中设置的名称直接在全局级别上查找连接工厂时,所有工作都正常,但对于解耦,我想在应用程序中定义资源引用并查找该名称。所以,我创建了以下在我的application.xml条目:无法在Websphere中查找组件级别的资源

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

有没有人知道我在做什么错在这里? 在此先感谢!

回答

0

进一步调查,给我带来了: Lookup jndi resources WebSphere 8.5, Spring 3.1.3, Hibernate 4.1.10 EJB 3

有答案包含:

无论在application.xml的条目,并查找必须用java来preceeded:应用程序/ 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"); 
0

的java:CoMP资源引用被限定在组件,因此资源的参考,需要从你正在试图同一个组件来定义去查找它。请注意,java:app的范围是整个应用程序,所以如果切换到java:app并且工作正常,那么很可能java:comp不起作用,因为资源引用是针对错误的组件定义的。