1

私の Web アプリケーションには、次のようなサーブレット リスナーがあります。

@WebListener
public class MyContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent e)
    {
        ...
        con = DatasourceProvider.getDatasource("java:comp/env/jdbc/mysql/mydb").getConnection();
        ...
    }
}

私のリソース定義は問題なく、Tomcat 7 では問題なく動作しましたが、Tomcat サーバー 8.5 にアップグレードすると、起動時に例外がスローされます。

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)
    ...

とにかく、サーバーの起動後(他のサーブレットで)、同じコードを使用して問題なくmysql接続を取得できます。問題は、Tomcat の起動中にこのエラーが発生する原因は何ですか?

更新
これが私の仮想ホスト構成です:

<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&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8&amp;connectionCollation=UTF8_PERSIAN_CI&amp;noAccessToProcedureBodies=true"
    />
    </Context>
</Host>
4

1 に答える 1