我有一个Servlet,它在Servlets init方法中初始化它的DataSource(因为它是第一次访问它)。当servlet被加载时,我得到以下异常消息
无法创建类''的JDBC驱动程序用于连接网址' null'
但是当处理第一个请求时,jndi查找工作正常并且DataSource已正确初始化。
这是我的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!");
}
}
}
有人遇到过同样的问题吗?这是什么原因以及如何解决?
答案 0 :(得分: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");