Java / TomCat BaseDao NoInitialContextException

时间:2017-05-25 17:50:21

标签: java tomcat dao

对于学校来说,他们让我们通过普通的旧dao和tomcat连接到postgresDB。但是给定的代码不起作用,我现在已经被困在这里了很长时间。

所以这里。

connectiondao给出:

package nl.hu.v1wac.firstapp.persistence;

import java.sql.Connection;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BaseDao {
  protected final Connection getConnection() {
    Connection result = null;

    try {
      InitialContext ic = new InitialContext();
      DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/PostgresDS");

      result = ds.getConnection();
    } catch (Exception ex) {
      throw new RuntimeException(ex);
    }

    return result;
  }
}

我们必须将服务器细节编写到context.xml文件中,然后将jar驱动程序导入tomcat的lib文件夹(到目前为止一直很好)。 context.xml位于src / main / webapp / META-INF目录

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/PostgresDS"
url="jdbc:postgresql://localhost:5432/worlddb"
driverClassName="org.postgresql.Driver"
auth="Container"
type="javax.sql.DataSource"
username="postgres"
password="secret" />
</Context>

在设置我的Dao之后,我尝试在主要设备中启动它们并得到以下错误:

Exception in thread "main" java.lang.RuntimeException: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

由以下原因引起:

DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/PostgresDS");

根据幻灯片/手册,任何人都可以提供帮助:/

提前致谢!

P.S。我们正在使用tomcat 8.5和Eclipse Jee Neon

编辑主要课程

package nl.hu.v1wac.firstapp.persistence;

import java.sql.SQLException;

public class Pattern {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CountryDao cdao = new CountryDaoPostgreSQL();
        try {
            cdao.findALl();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

你当然不应该这样做。

您是否在Tomcat中运行此代码?不在外面?抱怨是InitialContext没有基础的管道和#34;进行查找。通常情况下,这一切都由您正在运行的环境管理,除非您正在运行它并且#34;独立运行&#34;在Java SE应用程序中,你永远不应该看到这一点。