Tomcat WebSphereJNDI查找失败

Tomcat WebSphereJNDI查找失败,tomcat,websphere,jndi,Tomcat,Websphere,Jndi,我在查找jdbc数据源的JNDI连接时遇到以下错误: javax.naming.ConfigurationException:无法完成“java:”名称上的JNDI操作,因为服务器运行时无法将该操作的线程与任何J2EE应用程序组件关联。当使用“java:”名称的JNDI客户端未在服务器应用程序请求的线程上执行时,可能会出现这种情况。确保J2EE应用程序不会在静态代码块内或该J2EE应用程序创建的线程中对“java:”名称执行JNDI操作。这样的代码不一定在服务器应用程序请求的线程上运行,因此在“

我在查找jdbc数据源的JNDI连接时遇到以下错误:

javax.naming.ConfigurationException:无法完成“java:”名称上的JNDI操作,因为服务器运行时无法将该操作的线程与任何J2EE应用程序组件关联。当使用“java:”名称的JNDI客户端未在服务器应用程序请求的线程上执行时,可能会出现这种情况。确保J2EE应用程序不会在静态代码块内或该J2EE应用程序创建的线程中对“java:”名称执行JNDI操作。这样的代码不一定在服务器应用程序请求的线程上运行,因此在“java:”名称上的JNDI操作不支持这样的代码。[根异常为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)

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

a。在部署期间,将数据源绑定到调用组件的命名空间中,并使用以“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>

在查找中使用的名称
数据源jndi名称
查找中使用的名称应不包含“java:comp/env/”部分


b。直接通过JNDI名称查找数据源,而不使用“java:comp/env/”

在进行查找的java EE组件的上下文中?我正在查找的是jdbc数据源,向上展示了整个代码path@sab我问的不是查什么,而是查什么。您的查找代码是从servlet调用的还是其他什么?数据源必须绑定到本地组件(无论是什么)命名空间中,因为您使用“java:/comp/env”命名空间,该命名空间取决于上下文(组件)。@fnt,抱歉。这是由一个我无法访问源代码的组件查找的,但它是一些批处理机制,我认为它使用了一个executor框架。我添加了stacktrace如果该帮助扫描您帮助我的第一个选项。如何在websphere中绑定它。我可以在管理控制台的某个地方配置它吗