posts - 156,  comments - 601,  trackbacks - 0
  2010年3月29日
     摘要: 1. Springboot config示例与原理介绍1.1 Springboot config示例Springboot给我们提供了非常便捷与方便的配置使用方式,常用的使用示例有以下两种:1)使用@ConfigurationProperties 读取多个属性使用方法:@ConfigurationProperties(prefix = "spring.datasource")使用说明:提供...  阅读全文
posted @ 2021-04-08 20:00 x.matthew 阅读(495) | 评论 (0)编辑 收藏
     摘要: jprotobuf-rpc-http 是应用jprotobuf类库实现基于http协议的RPC开发组件。 目前1.0提供可以直接把Google protobuf的IDL定义语言发布成RPC服务,客户端也可以直接应用IDL定义语言进行动态创建,帮助开发完全省去了手工编译protobuf IDL语言的麻烦。  阅读全文
posted @ 2014-10-10 15:20 x.matthew 阅读(3505) | 评论 (0)编辑 收藏
     摘要: JProtobuf官方网址:https://github.com/jhunters/jprotobuf
1.0.0 支持普通类型,嵌套对象以及对象数组的Protobuf协议的序列化与反序列化实现。(注解替换proto描述文件)
1.0.1 由注解对象动态生成Protobuf的IDL描述文件内容。
1.0.3 增加由.proto 描述文件动态生成Protobuf操作对象的支持,详见下面使用说明。  阅读全文
posted @ 2014-09-30 11:43 x.matthew 阅读(4859) | 评论 (4)编辑 收藏
     摘要: 如果大家有遇到过Java内存泄露问题,而且亲自动手去定位和分析经历的同学来讲,获取Java的堆内信息对了内存使用情况的问题分析和定位是非常有帮助了。例如我们常用的MAT工具,可以较方便的让我们定位程序中内存的使用情况,是哪块导致了内存的泄露等。
但由于传统的分析过程比较麻烦,需要使用Jdk的jmap(Java Memory Map)命令把heap内存dump到一个文件,然后用MAT进行分析。所以本文介绍一种方法可以实现在线查看heap内存的使用情况,并附上源码实现,希望对大家有帮助。由于目前调研中只找到了Sun JDK6以及以上版本的实现,所以目前该方案只支持Sun JDK6或以上。如果其他同学有其它版本的JDK实现分享,欢迎一起交流。  阅读全文
posted @ 2013-02-20 16:30 x.matthew 阅读(6277) | 评论 (9)编辑 收藏
     摘要: CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。假如在涉及一组固定大小的线程的程序应用中,要求这些线程必须不时地互相等待(保证所有线程都执行完毕才返回),那么选择 CyclicBarrier 就会让这个实现变得非常容易。CyclicBarrier 在释放等待线程后可以重用,所以又称它为循环 的 barrier。  阅读全文
posted @ 2012-06-28 13:34 x.matthew 阅读(2728) | 评论 (1)编辑 收藏
     摘要: 本文通过对Apache Commons Collections 项目中LRUMap这个集合类的源代码进行详细解读,为帮助大家更好的了解这个集合类的实现原理以及使用如何该集合类。
首先介绍一下LRU算法. LRU是由Least Recently Used的首字母组成,表示最近最少使用的含义,一般使用在对象淘汰算法上。也是比较常见的一种淘汰算法。  阅读全文
posted @ 2012-06-28 13:34 x.matthew 阅读(5790) | 评论 (1)编辑 收藏
     摘要: Treap=Tree+Heap。Treap本身是一棵二叉搜索树,它的左子树和右子树也分别是一个Treap,和一般的二叉搜索树不同的是,Treap记录一个额外的数据,就是优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质(在这里我们假设节点的优先级大于该节点的孩子的优先级)。但是这里要注意的是Treap和二叉堆有一点不同,就是二叉堆必须是完全二叉树,而Treap可以并不一定是。  阅读全文
posted @ 2012-05-16 14:37 x.matthew 阅读(4244) | 评论 (0)编辑 收藏
     摘要: 对于Mybatis 拥有的Lazy Load(有中文翻译成延迟加载)功能,应该很同学都有听说过,今天主要与大家一起来解读一下Mybatis在Lazy Load功能的实现的代码。Lazy Load实现的功能很好理解,就是在数据与对象进行Mapping操作时,只有当真正使用该对象时,才进行Mapping操作,以减少不必要的数据库查询开销,从而提升了程序的效率。  阅读全文
