出处:http://gearever.iteye.com
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
---百度百科
通俗点说,JNDI封装了一个简单name到实体对象的mapping,通过字符串可以方便的得到想要的对象资源。通常这种对象资源有很多种,例如数据库JDBC,JMS,EJB等。平时用的最多的就是数据库了。在tomcat中,这些资源都是以java:comp/env开头的字符串来绑定的。以数据库连接为例,我们在app中的调用场景是;
//获得对数据源的引用:
Context ctx = new InitalContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDB");
//获得数据库连接对象:
Connection conn = ds.getConnection();
//返回数据库连接到连接池:
conn.close();
因为经常看到有人问怎么在tomcat中配置数据库连接池等问题,这篇文章就对tomcat中的JNDI的配置做一个小结,不涉及tomcat代码方面。
tomcat架构分析 (JNDI体系绑定)从代码原理角度专门说明这些配置是如何生效,及app中调用JNDI API获取对象,其底层如何实现的。
Tomcat内部有一堆类型的resource配置。这些类型的resource的配置大体上可分为两个层次来进行,这两个层次是并列的关系,分别针对不同的开发部署方案设定的。
第一种方案
这种方案主要是对于快速部署而言,其核心是tomcat本身有一个global的resource池,新部署的app只引用其中已有的resouce,而不是创建新的resource。
先看看<tomcat>/conf/server.xml
<Server port="8005">
<GlobalNamingResources>
<Resource
name="jdbc/mysql"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="200"
maxWait="5000"
url="……"
maxActive="100"/>
</GlobalNamingResources>
……
</Server>
这是一个全局的配置,这时如果每个具体的context(webapp)中如果要引用这个resource,则需要在各个context对象中配置 resourcelink,然后在各个app的web.xml中配置<resource-ref>.
<tomcat>/conf/server.xml
<Server port="8005">
<Service>
<Engine>
<Host>
<Context>
< ResourceLink globalname=" jdbc/mysql " name="myDB" type="…"/>
</Context>
</Host>
</Engine>
</Service>
……
</Server>
或者在每个app的Context.xml中配置
<Context>
< ResourceLink globalname=" jdbc/mysql " name="myDB" type="…"/>
</Context>
然后在app的WEB-INF/web.xml中配置
<web-app>
<resource-ref>
<description/>
<res-auth/>
<res-ref-name>myDB</res-ref-name>
<res-sharing-scope/>
<res-type/>
</resource-ref>
</web-app>
代码中这么调用
//获得对数据源的引用:
Context ctx = new InitalContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/myDB");
//获得数据库连接对象:
Connection conn = ds.getConnection();
//返回数据库连接到连接池:
conn.close();
由此可见,context中配置的ResourceLink属于一个中转的作用,这主要是为了在tomcat启动状态下,如果新部署一个app,可以在app中指定到相应的全局的resource。
它们的mapping关系是;
Tomcat这种资源不限于数据库连接,还有很多例如EJB,Web Service等,在配置中它们分别对应不同的节点。例如上面的数据库连接,在server.xml中对应<Resource>,在web.xml中对应的是<resource-ref>,EJB连接在server.xml中对应<Ejb>,在web.xml中对应的是<ejb-ref>等,因为有些资源在现在的开发中应用的不是很多,就不一一例举了,总结一下它们所有的对应关系;
第二种方案
没有上述方案那么麻烦,主要是为了需要引用一个自己独有的资源对象的app而言。
<tomcat>/conf/server.xml
<Server port="8005">
<Service>
<Engine>
<Host>
<Context>
<Resource
name="jdbc/mysql"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="200"
maxWait="5000"
url="……"
maxActive="100"/>
</Context>
</Host>
</Engine>
</Service>
……
</Server>
或者在每个app的Context.xml中配置
<Context>
<Resource
name="jdbc/mysql"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="200"
maxWait="5000"
url="……"
maxActive="100"/>
</Context>
这种方式,不需要在app的WEB-INF/web.xml中再设定resource-ref了,直接在程序中就可lookup到相应的对象。
代码中这么调用
//获得对数据源的引用:
Context ctx = new InitalContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
//获得数据库连接对象:
Connection conn = ds.getConnection();
//返回数据库连接到连接池:
conn.close();
比较一下,两种方式的配置,调用java:comp/env的name时还是不一样的。
分享到:
相关推荐
【Java面试必备】Tomcat架构解析 Tomcat作为一款开源的、基于Java的Web应用服务器,是许多初学者和开发者入门Java Web应用的首选。它轻量级、高效且易于管理,广泛应用于小型到中型企业级应用。在面试中,对Tomcat...
以下是关于Tomcat架构的详细分析。 首先,核心架构模块是Tomcat的基础,包括Server、Service、Engine、Host和Context以及Wrapper等。Server作为最顶层的组件,包含了多个Service。Service是Tomcat对外提供服务的...
在《Tomcat架构解析》一书中,刘光瑞详细讲解了这些组件的工作原理和配置方法,同时也涵盖了Tomcat的优化、集群、故障排查等方面的知识。对于开发者来说,理解这些内容有助于提升对Tomcat的掌控能力,从而更好地设计...
深入理解Tomcat的架构原理对于任何Java开发者来说都是至关重要的,特别是对于系统管理员、性能优化师以及希望提升应用程序性能的开发人员。 Tomcat的架构基于模块化设计,主要由以下几个核心组件构成: 1. **...
总的来说,《Tomcat架构解析》涵盖了从基础概念到高级特性的全面内容,包括配置、优化、安全和故障排查等方面,是学习和掌握Tomcat服务器的必备参考资料。通过阅读这本书,读者可以深入了解Tomcat的工作方式,从而更...
在Java应用服务器如Tomcat、WebLogic、JBoss等中,你需要先配置一个JNDI数据源。这通常在服务器的配置文件中完成,比如在Tomcat中,数据源配置在`$CATALINA_HOME/conf/server.xml`的`<Context>`元素内。你需要指定...
- `server.xml`是Tomcat的主要配置文件,包含了端口设置(如HTTP默认为8080,AJP为8009),连接器配置,全局JNDI资源,Context定义等。 - `context.xml`用于定义特定应用的上下文配置,如数据源、 Realm(身份验证...
- 为了测试JNDI配置是否正确,你可以尝试从Spring应用上下文中获取数据源并打印其信息,确保能成功查找并实例化。 6. **扩展性与最佳实践**: - 考虑使用Spring Boot,它提供了更简洁的方式来配置JNDI数据源,只...
总的来说,《架构解析——Tomcat》是一本深入了解Tomcat工作原理、配置和优化的实用书籍,对于Java Web开发人员、系统管理员以及对Web服务器技术感兴趣的人来说,具有很高的学习价值。通过深入学习,读者不仅可以...
【标题】:“Tomcat负载均衡集群配置” 在Java Web应用开发中,Tomcat是一个广泛使用的开源Servlet容器。当面临高并发访问或者需要...总的来说,理解和掌握这些配置方法,将有助于你构建更稳定、高效的Web服务架构。
这些文档通常包含Tomcat的安装指南、配置手册、API参考和开发者指南,帮助初学者快速上手,并为有经验的开发者提供深入的技术细节。例如,它们可能会详细解释如何配置server.xml文件以定制Tomcat的行为,或者如何...
【压缩包子文件的文件名称列表】"tomcat_jndi"可能包含的是与Tomcat JNDI配置相关的示例代码、配置模板或者解释文档,帮助读者更深入地理解和实践配置过程。 总结起来,配置Tomcat数据源是一个关键的步骤,它确保了...
在进行Java开发时,经常会遇到关于JNDI配置的相关问题。下面将详细介绍JNDI的基本概念、配置方法以及如何在实际开发中应用它来管理数据库连接等资源。 ##### 1. JNDI的基本概念 JNDI是一种用于访问命名和目录服务...
一、Tomcat架构概述 Tomcat基于Servlet和JavaServer Pages(JSP)标准,其架构主要由以下几个组件构成: 1. **Catalina**:这是Tomcat的核心,负责处理Servlet规范中的请求和响应。Catalina提供了Servlet容器,...
一、Tomcat架构概述 Tomcat的核心架构主要由以下几个部分组成: 1. **Catalina**:Catalina是Tomcat的主要Servlet容器,负责处理Servlet和JSP的生命周期管理。它实现了Servlet和ServletContext接口,是Tomcat的...
1. **Tomcat架构**:Tomcat由几个主要组件构成,包括Catalina(Servlet容器)、 Coyote(HTTP/1.1协议处理器)、Jasper(JSP编译器)等。这些组件协同工作,处理请求并返回响应。 2. **配置文件**:`build.xml`是...
通过阅读《How Tomcat Works》中文版和分析源码,开发者不仅可以了解到Tomcat的基本架构,还能深入到细节,理解其在处理请求、管理会话、加载资源等方面的具体实现。这对于优化Web应用性能、调试问题、扩展Tomcat...
6. **Tomcat配置**:在Tomcat的web.xml文件中,配置`<manager>`元素,指定session的存储机制为JNDI,然后设置JNDI的URL指向Redis服务器。 7. **Redis配置**:配置Redis客户端库(如Jedis),使Tomcat能够与Redis...
这种架构被称为"前端代理"或"反向代理"配置,Apache通过mod_proxy模块将动态请求转发给Tomcat处理,返回结果后再由Apache发送给客户端。这样可以充分利用Apache的性能处理静态内容,并减轻Tomcat的压力,专注于Java...
1. **Tomcat架构**:Tomcat由几个关键组件组成,如Catalina(Servlet容器), Coyote(HTTP/HTTPS连接器),Jasper(JSP编译器)等,它们协同工作以提供Web服务。 2. **角色与部署**:Tomcat支持Web应用的部署,...