我想做的是根据每个JNDI从本地运行的JBoss(EAP 5.1)检索数据源。
它在已部署的DAO中可以正常工作,但是我似乎误解了某些情况,因为当我试图在测试用例中获取数据源时,在尝试时我总是得到javax.naming.NoInitialContextException
Properties env = new Properties();
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
final InitialContext ic = new InitialContext(env);
ds = (DataSource) ic.lookup(DATASOURCE_NAME);
如果我添加
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
我得到
ClassNotFoundException
的org.jnp.interfaces.NamingContextFactory
作为JNDI和JBoss的新手,我被困在这一点上。搜索网络只会增加我的困惑,因为我发现的都是分散的信息,我尝试通过反复试验来应用这些信息,但没有真正的进展。
谢谢
最佳答案
您要测试什么功能?它是检索数据源还是一些实际的数据库代码?如果是后者,那么我建议完全不使用JNDI并使用本地DataSource实现。
此线程显示如何使用Commons DBCP设置本地数据源。
http://forum.springsource.org/showthread.php?16670-Problem-running-JUNIT-test-with-JNDI-datasource
如果您确实需要JNDI方面,此示例说明如何使用最小的值填充InitialContext来获取数据源。您可能可以使用与上述相同的Commons DBCP配置来配置所需的数据源。
http://blogs.oracle.com/randystuph/entry/injecting_jndi_datasources_for_junit