自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

讨论:分布式环境中的服务以及事务

     最近在看SOA相关的东西,综合看下来,发现几乎所有教材都在讲解正常流程;但是个人感觉下来,觉得SOA的实施真正的问题反而是在服务的治理方面。遗憾的是教程几乎都着眼于基于ACID的分布式事务——实际上在现实世界里面,比如在淘宝,EBay里面,这种强一致性的两阶段事务根本就是被抛弃的,例如淘宝,用的是Best Efforts 1 Phase Commit .也就是说,是一种最终一致性模...

2013-01-19 09:47:01 141

原创 Oracle杂记

      好久木有写博客了。罪过罪过,实在是太忙,好在闲余没有白白浪费,Oracle的水平有了一个质的飞跃,越来越喜欢在命令行模式里面直接管理数据库的感觉了。          前段时间参加Velocity China 2012 _ web性能大会,期间接触到了MySql的集群方案,鉴于对Oracle比较熟,就研究了一番RAC。其实RAC就是Oracle的集群方案,基本上做到了两点: 一...

2012-12-27 19:09:20 143

原创 Mina 源码分析

终于又有时间和精力来写写东西啦,真开心~这两天闲来没事翻了翻Mina的源码,小有感触,于是决定简单分享一下。从服务端出发来分析一下吧。Mina有这么几个核心的接口类:IoAcceptor:  启动server段监听,启动Acceptor线程,处理连接请求同时生成IoSession并放到一个数组里面。IoProcessor: 启动Processor线程。循环处理上面提到的数组里面的I...

2011-08-11 11:23:59 151

原创 分布式系统的一点总结

最近公司决定做一个面向个人的应用。虽然前期可能并发不会很大但是还是研究了一下支付宝和Ebay的分布式架构,以备用。 首先CAP理论。我们通常在集中式环境中遇到的事务基本都是遵循ACID原则的。也就是说数据库中的数据有着很强的一致性。但是在一个分布式环境中由于会遇到读写分离的情况,根据著名的CAP理论,为了更大程度的保证A(availability)和P(partition tole...

2011-07-01 15:41:56 108

原创 java 内存相关的一些知识点

晚上翻 林昊 写的 <<分布式java应用>>,感觉很精辟。 还没系统看,刚刚看了下java内存模型这一块,做点笔记:) 首先为了跨系统的特性,java中是没有寄存器的。  然后分析一下jvm是怎么瓜分内存的~ 线程栈(书中的jvm内存栈):线程私有的运行时的方法栈jvm 堆: java用来存放对象的地方。根据对象的生命周期长短以及为了根据不同垃...

2010-12-18 00:30:24 90

原创 java Bio与Nio通信方式小例子

哎,昨晚又加班。可是还是很准时的醒了....上午不用去公司,正好继续补全我的博客:) 大家都知道自从jdk5开始,java中多了java.nio和java.util.concurent包,这两个包可谓威力无穷啊,像tomcat最新版本(用了concurrent包),mina等纷纷在此基础上进行了更新(mina更是直接就通过java.nio来实现的)。 其实nio说起来很简单...

2010-12-17 09:33:47 114

原创 java concurrent之Runnable,Callable,Executor

Runnable作为线程的接口已经广为大家所知。但是在执行任务的时候如果想要返回结果怎么办?如果想抛出异常怎么办?这些都是Runnable无法做到的。这时候另一个线程接口就出现了: Callable: V call() throws Exception; Oh,perfect! 可以返回值,可以抛异常! 我们知道Runnable是通过Thread 类来执行的:new Thr...

2010-12-16 15:36:10 83

原创 java里面的Synchronizers--Latch,Barrier,Semaphore,ReentrantLock,Condtion

昨晚闲来翻了一会Java ConcurrentCy in Practise,进一步明确了java 一些 Synchronizers的用法,在此简单记录一下昨日随手写的demo代码。只是为了加深印象,所以不怎么讲究,如有看官路过请不要挑剔: import java.util.concurrent.BrokenBarrierException;import java.util.co...

2010-12-15 14:46:58 122

原创 memcached相关命令

近日在项目中用到了memcached缓存。在此总结了一些常用的进行监控的命令:1. stats 。列出一些常用的状态信息。比如缓存的命中次数啊,miss次数啊2. stats items . 列出详细的Item信息。3. stats cachedump 3 10  列出某个slab下面的items的信息。    签名的3表示一个slab id,后面的10表示列出的item的最大条数...

2010-12-14 21:45:13 92

原创 oracle一些小tip

