- 浏览: 890232 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
在tomcat服务器中,我们可以通过配置文件%CATALINA_HOME%/conf/server.xml来对所用到的资源进行配置,如代码:
Xml代码
<GlobalNamingResources> <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/wroxTC6" auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="30" maxWait="10000" username="root" password="1234" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?autoReconnect=true" /> </GlobalNamingResources> <GlobalNamingResources> <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/wroxTC6" auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="30" maxWait="10000" username="root" password="1234" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?autoReconnect=true" /> </GlobalNamingResources>
在这段配置中,指定了两个资源,一个是UserDatabase,另一个是jdbc/wroxTC6。本文主要讲述了,在tomcat是怎样通过JNDI来找到这些资源的。
1.JNDI基础和Tomcat中的JNDI
JNDI的全称是Java Naming and Directory Interface, JNDI的整体架构包含有JNDI API和JNDI SPI。利用前者可以访问各种Naming Services和Directory Services。
Service Providers利用JNDI SPI来编写这些服务。因此这些服务可以被Java应用灵活的插拔。
在JNDI中,用名字来标识一个服务对象,name和object之间建立的关联称为一个binding,binding的集合称作context。
javax.naming.Context是Naming Services所在的上下文接口;javax.naming.directory.DirContext是Directory Services所在的上下文接口。
在tomcat中类NamingContext实现了接口Context,在该类中保存有多个binding,每一个binding是一个 NamingEntry实例。对于NamingEntry分为4种类型:ENTRY、LINK_REF、REFERENCE和CONTEXT。
在tomcat中的配置文件service.xml中,可以为tomcat服务器配置全局的Naming Resource,也可以单独为某一个web应用配置局部的Naming Resource。
2.寻找被绑定的资源
在tomcat启动时,采用了责任链模式来进行。在启动StandardServer时,调用与之相关的监听器。在监听器NamingContextListener中,对全局的Naming Resources建立Context,绑定资源,查找资源等等。在启动StandardContext时,监听器NamingContextListener负责完成对局部Naming Resources相关操作。本文讲述对全局的Naming Resources的处理。
(1)首先是建立NamingContext类的实例:根Context(名字为:"/")。
(2)将资源对象从NamingResources中取出,形成Reference,绑定到根Context中。
因为在加载配置文件时,利用tomcat中的Digester,已经将配置文件形成了类NamingResources的实例,也就是配置文件的信息已经形成了相应的NamingResources对象。从NamingResources实例中取出资源,建立ResourceRef实例。
ResourceRef继承了java.naming.Reference,该类并不是具体的Resource,也不做为binding中的object 加入到Context中。但是通过该对象,可以找到待绑定的Service,例如在UserDatabase所形成的ResourceRef实例中,指定的Reference的className是org.apache.catalina.UserDatabase;而配置文件的factory属性对应于一个StringRefAddr对象,加入到了Reference中。
将该Reference对象,形成REFERENCE类型的NamingEntry对象,并以资源的name属性为名称,加入根Context中。例如:以UserDatabase为名称,将该Resource对应的REFERENCE类型的NamingEntry对象,加入到了根Context中。
(3)从根Context查找资源,利用Reference找到资源。
当利用资源名称查找资源时,调用的是NamingContext.lookup方法。该方法中利用JNDI的方法NamingManager.getObjectInstance来调用Service Provider所提供的Service。
在方法NamingManager.getObjectInstance中,若传递的Reference不为空,则调用Reference的getFactoryClassName来获得具体的factory类(该factory类由Service Provider来实现,所以能够找到具体的资源。在Tomcat中,ResourceRef覆盖了getFactoryClassName方法,得到的是ResourceFactory实例)
调用ResourceFactory.getObjectInstance方法,从Reference的RefAddr中得到org.apache.catalina.users.MemoryUserDatabaseFactory实例,通过MemoryUserDatabaseFactory.getObjectInstance得到具体的资源MemoryUserDatabase对象。
(4)将真实的对象赋给NamingEntry的object属性,更改NamingEntry的类型为ENTRY。
此时根Context中存在有对真实的资源的绑定,名称为该资源的名称。
3.建立子Context
如果资源的名称中包含"/",则将REFERENCE类型的NamingEntry对象加入到Context前,要建立子Context。例如资源"jdbc/wroxTC6",需要建立子Context。
(1)建立子Context
建立子Context,并将该Context以CONTEXT类型的NamingEntry加入到根Context中。
(2)将资源对象从NamingResources中取出,形成Reference,绑定到子Context中。
在调用根Context对象的bind方法时,将资源的绑定委派到子Context中,将Reference绑定到子Context中。例如将资源"wroxTC6"绑定到以"jdbc"为名字的子Context中。
(3)查找资源,绑定真实的资源到子Context中。
在进行资源查找和找真实资源时,原理同2,只不过是首先找到子Context,然后再进行。
发表评论
-
JVM的内存优化
2012-06-21 12:37 1314自:http://hi.baidu.com/walte ... -
JVM最大分配内存
2012-06-21 12:27 1121分析了当前比较流行的几个不同公司不同版本JVM的最大内存,得出 ... -
查看jvm最大内存
2012-06-21 12:22 1492查看jvm最大内存 java -Xmx1500M -vers ... -
Tomcat内存设置 .
2012-06-15 23:03 1042Tomcat 内存配置 2009年08月11日 17:05 ... -
如何指定tomcat中session过期时间
2012-06-06 11:33 831如何指定tomcat中session过期时间 1. 在se ... -
负载均衡环境中和如何设置Expires和Etag .
2012-06-12 09:56 1538在负载均衡环境中(LVS, LoadBalance)为了减少浏 ... -
轻松实现Apache,Tomcat集群和负载均衡
2012-06-05 23:24 1054作者:罗代均 ldj_work#126.com,转载请保持完整 ... -
tomcat最多能支持多少用户
2012-06-05 23:20 2758Tomcat里用线城池来控制并发用户的个数。 初始化为150个 ... -
tomcat开启Gzip
2011-04-08 23:52 1265现在来说一下如何在TOM猫中一步到位(要求TOM猫5.0以后版 ... -
tomcat的虚拟站点问题
2011-03-02 14:50 1373<Host name="localhost&q ... -
Tomcat里 appBase和docBase的区别
2011-03-02 14:47 1263<host appBase="d:/aaa&q ... -
Apache+Tomcat负载均衡和集群的尝试
2011-03-02 14:44 11331 各软件版本 Apache 2.2.4 因为jd_mod 用 ... -
tomcat和apache整合
2011-03-02 14:42 993为什么要整合了.其实很简单.原因就是: tomcat在静态 ... -
将Tomcat解压缩版变成服务形式运行,并修改Tomcat的启动内存参数
2011-03-02 14:41 1329许多朋友为了调试方便,下载使用的Tomcat是.zip的解压缩 ... -
Tomcat5.5.x配置整理 - 在重新启动Tomcat的webapp的时候,禁止把session写入文件
2011-03-02 14:39 987修改conf/web.xml 取消注释: <!--- ... -
java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-03-02 14:38 8391、PermGen space的全称是Permanent Ge ... -
Tomcat 同时侦听多端口,多应用
2011-03-02 14:37 1072当你使用Tomcat作为Web Server的时候,是不是会想 ... -
Tomcat5.5.x配置整理 - 配置日志
2011-03-02 14:33 1020在D:\jakarta-tomcat-5.5.8\comm ... -
Tomcat5.5.x配置整理 - 增强SessiionID的生成算法和长度
2011-03-02 14:32 929查看复制到剪切板打印 <Manage ... -
Tomcat5.5.x配置整理 - 发布webapp到网站根目录
2011-03-02 14:31 11071。直接复制到ROOT目录下。 2.因为无法创建无名字的xml ...
相关推荐
通过仔细分析上述步骤,你应该能够解决Tomcat6配置JNDI时遇到的问题。如果你仍然遇到困难,可以参考提供的博文链接或寻求社区支持。记住,持续学习和实践是解决IT问题的关键。在理解JNDI和Tomcat的工作原理后,你...
Apache Tomcat源码分析 Apache Tomcat是一款广泛应用的开源Java Servlet容器,它是Java EE Web应用程序的标准实现。Tomcat源码的深入理解对于Java Web开发者来说是至关重要的,它可以帮助我们了解HTTP服务器的工作...
《深入理解Tomcat源码与依赖包》 Tomcat,作为Apache软件基金会的顶级项目,是广泛应用的开源Java Servlet容器,它实现了Java EE中的Servlet和JavaServer Pages(JSP)规范。本文将深入探讨Tomcat的源码以及相关...
二、Tomcat源码分析 1. **启动流程**:从`bin/catalina.sh`或`bin/catalina.bat`开始,通过`org.apache.catalina.startup.Bootstrap`启动Catalina,加载配置文件,初始化服务器,最后启动主循环监听端口。 2. **...
通过阅读"TOMCAT源码分析.doc"和解压后的"apache-tomcat-6.0.0-src.zip",你可以深入了解上述知识点,并学习如何根据源码进行调试、优化或扩展Tomcat。这份资料对于Java Web开发者来说是一份宝贵的参考资料,有助于...
【标题】:“Tomcat 7 源码分析 - 4 server初始化背后getServer().init()” 在这篇文章中,我们将深入探讨Apache Tomcat 7服务器的内部工作机制,重点关注`getServer().init()`方法在服务器初始化过程中的作用。...
这两个标签暗示了这篇资料可能涵盖了Tomcat JNDI的源码分析以及可能涉及的工具使用,例如,如何通过查看Tomcat的源代码理解JNDI的工作原理,或者介绍用于管理JNDI资源的实用工具。 【压缩包子文件的文件名称列表】...
通过研究Tomcat源码,开发者可以学习到如何构建一个高性能的Servlet容器,掌握Java Web应用的核心运行机制,这对于提升Java EE开发能力大有裨益。同时,如果你遇到Tomcat的使用问题或者想要进行定制化开发,源码分析...
在深入探讨Tomcat源码之前,我们先了解一下Tomcat是什么。Tomcat是一款开源的Java Servlet容器,由Apache软件基金会开发,它实现了Java EE中的Web应用服务器部分,特别是Servlet和JavaServer Pages (JSP)规范。《How...
Tomcat源码的实践分析有助于开发者理解Web服务器的工作机制,这对于面试中解答关于性能优化、故障排查以及系统设计的问题至关重要。 【标签】"2020面试 java说明Tomcat源码手写"强调了这个压缩包与Java开发者的面试...
4. **源码分析**: - 源码可以帮助开发者深入理解Tomcat的工作原理,比如请求处理流程、会话管理、错误处理等。 - 关注`org.apache.catalina`和`org.apache.coyote`包下的类,了解请求和响应的生命周期。 - 学习`...
在源码分析过程中,有几点是值得特别关注的: - **容器架构**:Tomcat采用容器模型,每个Web应用都有一个独立的Context,每个Context又包含多个Host,每个Host可以包含多个Virtual Server。这种层次化的结构使得...
源码分析: 1. **目录结构**: Tomcat的源码结构清晰,主要包括以下几个关键部分: - `bin`:包含启动和管理Tomcat的脚本。 - `conf`:配置文件存放地,如server.xml,web.xml等。 - `lib`:Tomcat运行所需的...
源码分析: 1. **目录结构**:解压后的源码文件夹通常包含`bin`、`conf`、`lib`、`logs`、`webapps`、`work`等目录。`bin`存放启动和停止服务器的脚本,`conf`存储配置文件,`lib`包含运行Tomcat所需的JAR文件,`...
源码分析是理解其工作原理和提升开发技能的重要途径。Apache Tomcat 7.0.33的源码提供了丰富的学习材料,让我们一起探索其中的关键知识点。 1. **架构设计** Tomcat采用模块化设计,主要由Catalina、Jasper、Juli...
在深入理解Apache Tomcat源码之前,我们首先需要对Java Web开发的基础知识有所了解。 1. **Java Servlet**: Servlet是Java编写的应用程序,它运行在服务器端,处理客户端的HTTP请求,并返回响应。Servlet API定义了...
Tomcat源码主要由以下几个关键组件构成: 1. **Catalina**:这是Tomcat的核心组件,负责处理Servlet容器的主要功能,包括Servlet和JSP的加载、调度和执行。Catalina的核心类是`org.apache.catalina.core....
通过阅读和分析Tomcat源码,开发者可以学习到如何实现一个高性能的Web服务器,如何处理并发请求,以及如何遵循Java EE规范来编写可部署的Web应用程序。此外,对于遇到的问题,查看源码往往能帮助找到解决方案,提高...
【标题】:Tomcat源码分析 【描述】:Tomcat是Apache软件基金会下的一个开源项目,是一款广泛使用的Java Servlet容器,它实现了Java EE的Web应用服务器标准。深入理解Tomcat的源码对于提升Java Web开发技能、优化...