`
gearever
  • 浏览: 149557 次
社区版块
存档分类
最新评论

tomcat架构分析 (JNDI配置)

阅读更多
出处: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时还是不一样的。
分享到:
评论

相关推荐

    Tomcat架构解析文档.zip

    【Java面试必备】Tomcat架构解析 Tomcat作为一款开源的、基于Java的Web应用服务器,是许多初学者和开发者入门Java Web应用的首选。它轻量级、高效且易于管理,广泛应用于小型到中型企业级应用。在面试中,对Tomcat...

    tomcat 架构分析(概览)

    以下是关于Tomcat架构的详细分析。 首先,核心架构模块是Tomcat的基础,包括Server、Service、Engine、Host和Context以及Wrapper等。Server作为最顶层的组件,包含了多个Service。Service是Tomcat对外提供服务的...

    tomcat架构解析 【刘光瑞PDF高清】.rar

    在《Tomcat架构解析》一书中,刘光瑞详细讲解了这些组件的工作原理和配置方法,同时也涵盖了Tomcat的优化、集群、故障排查等方面的知识。对于开发者来说,理解这些内容有助于提升对Tomcat的掌控能力,从而更好地设计...

    tomcat架构原理剖析

    深入理解Tomcat的架构原理对于任何Java开发者来说都是至关重要的,特别是对于系统管理员、性能优化师以及希望提升应用程序性能的开发人员。 Tomcat的架构基于模块化设计,主要由以下几个核心组件构成: 1. **...

    tomcat架构解析_刘光瑞(著) 人民邮电出版社_ 2017-05-01.7z

    总的来说,《Tomcat架构解析》涵盖了从基础概念到高级特性的全面内容,包括配置、优化、安全和故障排查等方面,是学习和掌握Tomcat服务器的必备参考资料。通过阅读这本书,读者可以深入了解Tomcat的工作方式,从而更...

    jndi连接数据库配置方法

    在Java应用服务器如Tomcat、WebLogic、JBoss等中,你需要先配置一个JNDI数据源。这通常在服务器的配置文件中完成,比如在Tomcat中,数据源配置在`$CATALINA_HOME/conf/server.xml`的`&lt;Context&gt;`元素内。你需要指定...

    tomcat配置大全 tomcat配置大全

    - `server.xml`是Tomcat的主要配置文件,包含了端口设置(如HTTP默认为8080,AJP为8009),连接器配置,全局JNDI资源,Context定义等。 - `context.xml`用于定义特定应用的上下文配置,如数据源、 Realm(身份验证...

    spring 配置jndi

    - 为了测试JNDI配置是否正确,你可以尝试从Spring应用上下文中获取数据源并打印其信息,确保能成功查找并实例化。 6. **扩展性与最佳实践**: - 考虑使用Spring Boot,它提供了更简洁的方式来配置JNDI数据源,只...

    架构解析——Tomcat

    总的来说,《架构解析——Tomcat》是一本深入了解Tomcat工作原理、配置和优化的实用书籍,对于Java Web开发人员、系统管理员以及对Web服务器技术感兴趣的人来说,具有很高的学习价值。通过深入学习,读者不仅可以...

    Tomcat负载均衡集群配置

    【标题】:“Tomcat负载均衡集群配置” 在Java Web应用开发中,Tomcat是一个广泛使用的开源Servlet容器。当面临高并发访问或者需要...总的来说,理解和掌握这些配置方法,将有助于你构建更稳定、高效的Web服务架构。

    配置tomcat数据源

    【压缩包子文件的文件名称列表】"tomcat_jndi"可能包含的是与Tomcat JNDI配置相关的示例代码、配置模板或者解释文档,帮助读者更深入地理解和实践配置过程。 总结起来,配置Tomcat数据源是一个关键的步骤,它确保了...

    tomcat源码+文档pdf+源码解析

    这些文档通常包含Tomcat的安装指南、配置手册、API参考和开发者指南,帮助初学者快速上手,并为有经验的开发者提供深入的技术细节。例如,它们可能会详细解释如何配置server.xml文件以定制Tomcat的行为,或者如何...

    java JNDI总结

    在进行Java开发时,经常会遇到关于JNDI配置的相关问题。下面将详细介绍JNDI的基本概念、配置方法以及如何在实际开发中应用它来管理数据库连接等资源。 ##### 1. JNDI的基本概念 JNDI是一种用于访问命名和目录服务...

    tomcat 工作原理

    一、Tomcat架构概述 Tomcat基于Servlet和JavaServer Pages(JSP)标准,其架构主要由以下几个组件构成: 1. **Catalina**:这是Tomcat的核心,负责处理Servlet规范中的请求和响应。Catalina提供了Servlet容器,...

    tomcat源码基于6.0

    一、Tomcat架构概述 Tomcat的核心架构主要由以下几个部分组成: 1. **Catalina**:Catalina是Tomcat的主要Servlet容器,负责处理Servlet和JSP的生命周期管理。它实现了Servlet和ServletContext接口,是Tomcat的...

    apache-tomcat-9.0.82-windows-x64.zip

    1. **Tomcat架构**:Tomcat由几个主要组件构成,包括Catalina(Servlet容器)、 Coyote(HTTP/1.1协议处理器)、Jasper(JSP编译器)等。这些组件协同工作,处理请求并返回响应。 2. **配置文件**:`build.xml`是...

    how tomcat works 中文版及源码

    通过阅读《How Tomcat Works》中文版和分析源码,开发者不仅可以了解到Tomcat的基本架构,还能深入到细节,理解其在处理请求、管理会话、加载资源等方面的具体实现。这对于优化Web应用性能、调试问题、扩展Tomcat...

    Redis实现Nginx+Tomcat在windows平台上配置负载均衡的session共享(2)

    6. **Tomcat配置**:在Tomcat的web.xml文件中,配置`&lt;manager&gt;`元素,指定session的存储机制为JNDI,然后设置JNDI的URL指向Redis服务器。 7. **Redis配置**:配置Redis客户端库(如Jedis),使Tomcat能够与Redis...

    apache-tomcat-9-已配置.rar

    这种架构被称为"前端代理"或"反向代理"配置,Apache通过mod_proxy模块将动态请求转发给Tomcat处理,返回结果后再由Apache发送给客户端。这样可以充分利用Apache的性能处理静态内容,并减轻Tomcat的压力,专注于Java...

    how tomcat works( 深入剖析tomcat) 的随书源码

    3. **Tomcat架构** Tomcat的架构主要包括几个关键组件:Catalina(核心Servlet容器)、 Coyote(HTTP/HTTPS连接器)、Jasper(JSP编译器)、Apr(Apache Portable Runtime,提供高性能的网络功能)等。这些组件协同...

Global site tag (gtag.js) - Google Analytics