Java
文章平均质量分 74
iteye_2159
这个作者很懒,什么都没留下…
展开
-
Tomcat7、Chrome下web socket的一个例子
先介绍一下背景吧:最近看javaEE7中可能发布的JSR规范,偶然看到JSR356,是关于web socket的,当时觉得奇怪,心说socket这几年又出了什么新东西出来了?早上了解了一下,原来也是HTML5里面的,Google工程师的这段话还是挺有吸引力的“数据的字节数急剧减少到2字节,延迟从150毫秒减少到50毫秒,实际上,这两个因素已经足以引起Google的兴趣了。通过在一个浏览器中模拟...2013-05-14 16:00:27 · 217 阅读 · 0 评论 -
Find a way out of the ClassLoader maze
Find a way out of the ClassLoader mazeSystem, current, context? Which ClassLoader should you use?By Vladimir Roubtsov, JavaWorld.com, 06/06/03June 6, 2003When should I useThread.getContextCl...原创 2013-10-12 16:53:22 · 130 阅读 · 0 评论 -
走出类加载器迷宫
这是前几天在看类加载器机制时搜到的一篇旧文,网上搜了搜相应的中文资料,感觉很多意思没有翻译出来,这两天我试着自己翻译了一下,供同道参考。英文文章地址:Find a way out of the ClassLoader maze 走出类加载器迷宫(本人翻译,转载请注明出处) 系统类加载器, 当前类加载器, 上下文类加载器? 你应该用哪一个?By Vladimir Rou...2013-10-16 13:16:28 · 139 阅读 · 0 评论 -
高性能服务器架构
最近忙于项目上线,源码分析的文章暂停一段时间,这里主要贴一些最近读到的比较好的文章,蓝色粗体的字是我个人所做的评论。 高性能服务器架构 引言本文将与你分享我多年来在服务器开发方面的一些经验。对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或者请求的服务程序,网络服务器更符合这种情况,但并非所有的网络程序都是严格意义上的服务器。使用“高性能请求处理程序”是一个很糟...原创 2013-10-29 17:43:05 · 112 阅读 · 0 评论 -
Ad-hoc线程封闭
最近重新在读《Java并发编程实战》这本书,早上看到线程封闭这一节,讲线程封闭的三种方式:Ad-hoc线程封闭、栈封闭、ThreadLocal封闭。后两种我能理解,第一种实在以前没接触过,不行,这事不了解个究竟不算完。 按照这本书的翻译“Ad-hoc线程封闭是指,维护线程封闭性的职责完全由程序实现来承担。Ad-hoc线程封闭是非常脆弱的,因为没有任何一种语言特性,例如可见性修饰符或局部...2013-11-18 14:33:00 · 1197 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用
简单说,强引用就是一般的引用,该类对象在JVM的运行过程中将会一直占用内存空间,即使GC也不会释放空间。软引用(SoftReference)是在GC时发现内存空间不足后将会释放占用的内存空间。弱引用(WeakReference)是在GC时直接释放内存空间。虚引用(PhantomReference)很奇怪的是其get方法永远返回null,提供这个概念可以更精细的控制对象的回收过程。(...2012-11-13 16:24:28 · 74 阅读 · 0 评论 -
Execute Around Method
“前人栽树,后人乘凉”,搞Java的,不知道模式,那这人绝对还未入流。但经常是写了这么多代码,看看才发现,原来前人早就总结过了,自己满头大汗的栽了棵树苗,蓦然回首,擦,远方已经有棵大树鸟。 就拿这个模式来说,名字挺吓人的,其实估计搞过Java(或者被搞)的大概都会用过,业务场景是,对于输入输出流,JDBC连接等资源,一般的处理方式是谁开启的就由谁负责关闭资源,其中必然涉及对于异常的处理...2012-11-13 17:05:53 · 145 阅读 · 0 评论 -
Tomcat7中NIO处理分析(二)
6.PollerEvent处理流程Poller处理的核心是启动执行事件队列中的PollerEvent,接着从selector中遍历已经就绪的key,一旦发生了感兴趣的事件,则交由processSocket方法处理。PollerEvent的作用是向socket注册或更新感兴趣的事件: /** * * PollerEvent, cacheable obje...2015-11-15 15:50:40 · 198 阅读 · 0 评论 -
mybatis的org.apache.ibatis.builder.IncompleteElementException问题
一上午被mybatis的这个问题搞得都没法工作,springboot启动一直报错:2016-02-19 12:47:45.380 [localhost-startStop-1] WARN o.a.c.loader.WebappClassLoaderBase - The web application [ROOT] appears to have started a thread name...2016-02-19 13:02:12 · 252 阅读 · 0 评论 -
spring事务异常回滚使用注意点
最近写了一个后台定时任务用于自动扣款,测试时还好好的,上线后第一次执行处理也没问题,到第二次执行时,发现并没有生成数据,一开始以为是Redis判断时出了问题,导致后面的方法没执行,但是查询线上的redis相关日期key的value,发现是正确的。 定时任务的方法代码如下: /** * 自动收款第一次 <br> * 每天15点触发 ...2016-03-07 20:27:56 · 637 阅读 · 0 评论 -
一个线上JVM的CPU资源占用过高问题的排查
上午线上某应用的一台JVM的CPU占比突然飙高到192%,并且一直下不来,导致监控一直告警,好久没处理这种问题了,现在将问题排查步骤总结记录一下。 1.通过top命令查看当前机器的CPU使用情况此时发现如果是Java的进程占用过高,并且一直下不来,则排查是什么线程导致占比过高。以图中进程举例,假如发现PID为31357的Java进程占CPU比一直很高,则记录下它的PID 2...2016-04-23 23:47:53 · 895 阅读 · 0 评论 -
Tomcat7中的JMX使用(一)Standard MBean
做过Java平台下的应用服务器监控的对JMX应该不会陌生,简单说,JMX就是提供了一个标准的管理方案的框架。这里所说的管理的含义包括监控平台运行状况、应用级别配置资源、收集应用统计数据、调试、监视服务器性能,JMX 允许你将所有的资源(硬件和软件)打包成java 对象,然后将他们暴露在分布式环境中,并且JMX 提供了一个机制,可以很简单的将既存的管理协议,如SNMP ,映射到JMX 自己的管理...2014-05-10 13:41:51 · 201 阅读 · 0 评论 -
Tomcat7中的JMX使用(二)Dynamic MBean
如上一篇文章所见Standard MBean在Tomcat的例子并不多,在jconsole中所看到的大量MBean(如Catalina下的Connector、Engine、Server、Service等),实际上是动态MBean(Dynamic MBean)。本文主要讲述Tomcat7中如何通过动态MBean的方式构造MBean的。 接触过动态MBean的朋友一定知道,它的实例肯...2014-05-12 08:48:23 · 237 阅读 · 0 评论 -
《大型网站系统与JAVA中间件开发实践》读后感
最近买的技术书比较多,一本还没看完又来一本,前端、后端都涉足一些,可惜都不深,这点需要改进,持续一段时间思考一个方面的问题这样的效果应该会好点。具体这本书已经忘了当时从哪儿看到的介绍,发现一堆业界名人的推荐,到豆瓣看了看目录和评论,当然三百来页也是个重要指标(估计一到两周也就看完了),于是就下单买了。这段时间Tomcat源码分析暂停,有些思路没理清,看着看着就看到别的框架上了,注意力不够集中,...2014-06-05 18:20:46 · 103 阅读 · 0 评论 -
jboss4.2中web service的wsconsume工具测试客户端调用问题
这两天自己练习jboss4.2GA里的web service例子,注解的形式发布web service挺简单,但每个类,都要写一个servlet在web.xml文件里维护起来不烦吗?坑爹的是最后写测试类调用web service时老是报如下错误:Exception in thread "main" javax.xml.ws.WebServiceException: Unable to ...2013-02-25 13:41:50 · 160 阅读 · 0 评论 -
EJB学习纪要
为什么会突然要看看EJB这个老古董?前段时间准备再看看Spring的东西,当然就免不了要看一下Spring作者那本导致Spring模型的大作。其中说到Spring是在批判EJB的背景下产生的。所以,就得看看EJB这玩意儿到底搞了什么东西,粗略浏览了下目录,哗!EJB2太复杂了,算了,先从后面简化过了的EJB3看起吧,完了再反过来看看2是个什么样子。这回答真够曲折的,都快忘了当初的想法了,...2013-04-03 15:32:33 · 93 阅读 · 0 评论 -
使用HttpClient做请求响应中转
现网中有个应用A,之前一直是请求透传访问的,最近从安全方面考虑将该A应用不直接暴露给客户端访问,而是从有一定安全校验机制的应用B做访问入口,由B的后端将HTTP请求中转到A,再将A的响应通过B输出到客户端。这种方案有两个好处,1.可以利用应用B已有的安全校验机制,而不需要应用A再复制一份安全校验。2.原来在客户端需要同时访问应用A和应用B,这就涉及到浏览器的同源策略的安全性问题,所以在配置上必...2016-08-29 15:11:15 · 1329 阅读 · 0 评论 -
推荐给毕业季跳槽季的Java码农们《关于Java集合的小抄》
午休时间看了江南白衣的最新博文《关于Java集合的小抄》,总结的还不错,正值毕业季、找工作季、跳槽季。。。蛮适合各位依然奋斗在背负无数骂名的Java码农一线的程序员参考 业务代码写久了算法类的东西就容易忘,很多源码当时看的时候茅塞顿开,三年后再面对(卧槽!who are u) ...2015-04-15 14:09:18 · 129 阅读 · 0 评论 -
Tomcat7自动加载类及检测文件变动原理
在一般的web应用开发里通常会使用开发工具(如Eclipse、IntelJ)集成tomcat,这样可以将web工程项目直接发布到tomcat中,然后一键启动。经常遇到的一种情况是直接修改一个类的源文件,此时开发工具会直接将编译后的class文件发布到tomcat的web工程里,但如果tomcat没有配置应用的自动加载功能的话,当前JVM中运行的class还是源文件修改之前编译好的class文件...2013-09-26 17:53:10 · 239 阅读 · 0 评论 -
Java远程通讯可选技术及原理
好文不该被埋没,之前转了一篇Java中各种通信协议性能数据比较的文章,被批评概念杂糅,术语使用不严谨。这里转一篇与其论域相似,讲的稍微系统点的文章,淘宝的毕玄大神几年前写的,文中我认为比较精彩的地方已用蓝色字体标识。因为此文是作者几年前的思考,某些术语较真起来有点问题,比如http其实是基于tcp之上的一层协议,把它与tcp、udp并立讨论有点奇怪。还有NIO的框架只介绍了mina,能介绍...原创 2013-09-23 14:36:28 · 133 阅读 · 0 评论 -
JAVA SE的版本历史与特性
一个比较流行的问题是,“Java下一个版本会有什么特性呢?” 。这是否是个好问题却有待商榷。在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在哪个发行版中引入的。除了列出的特性外,每个发行版还做了很多优化和修复BUG的工作。Java Version SE 7开发代号是Dolphin(海豚),于2011-07-28发行。引...原创 2013-05-20 15:34:43 · 300 阅读 · 0 评论 -
Tomcat7.0.42源代码运行环境搭建
以前看过Tomcat5的一部分源代码,当时只看了个大概的启动分析,后来看了《How Tomcat Works》这本书,讲的还行,出版的较早,所以是基于Tomcat4的代码的分析,Tomcat已经release到7了,很多后来添加的特性与新的实现方式那本书里面没有涉及。下半年业余时间的主要任务就是完成Tomcat7各个我感兴趣的点的系列文章。 先说下我的源码分析的环境搭建吧,用的是ecl...2013-07-11 13:13:05 · 187 阅读 · 0 评论 -
Tomcat7源码研究计划
Tomcat是个很大的项目,写个程序统计了一下java目录下的源文件1262个,总代码行数356163,要把这么多文件逐个研究一番确实需要很大的勇气。我的思路是挑选一些自己以前工作中会接触到的和个人比较感兴趣的点来研究,这样梳理起来算有点头绪,初步给自己的任务列出的是以下几点: 1.容器启动,从server到listener、jndi、service到connetor、engine到h...2013-07-12 15:57:11 · 158 阅读 · 0 评论 -
Tomcat7启动分析(一)启动脚本
在之前的环境搭建那篇文章里是通过直接运行BootStarp的main函数来启动的,只是加了一个catalina.home的系统属性。而正常情况下启动Tomcat是通过运行脚本的方式,这个就涉及到建立工程时拷贝过来的script目录下的一堆脚本文件了。以我的windows系统举例,实际上最终是执行startup.bat这个批处理文件来启动tomcat的。那么启动分析就冲这个文件开始吧:...2013-07-17 13:07:13 · 238 阅读 · 0 评论 -
Tomcat7启动分析(二)Bootstrap类中的main方法
之前分析了Tomcat的启动脚本,如果从startup.bat开始启动Tomcat的话会发现最后会调用org.apache.catalina.startup.Bootstrap里的main方法,并且传过来的最后一个命令行参数是start,接下来的启动代码分析就从这里开始。 先看下这个main方法的代码:/** * Main method and entry point ...2013-07-23 11:54:30 · 170 阅读 · 0 评论 -
Tomcat7启动分析(三)Digester的使用
前一篇文章里最后看到Bootstrap的main方法最后会调用org.apache.catalina.startup.Catalina对象的load和start两个方法,那么就来看看这两个方法里面到底做了些什么。 load方法: /** * Start a new server instance. */ public void load() ...2013-07-23 17:02:41 · 193 阅读 · 0 评论 -
Tomcat7启动分析(四)各组件init、start方法调用
在正常启动Tomcat7的情况下,上篇文章分析到了执行org.apache.catalina.core.StandardServer的init和start方法这儿,那么就来看看这两个方法里面到底干了些什么。但是在StandardServer类里面并没有发现这两个方法:由此推知这两方法必定是在该类的父类中已实现了,在StandardServer类的父类LifecycleMBeanBase...2013-08-05 17:38:28 · 306 阅读 · 0 评论 -
Tomcat7启动分析(五)Lifecycle机制和实现原理
在上篇文章分析Tomcat7的各组件的init、start方法时经常会看到有一个setStateInternal方法的调用,在查看LifecycleBase类及其它各组件的源码时会在多处看到这个方法的调用,这篇文章就来说说这方法,以及与这个方法相关的Tomcat的Lifecycle机制和实现原理。 上篇文章里谈到Tomcat7的各组件的父类LifecycleBase类,该类实现了接口o...2013-08-06 14:02:49 · 423 阅读 · 0 评论 -
也谈Spring,为何用它?
一个老生常谈的话题,最近出去面试,十之八九还会问这个,今天在博客园里有人说Spring的问题,忍不住点进去看了看,感觉没说出个所以然,所以写篇小文谈谈我的看法。 Spring的由来在其作者Rod Johnson的两本名著(《Expert One-on-One J2EE Development without EJB》和《Expert One-on-One J2EE Design and...2013-08-16 18:53:18 · 84 阅读 · 0 评论 -
Tomcat7服务器关闭原理
之前的几篇文章讲了Tomcat的启动过程,在默认的配置下启动完之后会看到后台实际上总共有6个线程在运行。即1个用户线程,剩下5个为守护线程(下图中的Daemon Thread)。如果你对什么叫守护线程的概念比较陌生,这里再重复一下:所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程。这种线程并不属于程序中不可或缺的部分,当所有的非守护线程结束时,程序也就终...2013-08-16 21:52:49 · 259 阅读 · 0 评论 -
Tomcat7中一次请求处理的前世今生(一)处理线程的产生
在默认的配置下Tomcat启动好之后会看到后台上总共有6个线程在运行。其中1个用户线程,剩下5个为守护线程(如下图所示)。如果你对用户线程、守护线程等概念不熟悉,请参看前一篇文章——Tomcat7服务器关闭原理。这里重点关注以http-bio-8080开头的两个守护线程(即http-bio-8080-Acceptor-0和http-bio-8080-AsyncTimeout),因为这是...2013-08-20 16:33:06 · 157 阅读 · 0 评论 -
Tomcat7中一次请求处理的前世今生(二)Socket连接转换成内部请求对象
先抛开之前所看到的Tomcat源码不谈,Tomcat作为一个用Java实现的Web服务器,如果让你来实现,那么从何入手?这里首先需要厘清的是Web服务器的概念,谷歌了一下,发现这条解释还算靠谱点,【在网络环境下可以向发出请求的浏览器提供文档的程序】。这里面重点有两条,1.网络环境下,2.能够给出响应。用Java写过网络通信程序的都知道,这里必然会用到Socket编程。我们自己要实现的服务器...2013-08-28 20:09:45 · 253 阅读 · 0 评论 -
Tomcat7中一次请求处理的前世今生(三)请求与容器中具体组件的匹配
前一篇文章分析到了org.apache.coyote.http11.AbstractHttp11Processor类process方法,以解析请求头的getInputBuffer().parseRequestLine方法调用为例,看到如何从Socket的IO流中取出字节流数据,根据Http协议将字节流组装到Tomcat内部的org.apache.coyote.Request对象的相关属性中。...2013-08-30 15:34:08 · 246 阅读 · 0 评论 -
Tomcat7中一次请求处理的前世今生(四)Tomcat7阀机制原理
通过前面的三篇文章看到了一次客户端连接在Tomcat内部被转换成了请求对象(org.apache.catalina.connector.Request类的实例),并在该请求对象内部将与本次请求相关的Host、Context、Wrapper对象的引用。本文主要分析该请求对象在容器内部流转的经过。再来看一下Tomcat7内部的组件结构图:其实这张图已经给出了答案,在Connector接收到...2013-08-31 17:10:50 · 214 阅读 · 0 评论 -
Tomcat7中web应用加载原理(一)Context构建
为什么关心Tomcat中一个web应用的加载过程?在前面的文章中看过多次Tomcat的组件结构图,这里再贴出来回顾一下:之前的《Tomcat7启动分析》系列文章中看到Tomcat启动的时候将会解析server.xml,根据里面所配置的各个节点信息逐一初始化和启动相应组件(即分别调用它们的init和start方法),但浏览一下Tomcat7源码中的server.xml的内容,里面对应上图中的...2013-09-10 17:11:12 · 231 阅读 · 0 评论 -
Tomcat7中web应用加载原理(二)web.xml解析
前一篇文章讲了org.apache.catalina.startup.HostConfig的lifecycleEvent方法中所做的事情。最后看到在Tomcat启动时或启动后(后台线程定时扫描)会调用HostConfig类的deployApps方法: /** * Deploy applications for any directories or WAR files th...2013-09-19 08:44:06 · 304 阅读 · 0 评论 -
Tomcat7中web应用加载原理(三)Listener、Filter、Servlet的加载和调用
前一篇文章分析到了org.apache.catalina.deploy.WebXml类的configureContext方法,可以看到在这个方法中通过各种setXXX、addXXX方法的调用,使得每个应用中的web.xml文件的解析后将应用内部的表示Servlet、Listener、Filter的配置信息与表示一个web应用的Context对象关联起来。这里列出configureConte...2013-09-20 15:04:41 · 410 阅读 · 0 评论 -
Java中ArrayList循环遍历并删除元素的陷阱
Java中的ArrayList循环遍历并且删除元素时经常不小心掉坑里,昨天又碰到了,感觉有必要单独写篇文章记一下。 先写个测试代码:import java.util.ArrayList;public class ArrayListRemove { public static void main(String[] args) { ArrayList<Str...2015-04-17 16:11:07 · 410 阅读 · 0 评论