现在的位置: 首页 > 综合 > 正文

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

2013年03月25日 ⁄ 综合 ⁄ 共 1983字 ⁄ 字号 评论关闭

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

由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 的一个实例。接下来的操作就跟没使用连接池是一样的了。

 

 

【上篇】
【下篇】

抱歉!评论已关闭.