近日在做报表的时候,有时候cpu利用率会很高,查看了一下发现主要是一些全表扫描(full scan) , 于是了解了一下这个概念,顺带温习了一下oracle索引的相关知识,记录如下: 1. rowno与rowid   前者是oracle对select出来的数据按照顺序分配的一个逻辑编号。   后者是一个伪列,基本上每行记录生成之后就有一个rowid并且不再变化2. B树索引...

2010-12-01 16:54:59 91

原创 java中的method override和variable hide

昨天跟朋友讨论到一个有趣的问题:java中variable有没有override?真是惭愧啊,到现在才知道原来java中的override只是针对method来讲的,对于变量是hide.闲言少叙,先上两段代码:public class Base {public int x=1;public void echo(){ System.out.println(x);}}...

2010-11-30 10:56:10 178

原创 linux 下 java web应用占用cpu高的排查方法

1. top (linux下面),然后在top下面 Shift+H,就能看到到底是哪个线程(注:top默认的只显示进程信息)占用cpu高了; solaris下面的话用prstat.2. pstack pid(占用cpu高的进程)    在出来的文件里面找到对应的在步骤1里面找到的线程的trace信息,然后看一下这个线程究竟在干啥吧~ 在linux下面还有一个比较有用的命令,gc...

2010-11-25 09:10:34 113

原创 spring源码分析之——spring scope的实现原理

