我在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.xml
和weblogic.xml
等文件,但不知道应该去哪里。
我是否必须在hibernate.cfg.xml
文件中添加属性?
在为DataSource定义JNDI名称时,我是否应该使用jdbc
前缀?仅用于因为我在Tomcat上的使用方式
下面是我当前的hibernate.cfg.xml
文件和以前的Tomcat数据源配置。
OBS :应用程序结构是使用Maven创建的。
<?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>
<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"/>
答案 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()
。