Configure hibernate to connect to database via JNDI Datasource

后端 未结 4 1920
清酒与你
清酒与你 2020-11-27 12:29

Hi all I\'m using Hibernate+Struts2+Tomcat6+Mysql as my J2EE framework. I\'ve been using hibernate\'s built-in connection pooling mechanism but it turned out to be problemat

相关标签:
4条回答
  • 2020-11-27 13:01

    Apparently, you did it right. But here is a list of things you'll need with examples from a working application:

    1) A context.xml file in META-INF, specifying your data source:

    <Context>
        <Resource 
            name="jdbc/DsWebAppDB" 
            auth="Container" 
            type="javax.sql.DataSource" 
            username="sa" 
            password="" 
            driverClassName="org.h2.Driver" 
            url="jdbc:h2:mem:target/test/db/h2/hibernate" 
            maxActive="8" 
            maxIdle="4"/>
    </Context>
    

    2) web.xml which tells the container that you are using this resource:

    <resource-env-ref>
        <resource-env-ref-name>jdbc/DsWebAppDB</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

    3) Hibernate configuration which consumes the data source. In this case, it's a persistence.xml, but it's similar in hibernate.cfg.xml

    <persistence-unit name="dswebapp">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
            <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/DsWebAppDB"/>
        </properties>
    </persistence-unit>
    
    0 讨论(0)
  • 2020-11-27 13:06

    Tomcat-7 JNDI configuration:

    Steps:

    1. Open the server.xml in the tomcat-dir/conf
    2. Add below <Resource> tag with your DB details inside <GlobalNamingResources>
    <Resource name="jdbc/mydb"
              global="jdbc/mydb"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/test"
              username="root"
              password=""
              maxActive="10"
              maxIdle="10"
              minIdle="5"
              maxWait="10000"/>
    
    1. Save the server.xml file
    2. Open the context.xml in the tomcat-dir/conf
    3. Add the below <ResourceLink> inside the <Context> tag.
    <ResourceLink name="jdbc/mydb" 
                  global="jdbc/mydb"
                  auth="Container"
                  type="javax.sql.DataSource" />
    
    1. Save the context.xml
    2. Open the hibernate-cfg.xml file and add and remove below properties.
    Adding:
    -------
    <property name="connection.datasource">java:comp/env/jdbc/mydb</property>
    
    Removing:
    --------
    <!--<property name="connection.url">jdbc:mysql://localhost:3306/mydb</property> -->
    <!--<property name="connection.username">root</property> -->
    <!--<property name="connection.password"></property> -->
    
    1. Save the file and put latest .WAR file in tomcat.
    2. Restart the tomcat. the DB connection will work.
    0 讨论(0)
  • 2020-11-27 13:11

    I was getting the same error in my IBM Websphere with c3p0 jar files. I have Oracle 10g database. I simply added the oraclejdbc.jar files in the Application server JVM in IBM Classpath using Websphere Console and the error was resolved.

    The oraclejdbc.jar should be set with your C3P0 jar files in your Server Class path whatever it be tomcat, glassfish of IBM.

    0 讨论(0)
  • 2020-11-27 13:14

    Inside applicationContext.xml file of a maven Hibernet web app project below settings worked for me.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/mvc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
            http://www.springframework.org/schema/jee 
            http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
    



      <jee:jndi-lookup id="dataSource"
                     jndi-name="Give_DataSource_Path_From_Your_Server"
                     expected-type="javax.sql.DataSource" />
    


    Hope It will help someone.Thanks!

    0 讨论(0)
提交回复
热议问题