使用Hibernate + DataSource将应用程序从Tomcat 7迁移到Weblogic 12

时间:2014-08-07 21:30:06

标签: hibernate tomcat weblogic datasource weblogic12c

我在Tomcat 7上运行了一个webapp。它使用Hibernate 4连接到Tomcat server.xml和context.xml文件中定义的DataSource。

由于公司内部原因,我必须将webapp迁移到Weblogic 12.我已成功部署它,但与数据库的连接除外。我在Weblogic控制台上创建了一个DataSource,并通过Console对其进行了测试,它运行正常(JNDI名称为jdbc/MyAppDB)。

要在Tomcat中运行我的应用程序,我只需要告诉hibernate.cfg.xml文件来查找数据源,但是对于Weblogic来说,这是不够的。我对如何配置DataSource连接感到很困惑。基本问题是:

  • 我是否必须将其他文件添加到我的Webapp?我看到有些人在谈论context.xmlweblogic.xml等文件,但不知道应该去哪里。

  • 我是否必须在hibernate.cfg.xml文件中添加属性?

  • 在为DataSource定义JNDI名称时,我是否应该使用jdbc前缀?仅用于因为我在Tomcat上的使用方式

下面是我当前的hibernate.cfg.xml文件和以前的Tomcat数据源配置。

OBS :应用程序结构是使用Maven创建的。

hibernate.cfg.xml中

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>   

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

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">false</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.max_fetch_depth">3</property>

        <mapping class="org.my.app.model.ServerInfo"/>
        <mapping class="org.my.app.model.Parameter"/>

    </session-factory>
</hibernate-configuration>

Tomcat DataSource

<Resource name="jdbc/MyAppDB" global="jdbc/MyAppDB" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="root" password="#####" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://127.0.0.1:3306/myappdb"/>

1 个答案:

答案 0 :(得分:1)

显然我是以错误的方式定义数据源路径。它应该只是JNDI名称。因此,在我的例子中,数据源应该在hibernate.cfg.xml中引用为:

<property name="hibernate.connection.datasource">jdbc/MyAppDB</property>

编辑:值得注意的是,此时Weblogic 12c可以很好地适用于Hibernate 4.3.5+。不过,我已经成功了4.1.1。使用旧的,已弃用的HibernateUtil方法,例如buildSessionFactory()