上下文查找Java上的javax.naming.NameNotFoundException

时间:2018-06-21 07:19:32

标签: java datasource jndi java-ee-8

我正在使用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初始化方法完成的。

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之后进行查找

此致

1 个答案:

答案 0 :(得分:0)

确保您在 META-INF / context.xml

中有以下一行
<Resource auth="Container" 
      driverClassName="com.mysql.jdbc.Driver" 
         ......
      name="master" // this line is important      
        .......    
/>