【问题标题】:Programatically set InitialContext for unit test以编程方式为单元测试设置初始上下文
【发布时间】: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 中的上下文读取代码读取测试值?

【问题讨论】:

标签: java jersey jndi junit4


【解决方案1】:

我在使用 glassfish 和创建测试上下文时遇到了类似的问题。

您需要为 InitialContext 提供一些属性,以便它可以正确构建自己。

例如:

Hashtable<String, String> props = new Hashtable<>();
props.put("java.naming.factory.initial","com.sun.enterprise.naming.impl.SerialInitContextFactory");
props.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.put("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
InitialContext ctx = new InitialContext(props);

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    相关资源
    最近更新 更多