Как заставить JNDI работать с RDS - PullRequest
1 голос
/ 06 июля 2011

Я пытаюсь настроить Tomcat 7 для использования экземпляра RDS / MySQL, и мне не повезло. Я подозреваю, что проблема в моем context.xml. При наличии context.xml происходят плохие вещи, такие как невозможность удаленной отладки через Eclipse и, следовательно, невозможность отладки того, что происходит с моим кодом БД. Мой context.xml (с подробностями, такими как имя пользователя / пароль, для защиты невинных):

<?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

Есть идеи, что происходит? Люди не используют JNDI с RDS? Какой лучший подход?

Ответы [ 2 ]

0 голосов
/ 31 мая 2017

У меня была похожая проблема в локальной сети при попытке развернуть веб-приложение со ссылкой jndi на tomcat8. Кажется, что более новые версии 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 означает использование имени, используемого для определения ресурса в файле конфигурации server.xml вашего экземпляра tomcat.

Имя атрибута - имя, используемое для предоставления ресурса контекстам развернутого приложения.

Global attr.- Имя ресурса jndi, определенного в файле конфигурации server.xml tomcat.

Надеется, что это поможет.

0 голосов
/ 25 июля 2013

это может быть из-за того, что предыдущие приложения не были должным образом удалены из контейнера tomcat.

Остановите tomcat, а затем перейдите в каталог conf tomcat /<Tomcat root>/conf/Catalina/localhost и очистите xml-файлы в этом каталоге.и перезапустите tomcat

Примечание: 1. сделайте резервную копию этих XML-файлов перед удалением, чтобы, если это не сработало, вы могли восстановить ее.

...