Websphere JNDI查找失败 [英] Websphere JNDI lookup fails

查看:138
本文介绍了Websphere JNDI查找失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我查找用于jdbc数据源的JNDI连接时,出现以下错误:

I am getting below error when I am looking up a JNDI connection for jdbc datasource:

javax.naming.ConfigurationException:无法完成对"java:"名称的JNDI操作,因为服务器运行时无法将操作的线程与任何J2​​EE应用程序组件相关联.当未在服务器应用程序请求的线程上执行使用"java:"名称的JNDI客户端时,会发生这种情况.确保J2EE应用程序不在静态代码块内或该J2EE应用程序创建的线程中的"java:"名称上执行JNDI操作.这样的代码不一定在服务器应用程序请求的线程上运行,因此JNDI操作不支持"java:"名称. [根异常是javax.naming.NameNotFoundException:在上下文"java:"中找不到名称.]

javax.naming.ConfigurationException: A JNDI operation on a "java:" name cannot be completed because the server runtime is not able to associate the operation's thread with any J2EE application component. This condition can occur when the JNDI client using the "java:" name is not executed on the thread of a server application request. Make sure that a J2EE application does not execute JNDI operations on "java:" names within static code blocks or in threads created by that J2EE application. Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on "java:" names. [Root exception is javax.naming.NameNotFoundException: Name not found in context "java:".]

我的查找代码在静态方法内.就是这个错误的原因.我没有创建任何线程

My lookup code is inside a static method. Is that the reason for this error. I am not creating any threads

它可以在tomcat中正常工作

It works in tomcat without any issue

感谢您的帮助

我正在使用的代码如下:

Code I am using is something like below:

  javax.naming.InitialContext ctx = new javax.naming.InitialContext();
  Context cxt = (Context) ctx.lookup("java:/comp/env/");

Stacktrace:

Stacktrace:

C1APP522   2    2013-07-01 21:57:18,332 ERROR DBUtil get EnvContext failed
javax.naming.ConfigurationException: A JNDI operation on a "java:" name cannot be completed because the server runtime is not able to associate the operation's thread with any J2EE application component.  This condition can occur when the JNDI client using the "java:" name is not executed on the thread of a server application request.  Make sure that a J2EE application does not execute JNDI operations on "java:" names within static code blocks or in threads created by that J2EE application.  Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on "java:" names. [Root exception is javax.naming.NameNotFoundException: Name  not found in context "java:".]
    at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:428)
    at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:399)
    at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:220)
    at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:160)
    at javax.naming.InitialContext.lookup(InitialContext.java:436)
    at com.test.integration.database.DBUtil_Ext.getEnvContext(DBUtil_Ext.java:121)
    at com.test.integration.database.DBUtil_Ext.getDataSource(DBUtil_Ext.java:102)
    at com.test.integration.database.DBUtil_Ext.getConnection(DBUtil_Ext.java:70)
    at com.test.integration.IntegrationTransportPlugin_Ext.send(IntegrationTransportPlugin_Ext.java:107)
    at com.test.integration.IntegrationTransportPlugin_Ext.send(IntegrationTransportPlugin_Ext.gs)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.test.system.integration.plugins.PluginProxy.invoke(PluginProxy.java:66)
    at $Proxy58.send(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.test.system.integration.plugins.PluginCallTraceImpl$PluginCallTraceHandler.invoke(PluginCallTraceImpl.java:61)
    at $Proxy58.send(Unknown Source)
    at com.test.system.integration.messaging.dispatch.MessageWriter$2.run(MessageWriter.java:347)
    at com.test.system.transaction.ScopedUserTransaction.run(ScopedUserTransaction.java:54)
    at com.test.system.transaction.TransactionManagerImpl.execute(TransactionManagerImpl.java:111)
    at com.test.system.integration.messaging.dispatch.AckHelper.executeMessageOperation(AckHelper.java:137)
    at com.test.system.integration.messaging.dispatch.AckHelper.executeMessageOperation(AckHelper.java:121)
    at com.test.system.integration.messaging.dispatch.MessageWriter.executeSendAndAfterSendInTxn(MessageWriter.java:332)
    at com.test.system.integration.messaging.dispatch.MessageWriter.sendNextMessage(MessageWriter.java:272)
    at com.test.system.integration.messaging.dispatch.MessageSenderRunnable.trySendMessage(MessageSenderRunnable.java:52)
    at com.test.system.integration.messaging.dispatch.MessageSenderRunnable.send(MessageSenderRunnable.java:42)
    at com.test.system.integration.messaging.dispatch.MessageSenderRunnable.run(MessageSenderRunnable.java:30)
    at com.test.system.integration.messaging.dispatch.MessageWriter$CatchesExceptionRunnable.run(MessageWriter.java:603)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
    at java.util.concurrent.FutureTask.run(FutureTask.java:149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
    at java.lang.Thread.run(Thread.java:736)
Caused by: javax.naming.NameNotFoundException: Name  not found in context "java:".
    at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1837)
    at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1166)
    at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1095)
    at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1233)
    at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:395)
    ... 37 more
