本想在晚上找个示例学习学习,结果一直不会弄,知道刚才看了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
步骤:
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信息
将上面配置在特定应用<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条目: ```xml type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username=...
在Tomcat6.0中配置JNDI,主要是为了实现应用中的数据源管理,使得多个应用可以共享一个数据库连接池,提高资源利用率和系统性能。 **一、JNDI的基本概念** JNDI提供了一个统一的接口,让开发者可以查找和绑定各种...
本示例主要讲解如何在Tomcat6中结合JNDI(Java Naming and Directory Interface)和C3P0库来配置数据库连接池,这对于初学者理解Web应用服务器与数据库的交互方式具有很大帮助。 首先,C3P0是一个开源的JDBC连接池...
Tomcat 6.0 中通过 JNDI 连接 MySQL 实例需要进行详细的配置和设置。本文将对 Tomcat 6.0 中的 JNDI 连接 MySQL 实例进行详细的介绍和解释。 配置 JNDI 资源 在 Tomcat 6.0 中,需要在 `META-INF/context.xml` ...
在Tomcat中,JNDI常用于配置数据库连接池,使得多个Web应用可以共享同一个数据库连接。 配置JNDI的步骤如下: 1. **安装与配置MySQL**: 首先确保你已经安装了MySQL数据库,并创建了所需的数据库和用户。你需要...
总结,配置Tomcat 5.5及以上版本的JNDI数据源涉及多个步骤,包括添加JDBC驱动、配置全局数据源、在应用中引用数据源以及在代码中通过JNDI查找并使用数据源。选择全局或局部配置取决于应用的需求和资源的共享范围。...
总结,配置Tomcat中的JNDI主要是为了方便和高效地管理数据库连接,通过在服务器端定义数据源,并在应用程序中通过JNDI查找和使用,可以极大地简化开发工作。理解并掌握这一过程对于任何使用Tomcat部署Java Web应用的...
为了在Hibernate配置中使用JNDI DataSource,需要在`hibernate.cfg.xml`文件中指定相关设置: ```xml <!-- 其他配置 --> <property name="connection.provider_class">org.hibernate.connection.C3P0...
在Tomcat 6这样的Servlet容器中配置JNDI,可以让应用程序更加模块化,易于管理和维护。本文将详细介绍在Tomcat 6下配置JNDI连接池的步骤。 首先,我们需要创建一个Web项目。在这个例子中,我们将项目命名为`...
在提供的`test-jndi`压缩包文件中,可能包含了用于演示或练习这个配置过程的示例代码和配置文件。通过研究这些文件,你可以更深入地理解和实践上述步骤。记住,实践是检验理论的最好方式,动手操作才能真正掌握这个...
本文档将详细介绍如何在Tomcat服务器中配置和使用JNDI,特别关注如何通过JNDI连接MySQL数据库,并提供一个示例应用程序DBTest。 ##### 准备工作 首先,确保已经安装了Tomcat 4.0版本,并且MySQL数据库也已安装并...
本实例是一个关于如何在Tomcat 6.0中配置和使用JNDI数据源的经典示例,包含了所需的JAR包、配置文件和SQL脚本。 首先,我们来看配置JNDI数据源的步骤。在Tomcat的`conf/server.xml`文件中,你需要添加一个新的`...
在本节中,我们将详细介绍如何在Tomcat中配置JNDI数据源,并演示一个简单的示例。 ##### 2.1 配置Tomcat服务器 首先,在Tomcat中配置JNDI数据源需要创建一个`Resource`元素在特定的`Context`配置文件中。具体步骤...
6. **部署文档**:提供的部署文档可能包含如何在Tomcat中配置JNDI资源的详细步骤,包括修改`server.xml`、`context.xml`等配置文件,以及如何在Java代码中通过JNDI查找这些资源。 7. **示例代码**:在压缩包中可能...
**标题:“JNDI示例整合SSH”** 在IT领域,`JNDI`(Java Naming and Directory Interface)是Java平台提供的一种标准接口,用于访问命名和目录服务。它允许应用程序查找和操作不同类型的网络资源,如数据源、EJB等...
【标题】中的知识点: 1. **DBCP连接池**:DBCP(Jakarta Commons...尽管Hibernate官方并不推荐使用DBCP,但文档仍然提供了详细的配置步骤,包括环境准备、数据库和表的创建,以及在Tomcat的XML配置文件中设置数据源。
- 示例配置如下所示: ```xml name="jdbc/book" type="javax.sql.DataSource" password="" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="5" maxWait="5000" username=...
JNDI配置数据源是将数据库连接池集成到Tomcat中的重要步骤,这样可以提高应用的性能和可维护性。下面我们将详细介绍如何在Tomcat中通过JNDI配置数据源。 首先,我们需要了解数据源是什么。数据源是一个对象,它管理...
本示例主要关注如何在Apache Tomcat服务器中配置数据源连接池,以提高数据库访问的效率和稳定性。Tomcat作为一个流行的Java Servlet容器,支持多种数据源连接池实现,如Apache Commons DBCP、C3P0、HikariCP等。在这...
6. **JNDI与EJB**:在Tomcat中,尽管不直接支持完整的Enterprise JavaBeans (EJB) 规范,但可以利用JNDI来查找和调用简单的无状态会话Bean,这些Bean可以通过其他方式部署在支持EJB的服务器上。 7. **源码分析**:...