1

RDS/MySQL インスタンスを使用するように Tomcat 7 を構成しようとしていますが、うまくいきません。問題は context.xml にあると思われます。context.xml が存在すると、Eclipse を介してリモート デバッグできず、DB コードで何が起こっているかをデバッグできないなどの悪いことが起こります。私の 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

何が起こっているのか分かりますか?RDS で JNDI を使用していない人はいますか? 最善のアプローチは何ですか?

4

2 に答える 2

0

以前のアプリケーションが tomcat コンテナーから適切にアンデプロイされていないことが原因である可能性があります。

Tomcat を停止し、Tomcat conf ディレクトリに移動して/<Tomcat root>/conf/Catalina/localhost、そのディレクトリ内の xml ファイルを消去します。そしてTomcatを再起動します

注: 1. 削除する前にこれらの xml ファイルのバックアップを作成してください。これが機能しない場合は復元できます。

于 2013-07-25T12:11:37.743 に答える
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 構成ファイルでリソースを定義するために使用される名前を使用することを意味します。

name attr - デプロイされたアプリケーション コンテキストにリソースを公開するために使用される名前。

グローバル属性 - tomcat の server.xml 構成ファイルで定義された jndi リソースの名前。

これが役立つことを願っています。

于 2017-05-31T15:55:30.557 に答える