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

发布于 2024-09-05 19:22:07 字数 179 浏览 4 评论 0原文

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

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

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

I want to test some new functionality which is part of an internal web app. This new code uses a database connection normally provided by an app server (tomcat).

I do not want to recreate the entire web app on my local machine to test the new code, since I only need to run one function.

Does anyone know how I can 'spoof' a Context, or Datasource, to retrieve the database config, without actually creating a web app instance on a server?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不忘初心 2024-09-12 19:22:07

在 Spring 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>

With the help of Spring SimpleNamingContextBuilder and Apache BasicDataSource, you can do something like this (I usually have this in a static block in test classes that need 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();

The value of jndi_name might look like this: java:comp/env/jdbc/my-db

Once this is set up, code that normally looks up the database connection via JNDI should work. The code above would for example work with this Spring config:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/my-db"/>
</bean>
以酷 2024-09-12 19:22:07

这里列出的解决方案看起来比大约一年前我不得不做同样的事情时想出的要简单一些。我基本上制作了自己的非常简单的数据源实现并将其添加到新的初始上下文中。

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

The solutions listed here look a bit simpler than what I came up with about a year ago when I had to do the same thing. I basically made my own very simple DataSource implementation and adding it to a new Initial Context.

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

夏尔 2024-09-12 19:22:07

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

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

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

转到此处阅读有关它的更多信息。

With TomcatJNDI you can access every JNDI resource you configured within Tomcat as used to do in your web application. The code to achieve it is simple and looks like

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

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

Go here to read more about it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文