2013-07-01 86 views
0

我得到以下错误,当我抬头对JDBC数据源一个JNDI连接:的Websphere JNDI查找失败

javax.naming.ConfigurationException:一个JNDI操作上的“java:”名称不能完成,因为服务器运行时无法将操作的线程与任何J2​​EE应用程序组件关联。当使用“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) 
+0

在正在进行查找的Java EE组件的上下文中, – fnt

+0

它是我正在查找的jdbc数据源 – sab

+0

向我们展示整个代码路径 – Jukka

回答

2

假设您在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> 

name_used_in_lookup应该没有“的java:comp/env的/”的一部分。

湾在不使用'java:comp/env /'的情况下直接通过JNDI名称查找数据源

+0

你可以帮我解决第一个问题:我可以在websphere中绑定它吗我可以在管理控制台的某个地方配置吗 – sab

+0

@sab我更新了答案 – fnt

+0

谢谢你似乎工作 – sab

相关问题