posted @ 2011-12-29 19:14 x.matthew 阅读(4998) | 评论 (1)编辑 收藏
     摘要: Thrift出自Facebook用于后台各个服务间的通讯,Thrift的设计强调统一的编程接口的多语言通讯框架.
本文通过一个实例来介绍一下Thrift最基本的应用。  阅读全文
posted @ 2011-11-12 18:57 x.matthew 阅读(17870) | 评论 (4)编辑 收藏
     摘要: JDK Proxy AOP实现与Cglib Proxy AOP实现对比。  阅读全文
posted @ 2011-10-10 19:24 x.matthew 阅读(5007) | 评论 (1)编辑 收藏
     摘要: 在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,但由于官方文档对这块的使用,描述的比较简短,细节上也被忽略掉了(可能是开源项目文档一贯的问题吧),也使用不少同学在使用中遇到了问题。特别是foreach这个函数中,collection属性做什么用,有什么注意事项。由于文档不全,这块只能通过源代码剖析的方式来分析一下各个属性的相关要求。  阅读全文
posted @ 2011-08-31 14:38 x.matthew 阅读(50533) | 评论 (4)编辑 收藏
     摘要: 本文主要介绍什么是API,以及API兼容的重要性,最终给出方案如何评估API,以及如何做到API兼容。  阅读全文
posted @ 2011-07-29 19:35 x.matthew 阅读(564) | 评论 (0)编辑 收藏
     摘要: Spring声明式事务功能应该是大家应用Spring中使用的最多的功能之一了,的确该功能极大的简化了大家对数据库操作的。目前Spring支持的声明式事务有两个配置方式,一种是XML配置方式,另一种是注解方式

针对配置这块,XML配置同学们会觉得比较麻烦,特别是针对事务属性的配置,所以补充一下本块配置说明,特分享给大家,希望对大家有帮助。  阅读全文
posted @ 2011-06-23 13:25 x.matthew 阅读(4363) | 评论 (3)编辑 收藏
     摘要: 本月Tomcat 7.0.14版本正式发布,其最显著的一个新功能就是引入了StuckThreadDetectionValve功能,该功能可以帮助分析和检查耗时的请求或潜在可能会出现请求线程阻塞等情况  阅读全文
posted @ 2011-05-25 21:51 x.matthew 阅读(3040) | 评论 (4)编辑 收藏
     摘要: 本文章会通过连载的方式来深入了解和学习Spring相关核心技术和实现原理。包括Spring的Bean生命周期管理,声明性事务管理,AOP管理,注解应用实现,以及在其上面进行扩展的相关应用。

本篇技术文章将介绍Spring声明式事务管理实现技术细节的剖析。  阅读全文
posted @ 2011-04-29 10:54 x.matthew 阅读(2173) | 评论 (1)编辑 收藏
     摘要: 讲起静态代码分析工具,估计大家耳熟能详的都能讲出几个来,像PMD, Checkstyle, Findbug等。没错这些都是我们日常编码代码时用于提升我们代码质量的好工具,本文将从PMD工具实现的规则出发,通过这些规则的定义来学习一下代码优化的技巧,希望通过这些技巧的介绍可以帮助大家在编码过程中提升大家的代码编写质量。同时也算给大家介绍一个比较不错的途径去学习改进代码编写质量的方法。  阅读全文
posted @ 2011-04-29 10:54 x.matthew 阅读(2345) | 评论 (2)编辑 收藏
     摘要: 本文章会通过连载的方式来深入了解和学习Spring相关核心技术和实现原理。包括Spring的Bean生命周期管理,声明性事务管理,AOP管理,注解应用实现,以及在其上面进行扩展的相关应用。

本篇技术文章介绍Spring AOP的实现。  阅读全文
posted @ 2011-04-01 10:52 x.matthew 阅读(2336) | 评论 (0)编辑 收藏
     摘要: 本块文章会通过连载的方式来深入了解和学习Spring相关核心技术和实现原理。包括Spring的Bean生命周期管理,声明性事务管理,AOP管理,注解应用实现,以及在其上面进行扩展的相关应用进行介绍。

本篇技术文章将作为Spring入门篇。
  阅读全文
