2011-07-06 6 views
1

J'essaie de configurer Tomcat 7 pour utiliser une instance RDS/MySQL et je n'ai pas de chance. Je suspecte que le problème est dans mon context.xml. Avec un context.xml présent, de mauvaises choses se produisent comme ne pas pouvoir déboguer à distance via Eclipse et donc ne pas pouvoir déboguer ce qui se passe avec mon code DB. Mon context.xml (avec des détails comme nom d'utilisateur/mot de passe enlevé pour protéger les innocents):Obtenir JNDI pour travailler avec 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> 

Lors du déploiement de l'application, je reçois ce qui suit dans mes journaux:

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 

Toute idée de ce qui se passe ? Les utilisateurs n'utilisent-ils pas JNDI avec RDS? Quelle est la meilleure approche?

Répondre

0

peut être à cause des applications précédentes ne sont pas correctement déployés à partir du conteneur tomcat.

Arrêtez tomcat, puis accédez au répertoire confde tomcat et nettoyez les fichiers xml dans ce répertoire. et redémarrez le tomcat

Remarque: 1. faites une sauvegarde de ces fichiers xml avant de les supprimer, de sorte que si cela ne fonctionne pas, vous pouvez le restaurer.

0

J'ai eu un problème similaire sur local essayant de déployer une webapp avec une référence jndi sur tomcat8. Il semble que les nouvelles versions de tomcat doivent lier les ressources dans la configuration context.xml du serveur. Dans mon cas, je l'ai résolu en ajoutant la ligne suivante au serveur context.xml:

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

Le JDBC_DATASOURCE_NAME_DEF_IN_SERVER: XML signifie d'utiliser le nom utilisé pour définir la ressource dans le fichier de configuration server.xml de votre instance tomcat .

Le nom attr: nom utilisé pour exposer la ressource aux contextes d'application déployés.

L'attribut global: nom de la ressource jndi définie dans le fichier de configuration server.xml de tomcat.

Espère que cela aide.

Questions connexes