C1APP522        2013-07-01 21:57:18,332 ERROR Messaging Exception in MessageSenderRunnable
java.lang.RuntimeException: get EnvContext failed
    at com.test.integration.database.DBUtil_Ext.getEnvContext(DBUtil_Ext.java:125)
    at com.test.integration.database.DBUtil_Ext.getDataSource(DBUtil_Ext.java:102)
    at com.test.integration.database.DBUtil_Ext.getConnection(DBUtil_Ext.java:70)
    at com.test.integration.IntegrationTransportPlugin_Ext.send(IntegrationTransportPlugin_Ext.java:107)
    at com.test.integration.IntegrationTransportPlugin_Ext.send(IntegrationTransportPlugin_Ext.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.test.system.integration.plugins.PluginProxy.invoke(PluginProxy.java:66)
    at $Proxy58.send(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.test.system.integration.plugins.PluginCallTraceImpl$PluginCallTraceHandler.invoke(PluginCallTraceImpl.java:61)
    at $Proxy58.send(Unknown Source)
    at com.test.system.integration.messaging.dispatch.MessageWriter$2.run(MessageWriter.java:347)
    at com.test.system.transaction.ScopedUserTransaction.run(ScopedUserTransaction.java:54)
    at com.test.system.transaction.TransactionManagerImpl.execute(TransactionManagerImpl.java:111)
    at com.test.system.integration.messaging.dispatch.AckHelper.executeMessageOperation(AckHelper.java:137)
    at com.test.system.integration.messaging.dispatch.AckHelper.executeMessageOperation(AckHelper.java:121)
    at com.test.system.integration.messaging.dispatch.MessageWriter.executeSendAndAfterSendInTxn(MessageWriter.java:332)
    at com.test.system.integration.messaging.dispatch.MessageWriter.sendNextMessage(MessageWriter.java:272)
    at com.test.system.integration.messaging.dispatch.MessageSenderRunnable.trySendMessage(MessageSenderRunnable.java:52)
    at com.test.system.integration.messaging.dispatch.MessageSenderRunnable.send(MessageSenderRunnable.java:42)
    at com.test.system.integration.messaging.dispatch.MessageSenderRunnable.run(MessageSenderRunnable.java:30)
    at com.test.system.integration.messaging.dispatch.MessageWriter$CatchesExceptionRunnable.run(MessageWriter.java:603)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
    at java.util.concurrent.FutureTask.run(FutureTask.java:149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
    at java.lang.Thread.run(Thread.java:736)

推荐答案

假设您在WAS中配置了数据源,则有两个选择:

Assuming you have data source configured in WAS, you have two options:

a.在部署期间,将数据源绑定到调用组件的名称空间,并使用以'java:comp/env/'开头的名称进行查找.例如,要为整个Web应用程序绑定数据源,应在web.xml中添加以下内容:

a. During deployment bind data source into calling component's namespace and use the name starting with 'java:comp/env/' for lookup. For example, to bind data source for the whole web application you should add the following to web.xml:

<resource-ref>
  <res-ref-name>name_used_in_lookup</res-ref-name>
  <jndi-name>data_source_jndi_name</jndi-name>
</resource-ref>

name_used_in_lookup应该没有'java:comp/env/'部分.

name_used_in_lookup should be without 'java:comp/env/' part.

b.直接通过其JNDI名称查找数据源,而无需使用'java:comp/env/'

b. Look up data source directly by its JNDI name without using 'java:comp/env/'

这篇关于Websphere JNDI查找失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