【发布时间】:2014-06-20 06:29:29
【问题描述】:
我在tomcat 的context.xml 文件中使用Resource 标记来存储数据库连接信息。我像这样在我的 jersey servlet 中访问它:
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup(DB_SOURCE_CONTEXT);
return ds.getConnection();
对于单元测试,我使用 jersey-test 和 grizzly2,而不是部署到 tomcat。我正在尝试在单元测试类中设置连接属性以使用测试数据库(目前是 MySQL,但接下来我会将其更改为 DBUnit):
@BeforeClass
public static void initializeTest() throws NamingException
{
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("");
dataSource.setUrl(TEST_DB_URL);
dataSource.setMaxTotal(10);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");
envContext.bind(DB_SOURCE_CONTEXT, dataSource);
}
但我得到以下异常,所以这显然不是正确的方法:
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
如何设置这些值,以便 servlet 中的上下文读取代码读取测试值?
【问题讨论】: