如何在Tomcat和Glassfish上使用相同的连接数据源?

时间:2012-03-20 09:32:28

标签: hibernate tomcat glassfish jndi

我喜欢在本地Tomcat安装上使用Hibernate测试我的Web应用程序,稍后将其部署到Glassfish服务器。

Tomcat的连接数据源如下所示:

<property name="connection.datasource">java:comp/env/jdbc/mydb</property>

Glassfish路径:

<property name="connection.datasource">jdbc/mydb</property>

是否可以合并这两个设置,以便我只能使用一个hibernate.cfg.xml来运行environemnt?

2 个答案:

答案 0 :(得分:0)

更好的方法是使用两个(或更多)hibernate.cfg.xml配置文件,每个环境和/或数据库一个。

两个文件的配置文件的大部分内容都相同(尤其是映射文件的引用)。只有连接字符串,用户/密码或数据库驱动程序等部分不同(如有必要)。

然后,您将配置文件的路径和文件名作为应用程序的启动参数,并在Configuration.configure(<filename>)中使用它。

优点是:
- 不同的连接字符串没有问题
- 用于测试和生产的不同密码没有问题 - 使用不同数据库的可能性(例如Oracle和MySQL) - 如果表只在一个环境中更改,则可以轻松引用不同的映射文件
=&GT;所有这些都使用相同的Java代码来实现这两种环境。

答案 1 :(得分:0)

使用两个hibernate配置文件进行复制和粘贴并不是一个真正的问题。

如果您绝对只想拥有一个文件,则可以使用两个环境中的所有内容创建hibernate.cfg.xml,并包含仅包含连接字符串的第二个文件。

例如hibernate.cfg.xml中的这样:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" [
   <!ENTITY database_connection SYSTEM "databaseConnection.xml">
  ]>

<hibernate-configuration>

  <session-factory>

&database_connection;

    <property name="show_sql">true</property>

    <mapping resource="..."/>
    ...
    <mapping resource="..."/>
  </session-factory>
</hibernate-configuration>

然后您需要第二个文件databaseConnection.xml,其中包含连接信息,并在读取配置时自动包含。这个文件有两个版本,一个用于Tomcat,一个用于Glassfish。如果更改映射,则只需在一个文件中执行,但在交付软件时必须注意第二个文件。

我个人认为,带有两个hibernate.cfg.xml文件的版本更容易,更灵活。

(顺便说一下,包含文件是一个xml功能,不是一个休眠功能。)