posted @ 2011-03-14 19:24 x.matthew 阅读(2433) | 评论 (3)编辑 收藏
     摘要: 本文是针对 之前的通过Spring2.5对单元测试的Annotation支持进行TDD开发 进行扩展,增加了Struts Action层的测试实现。虽然Action没有注入到Spring容器,也可以通过 getProxyAction方法,实现Spring容器的属性依赖注入实现  阅读全文
posted @ 2011-02-27 19:15 x.matthew 阅读(1925) | 评论 (2)编辑 收藏
     摘要: 介绍:
Hibernate Envers目的是根据对实体的设置,提供记录执行数据变更历史的功能(数据变更版本)。它实现原理是通过对Hibernate的操作事件监听并根据
基于Annoatation的配置来记录修改数据的内容。  阅读全文
posted @ 2010-08-22 23:20 x.matthew 阅读(9374) | 评论 (1)编辑 收藏
     摘要: 在上篇博客中,介绍了如何借助Spring Module项目,配置声明式缓存功能实现,文中只针对Ehcahce的实现进行了讲解,其它Spring Module项目把这块的功能做了一个很好的抽取,使其能更好的对其它的缓存框架的支持和扩展。笔者正好利用该代码框架实现了与Memcached服务的集成,本文将得点通过源代码解讲一下抽取这层的实现,希望大家有所帮助。  阅读全文
posted @ 2010-05-13 19:53 x.matthew 阅读(4425) | 评论 (2)编辑 收藏
     摘要: 前言:
如果大家使用过Spring事务管理,会发现Spring提供的事务分为“只读”和“读写”事务两类。这不免就会疑问这两种事务会有什么不同?本文则通过对Spring和Hibernate源代码的剖析来找出这两种事务的区别。特别是运行性能方面的区别。
文章调试使用的版本为 Spring 2.5.6.SEC01 ,Hibernate 3.3.2.GA。  阅读全文
posted @ 2010-05-06 19:31 x.matthew 阅读(6028) | 评论 (1)编辑 收藏
     摘要: 本笔记针对Spring-dynamic 1.2.0版本进行一个简单开发应用讲解,使用Apache Felix-1.8.0作为osgi运行环境。  阅读全文
posted @ 2010-04-29 19:08 x.matthew 阅读(4529) | 评论 (2)编辑 收藏
     摘要: 前言:
本文档将讲解一下,如何借助Spring Module项目,实现配置声明性缓存功能。
说明:
本档的配置经过本人测试,都能正确运行。
运行环境: Jdk5.0, Spring-2.5, Spring-modules-0.9, ehcache-1.6.0-beta4.jar  阅读全文
posted @ 2010-04-22 19:47 x.matthew 阅读(3282) | 评论 (4)编辑 收藏
两种Java代码实现方法:

 通过jmx rmi 连接:
          HashMap env = new HashMap(1); 
        
final String[]    credentials    = new String[] { "admin""adminadmin" };
        env.put( JMXConnector.CREDENTIALS, credentials );
        
// so our JMXConnectorProvider may be found
        
//env.put( JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "com.sun.enterprise.admin.jmx.remote.protocol" );
        JMXServiceURL serviceURL = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:8686/management/rmi-jmx-connector");
        JMXConnector connector 
= JMXConnectorFactory.connect(serviceURL , env); 
        MBeanServerConnection connection 
= connector.getMBeanServerConnection(); 
            
        Object o 
= connection.invoke(new ObjectName("com.sun.appserv:type=domain,category=config"), "getName"new Object[]{}, new String[]{});
        System.out.println(o);
 通过jmx http连接
        HashMap env = new HashMap(4);
        env.put( 
"com.sun.enterprise.as.http.auth""BASIC" );
        env.put( 
"USER""admin" );
        env.put( 
"PASSWORD""adminadmin" );
        env.put( JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, 
"com.sun.enterprise.admin.jmx.remote.protocol" );
        JMXServiceURL serviceURL 
= new JMXServiceURL("s1ashttp""localhost"4848);
        
final JMXConnector conn    = JMXConnectorFactory.connect( serviceURL, env );
        MBeanServerConnection connection 
= conn.getMBeanServerConnection(); 
        
        Object o 
= connection.invoke(new ObjectName("com.sun.appserv:type=domain,category=config"), "getName"new Object[]{}, new String[]{});
        System.out.println(o);


Good Luck!
Yours Matthew!

posted @ 2010-03-29 15:42 x.matthew 阅读(2526) | 评论 (0)编辑 收藏