Tomcat服务器异常 - java:comp未绑定在此Context中

时间:2010-10-27 21:30:33

标签: java hibernate exception tomcat

在做其他事情时,我在我的lib文件夹中添加了一个名为catalina.jar的jar。这允许我提供静态内容(可以工作),但我以前工作的struts操作(通过hibernate访问数据库)不再起作用。 tomcat启动时出现第一个失败指示:

SEVERE: Null component Catalina:type=DataSource,path=/,host=localhost,class=javax.sql.DataSource,name="jdbc/UpdatableDB"

在运行访问数据库的操作时会发生后续失败:

ERROR [http-8080-1 14:21:29,789] (DatasourceConnectionProvider) - Could not find datasource: java:comp/env/jdbc/UpdatableDB
javax.naming.NameNotFoundException: Name java:comp is not bound in this Context
        at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:79)
        at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:438)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:91)
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
        at com.util.HibernateUtil.<clinit>(HibernateUtil.java:58)
        at com.offers.CompleteRuleAndTemplateCache.refreshIfNecessary(CompleteRuleAndTemplateCache.java:91)
        at com.offers.CompleteRuleAndTemplateCache.refreshIfNecessary(CompleteRuleAndTemplateCache.java:73)
        at com.offers.CompleteRuleAndTemplateCache.<clinit>(CompleteRuleAndTemplateCache.java:65)
        at com.offers.actions.ShowIframeAction.getApplicableRule(ShowIframeAction.java:541)
        at com.offers.actions.ShowIframeAction.execute(ShowIframeAction.java:121)
        at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
        at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
        at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.util.SessionFilter.doFilter(SessionFilter.java:78)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Initial SessionFactory creation failed. hibernate-offers.cfg.xml
org.hibernate.HibernateException: Could not find datasource
        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:79)
        at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:438)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:91)
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
        at com.util.HibernateUtil.<clinit>(HibernateUtil.java:58)
        at com.offers.CompleteRuleAndTemplateCache.refreshIfNecessary(CompleteRuleAndTemplateCache.java:91)
        at com.offers.CompleteRuleAndTemplateCache.refreshIfNecessary(CompleteRuleAndTemplateCache.java:73)
        at com.offers.CompleteRuleAndTemplateCache.<clinit>(CompleteRuleAndTemplateCache.java:65)
        at com.offers.actions.ShowIframeAction.getApplicableRule(ShowIframeAction.java:541)
        at com.offers.actions.ShowIframeAction.execute(ShowIframeAction.java:121)
        at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
        at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
        at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.util.SessionFilter.doFilter(SessionFilter.java:78)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: javax.naming.NameNotFoundException: Name java:comp is not bound in this Context
        at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
        ... 41 more

为什么添加一个jar导致这个?我能做些什么(不仅仅是摆脱catalina.jar)?

我在网上找到的一些建议包括从你的来源中删除naming-common.jar,naming-factory.jar和naming-resources.jar - 但我已经没有这些文件了。

在Jim Garrison的请求下,继承人将jdbc / UpdatableDB绑定到DataSource - 它不在server.xml中,在context.xml中,这对我们来说已经很长时间了:

<Resource name="jdbc/UpdatableDB" auth="Container" type="javax.sql.DataSource"
          maxActive="75" maxIdle="40" maxWait="1000"
          removeAbandoned="true" removeAbandonedTimeout="300"
          timeBetweenEvictionRunsMillis="30000"
          defaultAutoCommit="false"
          username="XXXX" password="XXXX" driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://<HOSTNAME AND PATH>?autoReconnect=true"
          connectionProperties="autoReconnect=true;cachePrepStmts=true;cacheCallableStmts=true;cacheServerConfiguration=true;useLocalSessionState=true;elideSetAutoCommits=true;alwaysSendSetIsolation=false;enableQueryTimeouts=false;"
        />

3 个答案:

答案 0 :(得分:4)

在Tomcat 5.5中,我们使用以下语法来查找jdbc资源:

java:/comp/env/jdbc/UpdatableDB

我不确定这是否与你正在使用的内容相同,但我想我会提到它,以防它帮助其他人。

答案 1 :(得分:0)

即使原作者不再需要答案,我偶然发现了一个类似的问题,答案就在这里JNDI lookup works fine using lookUp but not when used in persistence.xml of JPA 原因是java之后缺少斜杠,类似于下面的位置:

Could not find datasource: java:comp/env/jdbc/UpdatableDB

答案 2 :(得分:0)

您不应该将catalina.jar添加到WEB-INF/lib,因为这是一个特定于容器的jar。这就是你得到这个错误的原因。删除jar文件并在eclipse中将其添加为Target Runtime Tomcat