2011-07-06 32 views
1

我想配置Tomcat 7以使用RDS/MySQL实例,但我没有运气。我怀疑问题出在我的context.xml中。使用context.xml时,会发生不好的事情,例如不能通过Eclipse远程调试,因此无法调试我的DB代码发生了什么。我的context.xml(与喜欢的用户名/密码删除,以保护无辜的详细信息):获取JNDI与RDS配合使用

<?xml version='1.0' encoding='utf-8'?> 
<Context path="/puppy" reloadable="true" crossContext="true"> 
    <Resource name="jdbc/myDB" 
     auth="Container" 
     type="javax.sql.DataSource" 
     username="username" 
     password="password" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://rds-instance:3306/myDB?autoReconnect=true" 
     validationQuery="select 1" 
     maxActive="10" 
     maxIdle="4"/> 
</Context> 

在部署应用程序,我得到了我的日志如下:

WARNING: Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/puppy]] so no cleanup was performed for that container 
javax.naming.NameNotFoundException: Name comp is not bound in this Context 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:803) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159) 
    at org.apache.catalina.deploy.NamingResources.cleanUp(NamingResources.java:975) 
    at org.apache.catalina.deploy.NamingResources.stopInternal(NamingResources.java:957) 
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:225) 
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5504) 
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:225) 
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3847) 
    at org.apache.catalina.manager.ManagerServlet.reload(ManagerServlet.java:949) 
    at org.apache.catalina.manager.HTMLManagerServlet.reload(HTMLManagerServlet.java:676) 
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:214) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:187) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:572) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 
Jul 6, 2011 4:44:52 AM org.apache.catalina.core.NamingContextListener lifecycleEvent 
SEVERE: Creation of the naming context failed: javax.naming.NamingException: Context is read only 

任何想法是怎么回事?人们不使用RDS使用JNDI吗?什么是最好的方法?

回答

0

这可能是因为以前的应用程序没有从tomcat容器中正确取消部署。

停止tomcat,然后进入tomcat conf目录/<Tomcat root>/conf/Catalina/localhost并清除该目录中的xml文件。并重新启动tomcat

注意:1.在删除之前先备份这些xml文件,这样如果这样做不起作用,那么您可以恢复它。

0

我在本地尝试在tomcat8上部署带有jndi引用的webapp时出现类似问题。似乎更新版本的tomcat需要链接服务器context.xml配置中的资源。 在我来说,我解决它添加以下行到服务器的context.xml:

<ResourceLink name="JDBC_DATASOURCE_NAME_DEF_IN_SERVER:XML" global="JDBC_DATASOURCE_NAME_DEF_IN_SERVER:XML" type="javax.sql.DataSource"/> 

的JDBC_DATASOURCE_NAME_DEF_IN_SERVER:XML意味着使用使用你的Tomcat实例的server.xml配置文件中定义的资源名称。

名称attr-用于将资源公开给部署的应用程序上下文的名称。

全局属性 - 在tomcat的server.xml配置文件中定义的jndi资源的名称。

希望这有助于。