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

标签 hibernate tomcat weblogic datasource weblogic12c

我有一个在 Tomcat 7 上运行的 Web 应用程序。它使用 Hibernate 4 连接到在 Tomcat server.xml 和 context.xml 文件中定义的数据源。

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

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

  • 我是否必须将其他文件添加到我的 Web 应用程序?我见过一些人谈论诸如 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 数据源

<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"/>

最佳答案

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

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

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

关于hibernate - 使用 Hibernate+DataSource 将应用程序从 Tomcat 7 迁移到 Weblogic 12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25192575/

相关文章:

java - JSP中获取Set的第一个元素

hibernate - 如何在JPQL中选择多个count()选择的总和

java - 带有 MySql 的 Tomcat 7

tomcat - 在同一构建期间为 Tomcat 创建和部署特定于环境的 war 构建

java - 如何使 EAR 引用 WAR 共享库

java - "DISTINCT ON"与 HQL?

database - JPA : best practices with unidirectional OneToMany

eclipse - 将 java 6 maven webapp 从 netbeans 发布到 tomcat 时出现轻微的 url 不匹配

WebLogic 错误 : No credential mapper entry found for password indirection user=db_user?

java - 如何使 JAX-WS web 服务响应 JSESSIONID( session ID)