2011-07-06 53 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資源的名稱。

希望這有助於。