2

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

我一直使用 JNDI 来查找连接池以查找数据库连接之类的东西,但我想知道这是否是轻量级案例的最佳方法。似乎如果我使用 JNDI,我不会得到任何好处,但我确实会在配置不同容器的方式上有所不同,并且设置时会增加额外的复杂性。

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

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

4

1 回答 1

2

这完全取决于你的情况。

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

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

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

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

于 2012-06-18T23:08:26.010 回答