のcontextInitialized方法でMySQLのJDBCリソースにアクセスすることはできません私のWebアプリケーションでは、このようなサーブレットリスナーを持っています私はTomcatのサーバー8.5にアップグレードするとき、それは起動時に例外をスロー:のTomcat 8.5はのServletContextListener
javax.naming.NameNotFoundException: Name [jdbc/mysql/mydb] is not bound in this Context. Unable to find [jdbc].
at org.apache.naming.NamingContext.lookup(NamingContext.java:816)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
...
をとにかく、私は何の問題もなく同じコードを使用して(他のサーブレットで)サーバstarup後のmysqlの接続を取得することができます。ですから、質問は、Tomcatの起動時にこのエラーを引き起こす原因は何ですか?
UPDATEここ
である私のバーチャルホストの設定:
context.xml
に(これに似た)行を追加しているあなたのような同様の問題を、持っていた
<Host name="my-domain.ir" appBase="/var/www/webapp" >
<Context path="" docBase="MyWebApp"
xmlValidation="false" xmlNamespaceAware="false" crossContext="false" reloadable="false" >
<Resource name="jdbc/mysql/mydb" auth="Container" type="javax.sql.DataSource"
initialSize="1" maxTotal="100" maxIdle="2"
maxWaitMillis="20000" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="300"
validationQuery="select now();"
username="myUser" password="myPass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&connectionCollation=UTF8_PERSIAN_CI&noAccessToProcedureBodies=true"
/>
</Context>
</Host>
あなたの 'context.xml'を共有できますか? –
@ N00bPr0grammerこれはtomcat 8.5のデフォルトの 'context.xml'です。私はそれを変更していません。しかし、もしあなたが私のWebアプリケーションの 'Context'要素を意味するならば、私はそれを更新に加えました。 –