javax.naming.NoInitialContextException:在webservices中运行JUNIT测试用例

时间:2015-07-02 15:38:55

标签: java web-services soap junit jndi

我的应用程序中有所有可能的数据库连接的JNDI配置。同时我正在使用JUNIT来测试我的应用程序。我从webservices类调用中找到了成功的连接,但是在通过junit测试类调用它时会抛出错误。

我的JNDI设置为

public static Connection getConnectionPool() {
    Connection conn = null;
System.out.println("Creating connection pool.");
    try {
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup(getJNDIName());
        conn = ds.getConnection();
    } catch (SQLException e1) {
        e1.printStackTrace();
    } catch (NamingException e) {
        e.printStackTrace();
    }
    return conn;

}

private static String getJNDIName()
{
    if(!readJNDI)
    {
        try{
            Properties prop = new Properties();
            prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
            JNDIName = prop.getProperty("jndi.name");
            System.out.println("JNDIName : "+JNDIName);
            readJNDI = true;
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    return JNDIName;
}

下面提到的是错误。

  

javax.naming.NoInitialContextException:需要在中指定类名   环境或系统属性,或作为applet参数,或在   应用程序资源文件:java.naming.factory.initial

我该如何解决呢?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您应该使用本地数据源。

只需将DataSource / TransactionManager定义拉出到一个单独的XML文件中,并在测试期间使用它而不是JNDI文件。

您仍然可以使用所有其他配置。