我的应用程序中有所有可能的数据库连接的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
我该如何解决呢?
提前致谢。
答案 0 :(得分:1)
您应该使用本地数据源。
只需将DataSource / TransactionManager定义拉出到一个单独的XML文件中,并在测试期间使用它而不是JNDI文件。
您仍然可以使用所有其他配置。