【问题标题】:Best practice? JNDI, Hibernate and Tomcat最佳实践? JNDI、休眠和Tomcat
【发布时间】:2011-04-19 04:08:33
【问题描述】:

我有一个 web 应用程序,由 tomcat 托管,它使用 hibernate 与数据库通信。

我正在研究如何在从 dev 迁移到 test 和 prod 时减轻配置的痛苦。

我看到很多人提到过 JNDI,乍一看这似乎是个好主意。您在每个 tomcat 实例上配置一个 jndi 资源,Web 上下文只使用它。

然而,在进一步检查之后,似乎为了拥有一个 JNDI,我必须在 tomcat lib 文件中拥有我的所有数据库对象 + 休眠才能使其正常工作。这对我来说听起来很可怕,如果我想部署另一个使用不同版本的 hibernate 的上下文怎么办?

另外,我不只是将维护配置的痛苦换成了由于已安装的 jndi 资源类与我的上下文中的资源类不匹配而导致的损坏的痛苦。

理想情况下,我认为我想要的只是在 tomcat 中说。有一个名为 X 的数据库,它在这个服务器上并且有这个用户/密码。

非常感谢您对在不同环境中处理不同配置需求的最佳方法的想法,而无需在每次部署后执行额外步骤来更新配置文件。

干杯, 彼得

【问题讨论】:

    标签: java hibernate tomcat jndi


    【解决方案1】:

    我相信你有点搞混了。

    JNDI 只是分配给数据源池的名称。此数据源使用全局 Tomcat 类路径中的 JDBC 驱动程序,但它是整个设置中唯一的共享资源。

    数据源定义了连接 U​​RL、用户名、密码和连接选项,每个服务器可能不同,但应用程序并不关心它——它只知道 JNDI 名称,例如“jdbc/myDatasource”。

    所有休眠 JAR 以及任何其他 JAR 和其他 JAR 都将打包在 WAR 中。它们仅在 WAR 中“可见”,因此您可以让多个应用程序使用部署到同一个 Tomcat 的库的冲突版本。

    无需污染Tomcat的lib/目录。正如您正确观察到的那样,这是一种不好的做法。

    【讨论】:

    • 所以这里的说明 (community.jboss.org/wiki/…) 是个坏主意?
    • 另外,假设我可以解决如何创建会话工厂作为与 jndi 数据源对话的东西,我该如何处理使用 mysql 的开发环境和使用 SQLServer 的测试/生产的问题?
    • 那里的说明是如何通过 JNDI 使用 SessionFactory。换句话说,如何在几个应用程序之间共享 Hib SF。我看不出“它有多有用”,所以我的建议是只分享必要的最低限度,即数据源。
    • 您使用的不是偶数版本,而是开发和生产中的 RDBMS?嗯……这真是一次冒险,嗯?您可以做的是将 hibernate.cfg.xml 放入 Tomcat 全局类路径中。其余文件仍将在 WAR 中。
    • 嗯,现在有了一个想法。可能会远离默认名称并将其命名为 mycontext-hibernate.cfg.xml。我会回来报告,让你知道我的进展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多