繁体   English   中英

如何在没有app服务器的情况下欺骗数据源的jndi查找

[英]How can I spoof a jndi lookup for a datasource without a app server

我想测试一些内部Web应用程序的新功能。 此新代码使用通常由应用程序服务器(tomcat)提供的数据库连接。

我不想在我的本地计算机上重新创建整个Web应用程序来测试新代码,因为我只需要运行一个函数。

有没有人知道如何“欺骗”上下文或数据源来检索数据库配置,而无需在服务器上实际创建Web应用程序实例?

随着春天的帮助SimpleNamingContextBuilder和Apache 的BasicDataSource ,你可以做这样的事情(我通常有这样在需要JNDI测试类的静态块):

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(db_driver_name);
dataSource.setUrl(db_connection_url);
dataSource.setUsername(db_username);
dataSource.setPassword(db_password);
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind(jndi_name, dataSource);
builder.activate();

jndi_name的值可能如下所示: java:comp/env/jdbc/my-db

设置完成后,通常通过JNDI查找数据库连接的代码应该可以正常工作。 上面的代码例如可以使用这个Spring配置:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/my-db"/>
</bean>

这里列出的解决方案看起来比一年前我提出的那样简单,当时我不得不做同样的事情。 我基本上创建了自己非常简单的DataSource实现并将其添加到新的Initial Context中。

http://penguindreams.org/blog/running-beans-that-use-application-server-datasources-locally/

使用TomcatJNDI,您可以访问在Tomcat中配置的每个JNDI资源,就像在Web应用程序中一样。 实现它的代码很简单,看起来像

TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processContextXml(contextXmlFile);
tomcatJNDI.start();

DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/path/to/datasource")

到这里阅读更多相关信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM