如何在没有应用程序服务器的情况下欺骗数据源的 jndi 查找
我想测试一些新功能,这是内部网络应用程序的一部分。此新代码使用通常由应用服务器 (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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 Spring SimpleNamingContextBuilder 的帮助下 和 Apache BasicDataSource,你可以这样做(我通常将其放在需要 JNDI 的测试类的静态块中):
jndi_name
的值可能如下所示:java:comp/env/jdbc/ my-db
设置完成后,通常通过 JNDI 查找数据库连接的代码应该可以工作。例如,上面的代码适用于以下 Spring 配置:
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):
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:
这里列出的解决方案看起来比大约一年前我不得不做同样的事情时想出的要简单一些。我基本上制作了自己的非常简单的数据源实现并将其添加到新的初始上下文中。
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/
使用 TomcatJNDI,您可以像在 Web 应用程序中一样访问您在 Tomcat 中配置的每个 JNDI 资源。实现它的代码很简单,看起来像
转到此处阅读有关它的更多信息。
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
Go here to read more about it.