如果 JNDI 上下文不可撤销地将您与 Tomcat 联系在一起,为什么还要使用 JNDI 上下文呢?

Why use JNDI context if it irrevocably ties you to Tomcat?

似乎每个人都说您应该使用 Tomcat 的 JNDI 上下文来管理您的 JDBC 连接和驱动程序等等。在阅读了文档之后,我理解了平局。但是如果你使用它,你的应用程序 必须 从现在到时间结束使用一个 Tomcat 容器。让你的应用程序依赖这样的环境配置(尤其是 for Java,应该是"Write Once, Run Anywhere"),这不是一种糟糕的编程习惯吗?这怎么不是一个危险的开发决定?

我不知道您阅读了哪个文档,但如果您使用 JNDI,您在应用程序中指定的唯一内容就是您要使用的资源的 JNDI 名称(例如,用于 DB 连接)。其他所有内容都在容器中配置,而不是应用程序的一部分(如数据库的 URL、用户名、密码等)。

Isn't it a bad programming practice to make your application rely on such an environment configuration (especially for Java, which is supposed to be "Write Once, Run Anywhere")?

是的,一般来说。但是,这种设计提供了一些好处,包括托管连接池和从您的应用程序中抽象出数据库连接配置。 JNDI itself 是一种目录服务抽象,可保护您免受目录 API 差异的影响。

How is this not a dangerous development decision?

使用 JNDI 管理 JDBC 连接并不特定于 Tomcat。每个 Java 应用程序服务器(GlassFish、Oracle、WebSphere 等)都这样做。因此,您并没有将自己束缚于 Tomcat,而是束缚于 Java.

另请参阅:Using JNDI for Database connections