spring javax.naming.NameNotFoundException:名称 [comp/env] 未在此上下文中绑定
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/21527714/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context
提问by balasrilakshmi
I'm developing a spring application which uses tomcat server managed connection pool.
我正在开发一个使用 tomcat 服务器托管连接池的 spring 应用程序。
I defined datasource in tag in context.xml of tomcat: (i am using spring 2.0.7) in context.xml:
我在tomcat的context.xml中的标签中定义了数据源:(我使用的是spring 2.0.7)在context.xml中:
<context>
<Resource name="jdbc/irb_prod"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
username="xxx"
password="xxx"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxx:1521:xxx"
maxWait="1000"
removeAbandoned="true"
maxActive="5"
maxIdle="5"
removeAbandonedTimeout="60"
logAbandoned="true"/>
</context>
And in my ApplicationContext.xml(i.e in spring configuration file), the code is:
在我的ApplicationContext.xml(即在 spring 配置文件中),代码是:
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/irb_prod</value>
</property>
</bean>
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource"><ref local="dataSource"/></property>
</bean>
When the application starts, I get the following errors:
当应用程序启动时,我收到以下错误:
javax.naming.NameNotFoundException: Name java:/comp/env/mypool is not bound in this Context
org.apache.naming.NamingContext.lookup(NamingContext.java:803)
org.apache.naming.NamingContext.lookup(NamingContext.java:159)
org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
javax.naming.InitialContext.lookup(Unknown Source)
org.springframework.jndi.JndiTemplate.doInContext(JndiTemplate.java:132)
org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88)
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:130)
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:155)
org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:93)
org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java :197)
org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:184)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:291)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInit ialization(AbstractApplicationContext.java:736)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractAppli cationContext.java:369)
org.springframework.context.support.ClassPathXmlApplicationContext.<init> (ClassPathXmlApplicationContext.java:123)
org.springframework.context.support.ClassPathXmlApplicationContext.<init> (ClassPathXmlApplicationContext.java:66)
MainServlet.init(MainServlet.java:21)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java :188)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
please help me to solve this problem.
请帮我解决这个问题。
回答by Nishanthi Grashia
I faced similar problem with tomcat and did the following in eclipse to solve it:
我在使用 tomcat 时遇到了类似的问题,并在 eclipse 中执行了以下操作来解决它:
- In the server's context.xml, included the jdbc connection details.
- Stop the server
- Clean the project(
Project --> Clean
) , the tomcat server (Server--> Right Click --> Clean
) and Tomcat work directory (Server--> Right Click--> Clean Tomcat Work Directory
). - Start the server and run.
- 在服务器的 context.xml 中,包含 jdbc 连接详细信息。
- 停止服务器
- 清理项目(
Project --> Clean
)、tomcat 服务器(Server--> Right Click --> Clean
) 和Tomcat 工作目录(Server--> Right Click--> Clean Tomcat Work Directory
)。 - 启动服务器并运行。
Even after maintaining the details in context.xml, sometimes it might not get reflected. In such cases follow step#3 and hope it helps.
即使在 context.xml 中维护了详细信息,有时它也可能不会得到反映。在这种情况下,请按照第 3 步操作,希望对您有所帮助。
回答by Hrishikesh
Please update your web.xml
with the something similar to the following tag
请web.xml
使用类似于以下标签的内容更新您的
<resource-env-ref>
<description>DataSource
</description>
<resource-env-ref-name>
dbc/irb_prod
</resource-env-ref-name>
<resource-env-ref-type>
javax.sql.DataSource
</resource-env-ref-type>
</resource-env-ref>
You need to refer this linktoo for more information
您也需要参考此链接以获取更多信息
回答by user7097737
That will in case of Tomcat happen when you have for some reason dropped arbitrary servletcontainer-specific JARs such as jsp-api.jar, servlet-api.jar, catalina.jar, etc in webapp's /WEB-INF/lib. You should remove all servletcontainer-specific JARs from there, they do not belong there.
在 Tomcat 的情况下,当您出于某种原因在 webapp 的 /WEB-INF/lib 中删除了任意 servletcontainer 特定的 JAR,例如 jsp-api.jar、servlet-api.jar、catalina.jar 等时,就会发生这种情况。您应该从那里删除所有 servletcontainer 特定的 JAR,它们不属于那里。
回答by Bat0u89
In my case it seems that I had to first close my file explorer (FreeCommander XE) and then do the eclipse cleans (project and server), make sure to close any other programs that might have handles to deployed files even if the files are not open in those programs anymore
在我的情况下,我似乎必须先关闭我的文件资源管理器(FreeCommander XE),然后进行 Eclipse 清理(项目和服务器),确保关闭任何其他可能具有已部署文件句柄的程序,即使这些文件不是不再在那些程序中打开
回答by Witold Kaczurba
In Eclipse: make sure you have the right context.xml file. This especially valid when you have installed multiple servers.
在 Eclipse 中:确保您拥有正确的 context.xml 文件。这在您安装了多个服务器时尤其有效。
In your Servers tab -> Right click on your deployed web module -> Browse Deployment Location -> ../conf/context.xml. Make sure this is the file you want to be using.
在您的服务器选项卡 -> 右键单击您部署的 web 模块 -> 浏览部署位置 -> ../conf/context.xml。确保这是您要使用的文件。
I hope this saves you some time, as I wasted some time on it.
我希望这可以为您节省一些时间,因为我浪费了一些时间。