javax.naming.Reference无法强制转换为javax.sql.DataSource错误

时间:2014-04-29 11:10:16

标签: java derby

我正在使用Apache Derby并拥有以下代码:

DBConnectionFactory.java

package edu.unsw.comp9321.jdbc;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Logger;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import edu.unsw.comp9321.common.DataSourceException;
import edu.unsw.comp9321.common.ServiceLocatorException;

 // This class looks up the database via JNDI and returns a connection to the DAO Implementation class


public class DBConnectionFactory {

static Logger logger = Logger.getLogger(DBConnectionFactory.class.getName());
private static DBConnectionFactory factory = null;
private DataSource ds = null;
private InitialContext ctx;
private Context subctx;

private DBConnectionFactory() throws ServiceLocatorException{
    try{
        ctx = new InitialContext();
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/cs9321");
        logger.info("Database found:"+ds.toString());
    }catch(NamingException e){
        logger.severe("Cannot find context, throwing exception"+e.getMessage());
        e.printStackTrace();
        throw new ServiceLocatorException();
    }
}

public DataSource getDataSource(){
    return ds;
}

public static Connection getConnection() throws ServiceLocatorException, SQLException{

    if(factory==null)
        factory = new DBConnectionFactory();
    Connection conn = factory.getDataSource().getConnection();

    return conn;
}

}

错误似乎发生在这里:

ds = (DataSource) ctx.lookup("java:comp/env/jdbc/cs9321");

我读到如果derbyclient.jar不在构建路径中,则可能会发生这种情况。但是,我已将此jar添加到构建路径。

有人会对我能做什么有任何建议吗?

感谢。

1 个答案:

答案 0 :(得分:2)

你错过了几个罐子,加上这两个罐子,一切都应该没问题:

commons-dbcp-1.4.jar commons-pool-1.6.jar

希望有所帮助!

干杯