在我目前学习hibernate并将其设置为使用appserver的连接池的冒险中,大多数示例和资源都指向了将SessionFactory绑定到进程中appserver中的JNDI资源的方向。
我想知道这有什么好处?由于您可以在不执行此操作的情况下访问连接池。
答案 0 :(得分:10)
您将JNDI用于任何事情的原因相同,我会说 - 将配置从应用程序中移出到部署环境中。
使用JNDI,您基本上会说“此应用程序需要SessionFactory
;并且其名称应为X”,只要应用程序服务器配置了名为X的SessionFactory
,您就会感到高兴。这种外化有几个吸引人的好处:
您可以在不同的计算机上使用完全不同的配置(生产和QA使用Oracle,开发人员使用HSQL,......)。
您无需让构建过程了解配置(不再需要ant war_for_qa
或使用Maven配置文件)。
您不想将配置检查到版本控制中,因此每个曾经(或将要拥有!)访问权限的临时工,实习生,顾问或前雇员都不会知道您的实时数据库密码到存储库。
您的安装/配置说明不包括“配置数据库登录,编辑WAR文件中的文件foo.properties”等项目,这将不可避免地导致生产服务器上的配置被覆盖可能的时刻,因为一个周末工作的系统管理员碰巧部署了一个未经编辑的WAR,因为周日下午咖啡用完了。
JNDI恰好是在Java中进行外部化的“标准”方式,这意味着新的开发人员/管理员不需要两天的培训来学习你自己的家庭酿造配置系统的怪癖是非常聪明,但有这个奇怪的错误,没有人想深入研究,因为它真的奇怪,任何它有一个非常简单的解决方法,& c。