Websphere JNDI查找失败

时间:2013-07-01 19:27:52

标签: tomcat websphere jndi

当我查找jdbc数据源的JNDI连接时,我收到以下错误:

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

我的查找代码在静态方法中。这是导致此错误的原因。我没有创建任何线程

它在没有任何问题的tomcat中工作

感谢您的帮助

我使用的代码如下所示:

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

堆栈跟踪:

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)

1 个答案:

答案 0 :(得分:2)

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

一个。在部署期间,将数据源绑定到调用组件的命名空间,并使用以“java:comp / env /”开头的名称进行查找。例如,要绑定整个Web应用程序的数据源,您应该将以下内容添加到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 /'part。

湾直接通过其JNDI名称查找数据源,而不使用'java:comp / env /'