大家都知道spring中的bean是有生命周期的,比如:singleton,prototype,session,request,globalsession.那么这些生命周期是如何实现的呢? 继续前面章节的分析,回到AbstractBeanFactory中对bean的获取代码上面来:private <T> T doGetBean( final String nam...

2010-11-22 11:02:15 616

原创 spring源码分析之——spring bean的获取

前面分析了bean解析的过程,知道了bean都是以beandefinition的形式放在bean factory里面的。下面来看一下bean具体的获取过程。 Spring 提供了一个获取bean的工具方法:WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc).getBean(Stri...

2010-11-19 17:13:21 137

原创 spring源码分析之——spring aop代理实现细节

前面分析了spring aop的实现原理。为了突出整个流程的清晰,其中有些细节部分没有详细分析。现在就分析一下aop生成代理对象的细节。言乘上文,spring aop 生成代理对象是在AbstractAutoProxyCreator的如下方法中:protected Object createProxy( Class<?> beanClass, String bean...

2010-11-17 16:56:41 102

原创 spring源码分析之——spring aop原理

aop是spring中非常有趣的一个功能。如果应用得当会大有用处。现在从源码角度分析一下 Spring aop的实现原理。 还是从上篇中提到的<aop:config><aop:advisor>....</aop:advisor>....</aop:config> 这些配置信息的解析入手。spring中aop nam...

2010-11-17 16:18:39 318

原创 spring源码分析之——spring 事务管理实现方式

注意:这里只是分析spring事务的实现方式。也就是spring的事务管理是怎么发生作用的,而不分析具体的实现细节(细节将在下一篇里面分析). 紧接着上一篇提到的,Spring是通过NameSpaceHandler来解析配置文件中的标签的。下面就已事务的配置为例,讲述一下事务配置的标签的解析过程,从来理解事物是如何通过aop产生作用的。  <!-- 以AspectJ方式 ...

2010-11-17 13:26:34 141

原创 查看linux哪个线程占用cpu比较高

有时候在应用里面会出现cpu占用率很高的情况。这时候就需要确定到底是哪个线程出了问题。通常的ps,top等命令列出来的都是进程信息,而jvm通常只有一个主线程。这就给我们debug造成了不便。于是想办法找出有问题的线程信息而非进程信息。 搜索了一下,大概有这么几种方式:1.  cd /proc    grep SleepAVG  **/status  | sort -k...

2010-11-17 11:33:39 644

原创 spring源码分析之——spring bean配置文件解析

上面一篇提到了bean加载的入口:AbstractRefreshableApplicationContext的refreshBeanFacotry中有一行代码:loadBeanDefinitions(beanFactory); 当前的applicationcontext的实现类是xmlwebapplicationContext,所以最终的loadbeanDefinitions(bean...

2010-11-16 12:55:06 121

原创 spring源码分析之——Spring bean的加载入口

同前一篇一样,本文的分析还是基于Spring的web应用。 从web.xml里面配置的ContextLoaderListener开始。ContextLoaderListener引用了一个ContextLoader(可以是它自身);ContextLoader引用了一个WebApplicationContext;WebApplicationContext本身是一个beanFacto...

2010-11-12 16:24:03 452

关于Spring放在web容器公共目录共享lib下面的分析

************IMPORTANT***************下面这篇文章有欠考虑(但有些思路还是有点用处的,故不忍删除)。故此特别声明,以免误导大家。详细原因请看回复。 现在公司里面用Spring,都是把spring跟每个应用集成到一块。然后几个应用部署在同一台tomcat下面。这样容易产生的一个问题是每个应用到加载一次Spring的相关jar。如果应用比较多,难免...

2010-11-12 14:17:01 184

原创 解决sqlplus里面不能正常使用backspace键的问题

在进入sqlplus之前,在当前terminal 执行如下命令:stty erase '^H'就可以了。stty: 修改终端参数。如果不想每次进入终端都敲入这个命令,在当前用户的.profile里面加入这个命令。这个命令的意识就是使用 BackSpace键作为删除键。(有些系统默认使用空格作为删除键)...

2010-11-04 11:27:30 392

原创 在Oracle里面取得有所有层次关系的顶级对照关系

题目表达不清楚,先大体描述一下场景: 一张表 t(tid,parent);其中如果praent 不存在那么这个字段为null;典型的树形结构的数据。其中的层次不确定。也就是说可以是child->parent->pareng....不确定最终某个child的头上有几层parent.  现在需要取出所有的id和其最顶级的点的对应关系数据。 Sql如下: ...

2010-11-02 17:49:16 169

原创 spring源码好复杂

唉,需要多么深的功力才能设计出这等复杂的框架?一直在看,哪怕主要的bean的完整的从解析,创建,获取的流程都看明白了。可是一翻包,天哪,好复杂的框架!那么多工具类,那么多各种各样抽象出来的类,咋设计的啊?两眼星星。啥时候偶也能参与到一个NB的framework的开发过程中啊..... ...

2010-10-09 14:57:17 792 1

原创 简单描述一下Ehcache的实现

近期看Ehcache的代码。感觉代码看得还是比较轻松,但是对于整体的把握容易在深入代码的时候而迷失。于是就大体画了一下Ehcache内部的类图,以此来加深自己对Ehcache实现的理解。可以看出,Ehcache的核心是CacheManager.每当对cache进行操作的时候,通过CacheManager获得对应的cache.然后进行对应的操作。而cache又关联了Registere...

2010-10-08 15:03:17 82

原创 tomcat6的classloader

之前一直对classloader感觉很陌生,今天找时间看了下tomcat源码。总算对classloader的应用大概有了个认识。1. java的classloader采用parent delegation模式。采用这个模式的作用是保护通过bootstrap和system classloader加载的类的安全性。也是为了避免jvm里面整个类的结构的混乱。举个很简单的例子:在j2ee里面我们加载j...

2010-09-15 14:34:14 73

原创 linux下面查看jvm性能相关信息的一些命令

最近系统总是每隔一周左右就莫名其妙down掉。于是研究了一下jdk下面几个常用的查看jvm运行时状态的参数,很快找出了问题所在。现在把几个命令记录一下:1. jstat      这个命令对于查看Jvm的堆栈信息很有用。能够查看eden,survivor,old,perm等heap的capacity,utility信息    对于查看系统是不是有能存泄漏以及参数设置是否合理有不错的...

2010-09-10 09:11:28 306

原创 统计linux下面各种状态的tcp connection数量

今天发现了很帅的依据脚本:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  运行之后,结果如下:TIME_WAIT 618CLOSE_WAIT 2ESTABLISHED 105

2010-09-04 11:11:26 146

原创 maven,Spring,Tomcat整合

今天尝试用maven建立了一个web应用。结果发现建立之后只有src/main/resources,src/main/webapp目录,没有期待中的src/test,src/main/java目录。 google了一下,也没发现好的解决方式。于是试着在应用中手动建立了src/main/java目录。可是问题出现了!Eclipse 好像识别不了自己手动添加的目录。想了...

2010-08-30 16:16:11 76

原创 spring 中用到cglib的几个地方

 今天闲着没事翻Spring源代码的时候,又看到了InstantiationStrategy这个接口。这个接口的实现类是用来实例化bean的。看了一下,发现在spring里面有有这个接口的实现层次是这样的:          <<Interface>>InstantiationStrategy                        |      ...

2010-08-28 16:23:13 627

原创 总结一下内存泄漏的几个点

今日部署tomcat的时候提示thread local 可能引起内存泄漏,于是研究了一下在java中可能引起内存泄漏的一些点,简单写一下 内存泄漏,在我看来大体有两个原因。一是本身就是跟操作系统紧密相关的资源型对象,在使用的时候要比较小心,不然容易引起泄漏。比如: 1. socket2. 线程再者就是生命周期比较长的java对象。比如static类型的对象,或者对象本身被长生命...

2010-08-26 22:42:31 92

原创 Ehcache分布式缓存的实现

      近几日晚上闲来无事,研究了一下Ehcache的分布式缓存的实现。发现我看到的这一个版本是通过RMI实现的,同时RMI的实现方式也是直接集成在Ehcache的jar包里面的。此外Ehcache还提供了JMS,jgroup的实现方式。本文只简单讨论一下rmi实现方式。      闲言少叙,先上图,大概描述一下几个主要的类的关系。(公司里面从来不用UML,所以本人第一次画这种UM...

2010-08-19 13:17:46 163

tomcat中cookie的设置与jsp中session的设置

          大家都知道,在开发一个互联网应用的时候,为了达到一种服务端和客户端有状态的效果,需要有一个sessionid     来对客户端进行标志。很多时候,这是通过在客户端防止session cookie实现的。但是如果客户端禁用了cookie呢?这就需要通过urlrewrite或者其他方式来实现。于是我们可能就在应用里面不需要cookie了。既然不需要了当然是希望我们的应用不对coo...

2010-08-12 17:06:54 190

原创 tomcat session管理

最近有空看了一下tomcat 6源码里面对session管理的实现,现在写下来,以供后考,也希望能对对此感兴趣的朋友有所提示。 闲话少说,先贴一下tomcat6的component层次图(此图来自tomcat doc)  Server                                         就是一个servlet container           | ...

2010-08-10 22:39:56 69

原创 quartz在定时任务中的应用

最近在项目中遇到了定时对账的需求,本来是打算用Timer来着,后来因为考虑到需求可能会进一步细化,比如从最初的每日一对变为每小时一对等等,觉得还是使用相对成熟的框架quartz比较好。下面就自己的使用过程中的一些经验做一些简单记录。 1. 在maven的pom.xml文件里面添加quartz的包依赖        <groupId>org.quartz-scheduler&...

2010-07-12 13:45:00 67

原创 Spring bean中的id,name属性

今日做东东,遇到一个问题。就是一些bean是通过@Service的方式声明成为bean的。结果在某些应用里面因为需要序列化的原因,不能直接注入bean,需要在bean加载完之后手动取出需要的bean并且应用。但是声明的bean并没有名字.... 疑惑之下,看了一下Spring的源码,理解了一下spring bean的id,name的管理方式,理解如下:     id是唯一标志一...

2010-05-25 16:52:12 132

原创 dblink 以及 alias(别名)

最近做项目遇到需要同时用到两个数据库里面的表的问题,于是了解了下dblink以及alias. 加入操作的主数据库实例是A,但是同时需要用到B里面的表T.于是建一个database link: 建好之后,如果客户端需要操作操作,只需要T@dblink name 就可以访问到B里面的T了。 但是每次访问都需要制定dblink显然是不理想的,于是用到了别名。直接为一个远程表制...

2010-05-18 14:23:02 893

原创 maximum open cursors exceeded 问题

最近在维护系统的时候遇到一个问题,就是经常那个报题目中出现的: maximum open cursors exceeded 错误。网上查了一下,原来是因为对statement没能正常关闭导致cursor数量一直递增引起的。于是修改了具体操作jdbc的方法,把所有在异常里面以及外面的关闭statement的语句都去掉,只在捕捉异常后finally里面关闭。结果搞定。 事实证明,jdbc确实比orm更...

2010-05-18 14:16:30 124

tomcat源码分析之chain of responsibility模式以及请求处理

之前已经分析过了tomcat监听并且接收socket的过程,这里不再赘述。接收到socket之后,通过http11processor从socket中提取出request,response.然后调用Adapter的service方法处理request,response. 对request,response的处理应用了chain of responsibility 设计模式。tomcat中的conta...

2010-05-07 10:16:08 86

tomcat源码分析之Observer模式以及应用加载--Lifecycle

      研究过tomcat源码的朋友们可能都发现了,tomcat中几个主要的component都实现了Lifecycle接口,并且在start的时候通常都会publish一些事件。在这个过程中tomcat是通过Observer模式来实现相关功能的。下面以StandardHost为例来说明。       StandardHost是StandardContext(也就是部署在tomca...

2010-05-07 09:38:42 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除