首页 > 解决方案 > 上下文查找 Java 上的 javax.naming.NameNotFoundException

问题描述

我正在使用一个 Payara 应用程序服务器,我在该服务器上定义了一个连接池,以便在我的应用程序中查找它。从应用程序服务器到数据库的 ping 工作正常。

在我的 domain.xml 数据库资源配置如下:

<jdbc-resource pool-name="MasterPool" jndi-name="jdbc/master"></jdbc-resource>
    <jdbc-connection-pool datasource-classname="org.apache.derby.jdbc.ClientDataSource40" name="MasterPool" res-type="javax.sql.DataSource">
      ...
    </jdbc-connection-pool>

Context 的设置是在 servlet init 方法上进行的。

public void init() throws ServletException {

        Context env = null;
        Hashtable ht = new Hashtable();
        ht.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");
        try {
            env = new InitialContext(ht);
            pool = (DataSource) env.lookup("master");
            System.out.println("Data source found");
        }
        catch(NamingException ne) {
            throw new ServletException(ne);
        }


    }

您能否就该消息提供一些见解:

javax.servlet.ServletException: javax.naming.NameNotFoundException: master

我试图在 jdbc/master 和 java:/comp/env/jdbc/master 之后进行查找

问候,

标签: javadatasourcejndijava-ee-8

解决方案


确保您在META-INF/context.xml中有以下行

<Resource auth="Container" 
      driverClassName="com.mysql.jdbc.Driver" 
         ......
      name="master" // this line is important      
        .......    
/>

推荐阅读