我有一个托管在tomcat上的web应用程序,它使用hibernate与数据库通信。
我正在研究如何在从dev迁移到test和prod的过程中减轻配置的痛苦。
我看到JNDI提到了很多东西,乍一看似乎是个好主意。您在每个tomcat实例上配置一个jndi资源,web上下文就会使用它。
然而,进一步研究之后,似乎为了拥有JNDI,我必须将所有数据库对象+ hibernate放在tomcat lib文件中,这样才能正常工作。这对我来说听起来很可怕,如果我想部署另一个使用不同版本hibernate的上下文怎么办?
而且,我不是仅仅用维护配置的痛苦来换取由于已安装的jndi资源类与我的上下文中的资源类不匹配而导致的破坏的痛苦吗?
理想情况下,我想我想要的是用tomcat来表达。有一个名为X的数据库,它位于此服务器上,并具有此用户/通行证。
我希望您能以最好的方式处理不同环境中的不同配置需求,而不必在每次部署后都有额外的步骤来更新配置文件。
干杯,彼得
发布于 2011-04-19 12:13:46
我相信你把事情搞糊涂了。
JNDI只是一个分配给数据源池的名称。此数据源使用JDBC驱动程序,该驱动程序位于全局Tomcat类路径中,但这是整个设置中唯一的共享资源。
Datasource定义了连接URL、用户名、密码和连接选项,每个服务器可能会有所不同,但应用程序并不关心它--它只知道JNDI名称,例如"jdbc/myDatasource“。
所有冬眠的罐子,以及任何其他罐子和不能打包的东西都要在战争中打包。它们仅在WAR中“可见”,因此您可以将使用冲突版本的库的多个应用程序部署到同一Tomcat。
不需要污染Tomcat的lib/目录。正如您正确地观察到的,这是一种糟糕的做法。
https://stackoverflow.com/questions/5711488
复制相似问题