0

我有一个 Servlet,它在 Servlets init 方法中初始化它的 DataSource(因为它是第一次在那里访问)。加载 servlet 时,我收到以下异常消息

无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序

但是当第一个请求被处理时,jndi 查找工作正常并且 DataSource 被正确初始化。

这是我的数据源类:

public class PostgresDataSource{

private static DataSource dataSource;

static {
    try {

        dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/somedb");

    } catch (NamingException e) {
        Log.logger.fatal("Failed to initialize DB!");
        Log.logger.error(e.getMessage());
        e.printStackTrace();
    }
}

public static Connection checkOut(){
    if ( dataSource != null )
    {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            Log.logger.error("Failed to establish DB connection!");
            Log.logger.error(e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
    else
    {
        Log.logger.error("Failed to check out DB-Connection: Postgres DataSource not initialized!");
        return null;
    }
}

public static void checkIn( Connection dbcon){
    if ( dataSource != null )
    {
        try {
            dbcon.close();
        } catch (SQLException e) {
            Log.logger.error("Failed to close DB connection!");
            e.printStackTrace();
        }

    }
    else
    {
        Log.logger.error("Cannot check in DB-Connection: Postgres DataSource not initialized!");
    }
}
}

有人遇到同样的问题吗?这是什么原因以及如何解决?

4

1 回答 1

1

而不是使用 dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/somedb");

请使用以下,这可能会解决问题

        InitialContext context = new InitialContext();
        Context envCtx = (Context) context.lookup("java:comp/env");
        dataSource = (DataSource) envCtx.lookup("jdbc/somedb"); 
于 2013-06-26T12:58:40.750 回答