`

Tomcat 6中配置JNDI简单示例

阅读更多

本想在晚上找个示例学习学习,结果一直不会弄,知道刚才看了tomcat的官方站点里面的介绍,才终于配置成功,所以大家可以参考tomcat站点上的介绍说明,还是挺不错的,除了jdbc datasource还有其他形式的,这是地址:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html

好了,下面开始:

 

简单说一下我对JNDI目前的简单理解:最初我学习JDBC的时候是将连接信息用硬编码的形式写在类里面的,当然,我当时还是小白,后来为了方便就将这些信息放在一个properties文件中,这样以来,就实现了代码和配置相分离的结果。然后学习Hibernate的时候也是类似,将配置信息存放在xml中。这些方式虽然实现了分离,没错,不过还有分离的更清楚的方式,就是JNDI了,为什么说分离的更清楚?因为我们将系统部署好以后开始运行,在运行过程中要修改这些配置信息很简单吧,去部署好的项目里面找到该配置文件改就行了,不过,好的实现应该是将这些信息不放在项目中,而是放在容器中。Tomcat,JBoss等都可以,那么Administrator,deployer或者DBA需要修改信息的时候,根本就不用去动项目,而是去使用的容器里面去修改。因此,这里使用JNDI将JDBC的配置信息配置在Tomcat中可以更好的实现代码和配置分离。

 

 

示例环境:tomcat6+myeclipse6.5+SqlServer2005

  • 针对单个WEB应用配置JNDI Resource

步骤:

1-因为此时需要由tomcat提供连接信息,所以这里要将SqlServer的驱动放在tomcat里面,因为我使用的是Tomcat6,所以存放的地方应该是%CATALINA_HOME%\lib。

2-在Tomcat中配置资源信息,这里配置的是JDBC连接信息,在Tomcat的server.xml文件中添加资源信息

<Context path="/jndi" docBase="D:\workspace\jndi\WebRoot" reloadable="true">
	<Resource name="jdbc/jndi_demo"
            auth="Container"
            type="javax.sql.DataSource"
            username="sa"
            password="java"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://localhost:1433;databaseName=demo_jndi"
            maxActive="8"
            maxIdle="4"/>
</Context>

 

我使用的是虚拟目录的方式部署的WEB项目,因此我将配置信息放在了Context节点下面。

在添加的Resource节点中我们配置了JDBC的相关信息,有URL,Driver,username,password还有pool的部分信息,详细属性可以参考tomcat的文档,地址上面给出了。

3-配置好JDBC信息后就可以使用这些信息了,我新建了一个Servlet来操作Connection,代码如下:

package servlet;

import java.sql.Connection;
import java.sql.PreparedStatement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;

public class ConnectionTest extends HttpServlet {

	@Override
	public void init() {

		Connection con = null;
		PreparedStatement pst = null;
		try {
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:comp/env");

			DataSource ds = (DataSource) envContext.lookup("jdbc/jndi_demo");

			String sql_insert = "insert tb_user values(?,?,?)";

			con = ds.getConnection();

			pst = con.prepareStatement(sql_insert);

			pst.setString(1, "zhangsan");
			pst.setInt(2, 1);
			pst.setString(3, "用户张三的信息");

			int resultCount = pst.executeUpdate();

			System.out.println(resultCount);

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("操作失败");
		} finally {
			try {
				pst.close();
				con.close();
			} catch (Exception e) {
				System.out.println("关闭失败");
			}
		}

	}

}

 

执行完成之后数据库中就有一条记录

--------------------------------

zhangsan 1 用户张三的信息

--------------------------------

说明执行成功!以上就是为单个WEB应用配置JDBC JNDI信息的简单过程。下面是配置可以供所有WEB应用共享的全局Resource信息

  •  配置全局的JNDI数据源

将上面配置在特定应用<Context>节点下的<Resource>节点信息放到上面的<GlobalNamingResources>节点里面,即:

<GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />


	<Resource name="jdbc/jndi_demo"
            auth="Container"
            type="javax.sql.DataSource"
            username="sa"
            password="java"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://localhost:1433;databaseName=demo_jndi"
            maxActive="8"
            maxIdle="4"/>

  </GlobalNamingResources>

 

这样就将JNDI数据源Resource添加到了全局环境中,而某个WEB应用如若需要引用该全局数据源的话只需要给<Context>节点内添加以下内容即可:

<ResourceLink name="jdbc/jndi_demoClass" global="jdbc/jndi_demo" type="javax.sql.DataSource"/>

 

ResourceLink表明这里引用了一个全局数据源

其中name属性是该引用的名称,这个可以可以和全局环境中生命好的Resource里面的name不一致,但是必须和程序里面使用的名称一致

global属性指明要引用哪个全局数据源,因此这个名称必须和全局环境中的Resource的name一致。

只需要这两步就成功的配置了全局JNDI数据源。

 

 

不过官方文档里面说还要给WEB应用下WEB-INF/web.xml里面要添加下面的内容:

<resource-ref>
  <description>
    Resource reference to a factory for java.sql.Connection
    instances that may be used for talking to a particular
    database that is configured in the <Context>
    configurartion for the web application.
  </description>
  <res-ref-name>
    jdbc/EmployeeDB
  </res-ref-name>
  <res-type>
    javax.sql.DataSource
  </res-type>
  <res-auth>
    Container
  </res-auth>
</resource-ref>

 

不过我没有添加也可以配置成功并且可以访问数据。因此不知道这个节点信息起的作用是什么,各位路过的大牛如果有知道的话劳烦告诉一下在下。

 

 

如果上面内容有不正确的地方,还希望各位大牛为在下指出,改正,或者有更好的内容也可以 给在下提示一下,让在下可以多学习学习,在此表示感谢!!!

注:本示例参考了apache tomcat的官方文档http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html

分享到:
评论

相关推荐

    Tomcat中JNDI原理

    在部署该应用时,管理员可以在Tomcat的配置文件中设置相应的JNDI条目: ```xml type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username=...

    tomcat6.0 配置jndi

    在Tomcat6.0中配置JNDI,主要是为了实现应用中的数据源管理,使得多个应用可以共享一个数据库连接池,提高资源利用率和系统性能。 **一、JNDI的基本概念** JNDI提供了一个统一的接口,让开发者可以查找和绑定各种...

    tomcat6+jndi+c3p0配置数据库连接池

    本示例主要讲解如何在Tomcat6中结合JNDI(Java Naming and Directory Interface)和C3P0库来配置数据库连接池,这对于初学者理解Web应用服务器与数据库的交互方式具有很大帮助。 首先,C3P0是一个开源的JDBC连接池...

    tomcat6.0连接通过JNDI连接mysql实例

    Tomcat 6.0 中通过 JNDI 连接 MySQL 实例需要进行详细的配置和设置。本文将对 Tomcat 6.0 中的 JNDI 连接 MySQL 实例进行详细的介绍和解释。 配置 JNDI 资源 在 Tomcat 6.0 中,需要在 `META-INF/context.xml` ...

    eclipse+mysql+tomcat配置JNDI

    在Tomcat中,JNDI常用于配置数据库连接池,使得多个Web应用可以共享同一个数据库连接。 配置JNDI的步骤如下: 1. **安装与配置MySQL**: 首先确保你已经安装了MySQL数据库,并创建了所需的数据库和用户。你需要...

    Tomcat-5配置JNDI数据源

    总结,配置Tomcat 5.5及以上版本的JNDI数据源涉及多个步骤,包括添加JDBC驱动、配置全局数据源、在应用中引用数据源以及在代码中通过JNDI查找并使用数据源。选择全局或局部配置取决于应用的需求和资源的共享范围。...

    tomcat配置jndi

    总结,配置Tomcat中的JNDI主要是为了方便和高效地管理数据库连接,通过在服务器端定义数据源,并在应用程序中通过JNDI查找和使用,可以极大地简化开发工作。理解并掌握这一过程对于任何使用Tomcat部署Java Web应用的...

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

    为了在Hibernate配置中使用JNDI DataSource,需要在`hibernate.cfg.xml`文件中指定相关设置: ```xml &lt;!-- 其他配置 --&gt; &lt;property name="connection.provider_class"&gt;org.hibernate.connection.C3P0...

    Tomcat6下JNDI的配置

    在Tomcat 6这样的Servlet容器中配置JNDI,可以让应用程序更加模块化,易于管理和维护。本文将详细介绍在Tomcat 6下配置JNDI连接池的步骤。 首先,我们需要创建一个Web项目。在这个例子中,我们将项目命名为`...

    在tomcat6.0.18下手动配置jndi

    在提供的`test-jndi`压缩包文件中,可能包含了用于演示或练习这个配置过程的示例代码和配置文件。通过研究这些文件,你可以更深入地理解和实践上述步骤。记住,实践是检验理论的最好方式,动手操作才能真正掌握这个...

    Tomcat中配置和使用JNDI.doc

    本文档将详细介绍如何在Tomcat服务器中配置和使用JNDI,特别关注如何通过JNDI连接MySQL数据库,并提供一个示例应用程序DBTest。 ##### 准备工作 首先,确保已经安装了Tomcat 4.0版本,并且MySQL数据库也已安装并...

    Tomcat6.0 JNDI数据源经典实例

    本实例是一个关于如何在Tomcat 6.0中配置和使用JNDI数据源的经典示例,包含了所需的JAR包、配置文件和SQL脚本。 首先,我们来看配置JNDI数据源的步骤。在Tomcat的`conf/server.xml`文件中,你需要添加一个新的`...

    java中使用tomcat提供的JNDI数据源

    在本节中,我们将详细介绍如何在Tomcat中配置JNDI数据源,并演示一个简单的示例。 ##### 2.1 配置Tomcat服务器 首先,在Tomcat中配置JNDI数据源需要创建一个`Resource`元素在特定的`Context`配置文件中。具体步骤...

    jndi示例(java)

    6. **部署文档**:提供的部署文档可能包含如何在Tomcat中配置JNDI资源的详细步骤,包括修改`server.xml`、`context.xml`等配置文件,以及如何在Java代码中通过JNDI查找这些资源。 7. **示例代码**:在压缩包中可能...

    JNDI示例整合SSH

    **标题:“JNDI示例整合SSH”** 在IT领域,`JNDI`(Java Naming and Directory Interface)是Java平台提供的一种标准接口,用于访问命名和目录服务。它允许应用程序查找和操作不同类型的网络资源,如数据源、EJB等...

    用dbcp连接池,mysql数据库,在tomcat服务器下,通过hibernate配置jndi数据源.doc

    【标题】中的知识点: 1. **DBCP连接池**:DBCP(Jakarta Commons...尽管Hibernate官方并不推荐使用DBCP,但文档仍然提供了详细的配置步骤,包括环境准备、数据库和表的创建,以及在Tomcat的XML配置文件中设置数据源。

    为Tomcat6配置数据源

    - 示例配置如下所示: ```xml name="jdbc/book" type="javax.sql.DataSource" password="" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="5" maxWait="5000" username=...

    Tomcat jndi 配置数据源过程

    JNDI配置数据源是将数据库连接池集成到Tomcat中的重要步骤,这样可以提高应用的性能和可维护性。下面我们将详细介绍如何在Tomcat中通过JNDI配置数据源。 首先,我们需要了解数据源是什么。数据源是一个对象,它管理...

    Tomcat配置数据源连接池示例

    本示例主要关注如何在Apache Tomcat服务器中配置数据源连接池,以提高数据库访问的效率和稳定性。Tomcat作为一个流行的Java Servlet容器,支持多种数据源连接池实现,如Apache Commons DBCP、C3P0、HikariCP等。在这...

    (收集)tomcat jndi

    6. **JNDI与EJB**:在Tomcat中,尽管不直接支持完整的Enterprise JavaBeans (EJB) 规范,但可以利用JNDI来查找和调用简单的无状态会话Bean,这些Bean可以通过其他方式部署在支持EJB的服务器上。 7. **源码分析**:...

Global site tag (gtag.js) - Google Analytics