我正在使用WebSphere Liberty 8.5.5服务器并在此服务器上编写一些批处理测试用例。我试图模拟jndi查找对象进行测试,但在测试用例中设置dataSource对象时我得到的错误,有没有人知道如何设置INITIAL_CONTEXT_FACTORY
错误:javax.naming.NoInitialContextException:需要在环境或系统道具中指定类名 erty,或作为applet参数,或在应用程序资源文件中:java.naming.factory.initial 在javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) 在javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) 在javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344) 在javax.naming.InitialContext.lookup(InitialContext.java:411)
答案 0 :(得分:1)
您需要在InitialContext构造函数的环境中设置初始上下文工厂的类名。
例如:
Hashtable<Object, Object> env = new Hashtable<>();
env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "com.example.MockICF");
new InitialContext(env);
com.example.MockICF
可能写成:
public class MockICF implements InitialContextFactory {
private static Context ctx = new Mockery().mock(Context.class);
@Override
public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException {
return ctx;
}
}