`
djsl6071
  • 浏览: 578630 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Hibernate 3.1+Tomcat 5.5.X(配置JNDI篇)

阅读更多
<script src="http://www.51cto.com/php/ajax_art_2.js" language="javascript" type="text/javascript"></script>
Hibernate 3.1+Tomcat 5.5.X(配置JNDI篇)
<!---->
<!---->

 

【51CTO.com独家特稿】一、引言

在Tomcat从其5.0版本升级到5.5.x版本之后,它的配置发生了很多变化。这些改变明显地影响到Tomcat JNDI的建立,这反过来又影响到Hibernate—假定你想在自己的Hibernate安装中利用Tomcat JNDI所提供的方便的DataSource配置的话。

另外,在Hibernate从其3.0版本升级到3.1版本的过程中,在有关获取线程安全的Hibernate会话方面也进行了极大的简化。

从Hibernate的角度来观察,Tomcat是一种混合的环境。Tomcat提供一个JNDI和DataSource—它们都不是一个独立的应用程序。这个DataSource工具为实现应用程序服务器的可移植性提供了方便。但是,就象一个独立的环境一样,Tomcat并没有提供事务管理器;因此,你的代码中必须使用Hibernate事务管理器。

到目前为止,我们很难找到有关这两个新版本框架联用的完整的描述—在因特网,甚至在Hibernate.org站点(http://www.hibernate.org)上都未曾发现。而在其它一些地方找到的相关信息都已过时。原先的Hibernate 3.0参考文档中提供了有关Hibernate/Tomcat集成(基于Tomcat 4.1)的很有用的一章,但在当前Hibernate 3.1的参考文档中已经删除了原有的这一章。因此,我们十分希望,本系列文章(三篇)会对你的工程开发中在新版本的Hibernate和Tomcat联用方面助一臂之力。

二、Context.xml文件

在Tomcat的早期版本中,你必须经由服务器范围的配置文件—server.xml来配置Tomcat JNDI。为此,你需要在这个文件内包括多个<resourceparams></resourceparams>元素,相应于每一个DataSource建立一个<resourceparams></resourceparams>元素。在Tomcat 5.5中,你不再需要使用这个服务器范围的文件来配置JNDI。而是,你只需要把一个应用程序范围的Context.xml放到你的META-INF目录—例如“C:\Tomcat 5.5\webapps\BasicWeb\META-INF\Context.xml”下。(注意:你可能会在网上看到许多参考资料,其中说,这个文件应该根据你的应用程序命名—例如YourApp.xml。其实,这是错误的—你应该使用固定的文件名Context.xml。)

下面图1中的屏幕快照展示了在你的Tomcat目录层次下的Context.xml文件的位置:

 



在你的应用程序的Context.xml文件中,相应于每一个DataSource你都应该包括一个<resource></resource>元素。这个<resource></resource>元素提供了一组定义DataSource的属性,但是没有子元素。下面是一个应用程序完整的Context.xml文件内容。注意,在此仅要求使用一个DataSource:

<!---->

<context path="/BasicWeb" reloadable="true"></context>  docBase="C:\Tomcat 5.5\webapps\BasicWeb"

workDir="C:\Tomcat 5.5\webapps\BasicWeb">

<resource name="jdbc/Sampdb" auth="Container"></resource>    type="javax.sql.DataSource"

maxActive="100" maxIdle="30" maxWait="10000"

username="sam" password="sam123"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/sampdb?autoReconnect=true"/>

上面的<resource></resource>元素具有创建一个Tomcat JNDI DataSource入口的作用。当Tomcat服务器初始启动时,这个JNDI及这个相应的JNDI入口即被创建。站在从JNDI中检索信息的角度来看,这个JNDI DataSource入口与一个应用程序服务器中的这样的一个入口没有什么不同。(然而,在Tomcat启动周期完成之后,这个Tomcat JNDI是只读的。在Tomcat操作过程中,你的定制应用程序和Hibernate都不能够添加或修改这个JNDI中的入口)

顺便说一下,本系列的几篇中都可能会使用MySQL作为数据存储方式,这正如你在上面的<resource></resource>元素中所见的。

不仅Hibernate能够使用Tomcat JNDI,你的原始JDBC也能够存取JNDI,其方式与你从一个应用程序服务器的一个JNDI中存取一个DataSource的方式完全一致。下面代码片断来自于一个servlet中,它从上面的JNDI<resource></resource>元素中获得一个JNDI连接,并且使用原始JDBC(不是Hibernate)来执行数据库查询。

InitialContext initCtx = new InitialContext();

DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/Sampdb");

Connection conn = ds.getConnection();

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from car");

在本篇中,我们提供了一个完整的servlet源码实现。我们的目的是为了展示Hibernate 3.1和Tomcat 5.5函数是如何协作的(后面两篇中的示例也是这一目的)。而且,这些代码是很容易理解的—不同于你将正式发布的具有商业质量的代码—它们会包括完整的异常处理以及其它实践(例如使用MVC模式,这与本文中我们的目的毫无关系)。(你当然会使用一个JSP而不是一个servlet作为你的视图组件。但是,即使添加少部分的MVC模式内容也会干扰我们所讨论的主要内容—Hibernate和Tomcat的联合问题。)

在此,我们列出本文第一个完整的servlet示例源码:

package TomcatJNDI;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.*;

import javax.sql.*;

import javax.naming.*;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Retrieval extends HttpServlet {

/**

*对象的构造函数

*/

public Retrieval() {

super();

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out

.println("");

out.println("<html></html>");

out.println("  <head></head>");

out.println("  ");

try  {

InitialContext initCtx = new InitialContext();

DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/Sampdb");

Connection conn = ds.getConnection();

out.println("

");

out.println("Connection from DataSource successfully opened!

");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from car");

while (rs.next() )  {

String onerow = "Car manufacturer: " + rs.getString("manufacturer")

+ ,"  model: "  + rs.getString("model")

+ ,"  year: "  + rs.getString("year") + "

";

out.println(onerow);

}

rs.close();

stmt.close();

conn.close();

initCtx.close();

out.println("

");

out.println("Connection from DataSource successfully closed!

");

}

catch(Exception e)  {

out.println("

");

out.println("Connection from DataSource NOT successfully opened!

");

out.println(e.getMessage() + "

");

}

out.println("  ");

out.println("");

out.flush();

out.close();

}

public void init() throws ServletException {

//在此加入你的代码

}

} //类Retrieval结束

注意,就象任何一个正常应用程序服务器一样,Tomcat实际上也自动提供了数据库连接池支持。在Tomcat情况下,连接池支持是由DBCP组件提供的。在前面展示的<resource></resource>xml元素中,maxActive="100"属性意味着连接池最大应该支持具有100个的活动连接。

三、小结

在本篇中,我们集中讨论了Tomcat 5.5.x JNDI的配置问题。上面展示的Context.xml文件,不需作任何修改即可支持Hibernate。事实上,为了从Hibernate中使用Tomcat JNDI,这样的一个文件也是必需的。

 
【导读】本系列文章(共三篇)旨在详细介绍当前高版本的Hibernate和Tomcat联用方面的知识,并通过几个简短示例对相应注意事项加以说明。
分享到:
评论

相关推荐

    hibernate 3.1+tomcat 5.5.x(配置jndi)

    hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    3. Web服务器:Tomcat 5.5及以上版本,配合MVC设计模式及 Hibernate开发架构; 4. 客户端运行环境:能运行IE 5以上或Netscape 5以上浏览器的操作系统,配合使用Ajax技术; 5. 客户端运行工具:目前的系统采用...

    J2EE应用开发详解

    17 2.1 构建开发环境 17 2.1.1 安装JDK 17 2.1.2 安装Tomcat 21 2.1.3 安装Eclipse 23 2.2 配置开发环境 23 2.3 小结 26 第3章 Java的反射机制 27 3.1 Java反射API 27 3.2 加载类的实例 29 3.2.1 加载class对象的两...

Global site tag (gtag.js) - Google Analytics