我想做的是根据每个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");


我得到ClassNotFoundExceptionorg.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

10-07 19:12
查看更多