8

在我目前学习休眠并将其设置为使用应用程序服务器的连接池的冒险中,大多数示例和资源都指向您在此过程中将 SessionFactory 绑定到应用程序服务器中的 JNDI 资源的方向。

我想知道这样做有什么好处?由于您无需执行此操作即可访问连接池。

4

1 回答 1

10

我会说,这与您将 JNDI 用于任何事情的原因相同——将配置从应用程序中移到部署环境中。

使用 JNDI,您基本上会说“此应用程序需要一个SessionFactory; 并且它的名称应为 X”,只要应用程序服务器SessionFactory配置了一个名为 X,您就会很高兴。这种外化有几个吸引人的好处:

  1. 您可以在不同的机器上使用截然不同的配置(生产和 QA 使用 Oracle,开发人员使用 HSQL,...)。

  2. 您不需要让您的构建过程了解配置(不再需要ant war_for_qa或使用 Maven 配置文件)。

  3. 您不想将配置检查到版本控制中,因此您的实时数据库密码不会被曾经(或将拥有!)访问存储库的每个临时工、实习生、顾问或前雇员知道。

  4. 您的安装/配置说明不会包含诸如“配置数据库登录,编辑 WAR 文件中的 foo.properties 文件”之类的项目,这将不可避免地导致在最坏的时刻在生产服务器上覆盖配置,因为系统管理员是整个周末都在工作,碰巧部署了一个未编辑的 WAR,因为周日下午咖啡用完了。

JNDI 恰好是在 Java 中进行这种外部化的“标准”方式,这意味着新的开发人员/管理员不需要两天的培训来学习你自己的怪癖,自制的配置系统真的很聪明但是有这个奇怪的错误没有人想深入研究,因为它真的很奇怪,而且它有一个非常简单的解决方法,&c。

相关: JNDI 的目的是什么?

于 2010-03-30T23:20:44.483 回答