【问题标题】:To JNDI or not to JNDI when embedding an application server?嵌入应用程序服务器时使用 JNDI 还是不使用 JNDI?
【发布时间】:2012-06-18 15:22:32
【问题描述】:

我来自完整的应用程序服务器背景,并考虑在轻量级嵌入式服务器(如 Jetty)上运行应用程序。

我一直使用 JNDI 来查找连接池以查找数据库连接等内容,但我想知道这是否是轻量级案例的最佳方法。似乎如果我使用 JNDI,我不会得到任何好处,但我确实会在不同容器的配置方式和设置复杂度方面有所不同。

我可以看到的替代方法是在我的应用程序中嵌入一个连接池实现。当我使用 Spring 时,这种方法所需的配置要少一些,所需的配置都在一个地方(如果需要,可以从其他地方查找简单的名称-值属性,例如连接详细信息),并且无论如何似乎都可以工作上下文(dev/test/live)和我部署的容器。

我在这里遗漏了什么吗?如果我在我的应用程序中嵌入一个应用程序服务器,我还应该使用 JNDI 吗?如果有,为什么?

【问题讨论】:

  • 考虑为未来的项目研究依赖注入。

标签: java jetty jndi


【解决方案1】:

这完全取决于你的情况。

JNDI(对我而言)是一种机制,可以实现您的部署内容和部署位置之间的解耦。这样,当您进行部署时,您假设某些资源将可用并且它们将被标记为 X、Y 和 Z。JNDI 是以基本统一的方式提供这些资源的简单(有点)机制。如果您可能拥有多个不同的受支持数据库,并且您想针对某个数据源编写所有代码...您将需要配置该数据源 somewhere 并且 jndi 提供了一些地方来做这件事。如果您使用某种工具使设置 jndi 变得轻而易举,那就太好了,使用它。

在嵌入式情况下,情况确实没有改变,仍然需要在某个地方进行设置。但是,在您的嵌入式应用程序的过程中,您会发现自己在编写 jndi 等式的两面,然后问问自己是否需要这个额外的抽象层。

如果您只是使用 jndi,因为其他人都这样做,但您实际上只使用 postgres 并且您只需要该数据库驱动程序......那么您的应用程序的额外复杂层有什么意义。如果你真的喜欢 spring,spring 给你一种更简单的方法来配置你需要的点点滴滴,并在你需要的地方注入它......不要使用 jndi。

fwiw,听起来你好像不再需要 jndi 了 :)

【讨论】:

  • 很好的说法是“写出 JNDI 方程的两边”。
  • 即使 应用程序 是嵌入且完整的,但这并不意味着所有使用的库都知道这一点。您仍然需要将它们连接在一起。
猜你喜欢
  • 2020-10-14
  • 2012-07-13
  • 1970-01-01
  • 2015-03-23
  • 2015-11-22
  • 1970-01-01
  • 2014-08-20
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多