• Hibernate4.1配置数据库连接池 org.hibernate.service.jndi.JndiException:Unable to lookup JNDI name java:comp/env...


    数据库连接池技术的基本原理:

    由Web容器(如Tomcat)提供数据源对象,在程序中使用 JNDI 技术获得该对象。一般如果自己创建连接的话,用下面的代码获取数据源对象:

    Context context = new InitialContext();

    DataSource dataSource = (DataSource)context.lookup("java://comp/env/jdbc/mydb");

    Connection conn = dataSource.getConnection();

    这里mydb是要连接到的数据库名,一定要注意 java: 后面有双斜线,否则就会报出异常:

    org.hibernate.service.jndi.JndiException:Unable to lookup JNDI name java:comp/env...

    但其实如果使用Hibernate框架的话,就不用这样费事了。按照下面的步骤一步步来就OK了:

    1. 找到tomcat安装目录,以 D:\Program Files\Apache Software Foundation\Tomcat 6.0\conf 为例,在 context.xml 文件中的<Context>标签下添加代码:

    1 <!--Resource 设置数据库连接池的核心-->
    2     <!--属性 name 数据源的名字       属性 auth 表示验证方式     type 资源的类型  -->     
    3     <Resource name="jdbc/struts" auth="Container" type="javax.sql.DataSource"
    4               maxActive="100" maxIdle="30" maxWait="10000"
    5               username="root" password="****"
    6               driverClassName="com.mysql.jdbc.Driver"
    7               url="jdbc:mysql://192.168.1.173:3306/struts"/>

      我的数据库名称为struts,所以这里配置的名字也是struts。

    2. 将JDBC的驱动jar包放到 tomcat 的 lib 文件夹下,如 D:\Program Files\Apache Software Foundation\Tomcat 6.0\lib。
    3. 在项目的 web.xml 文件中添加如下代码:

    1    <resource-ref>
    2       <description>struts datasource</description>
    3       <res-ref-name>jdbc/struts</res-ref-name>
    4       <res-type>javax.sql.DataSource</res-type>
    5       <res-auth>Container</res-auth>
    6   </resource-ref>

      这里的各配置要和在 context.xml 文件中的配置一致。

    4. 配置 hibernate.cfg.xml。可以使用视图直接选择 Use JNDI DataSource 选项,然后在DataSource栏中填入 "java://comp/env/jdbc/struts"。生成的代码:

     1 <?xml version='1.0' encoding='UTF-8'?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4           "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     5 <!-- Generated by MyEclipse Hibernate Tools. -->
     6 <hibernate-configuration>
     7 
     8     <session-factory>        
     9         <property name="connection.datasource">
    10             java://comp/env/jdbc/struts
    11         </property>
    12         <property name="dialect">
    13             org.hibernate.dialect.MySQLDialect
    14         </property>
    15         
    16         <property name="show_sql">true</property>
    17         
    18         <mapping resource="com/entity/Users.hbm.xml" />
    19     </session-factory>
    20 
    21 </hibernate-configuration>

    5. 使用MyEclipse插件添加的Hibernate框架的话,会生成一个 HibernateSessionFactory 类,直接调用这个类的静态函数 getSession() 就能获取到 Session 的一个实例。接下来的操作就跟没使用连接池是一样的了。

  • 相关阅读:
    How to using X++ code achieve copying records
    How to using x++ code achieve Lookup files list with entire folder
    Using X++ code create and Read XML file.
    Using X++ Code Create master table form
    When you are finished renamed the Item number Jobs
    Visual Studio.NET 简介
    Visual C++中的异常处理浅析
    最常见的20种VC++编译错误信息
    开发WDM型的USB设备驱动程序
    C++中内存管理
  • 原文地址:https://www.cnblogs.com/lihuiyy/p/2969870.html
Copyright © 2020-2023  润新知