Java学习
文章平均质量分 61
ningandjin
我在追寻自己的未来
展开
-
Mac下同时安装多个版本的JDK
JDK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下Java8的Lambda等新特性,可是目前Java企业级应用的主打版本还是JDK6, JDK7。因此,我需要在我的电脑上同时有JDK8,JDK7,JDK6。JDK6和JDK7主要是做一些产品代码的验证,以及自己玩一些开源项目,JDK8则纯属尝鲜,谁叫咱是喜新厌旧的程序员呢。[size=large][b]目标[/b][/size]...2014-04-14 21:42:11 · 292 阅读 · 0 评论 -
Spring4.0给我们带来什么?
[size=large][b]JDK8[/b][/size]对JDK8的支持,这个目前来说还是探索性质,毕竟Java 8自己都还没有GA,而且应该没有公司会在目前的情况下使用JDK8做产品开发。因此,暂时可忽略。[size=large][b]Groovy Bean Definition DSL[/b][/size]即可以通过Groovy class来配置Bean,以及Bean之间的...2013-12-22 17:13:38 · 149 阅读 · 0 评论 -
RESTful API版本控制策略
做RESTful开放平台,一方面其API变动越少, 对API调用者越有利;另一方面,没有人可以预测未来,系统在发展的过程中,不可避免的需要添加新的资源,或者修改现有资源。因此,改动升级必不可少,但是,作为平台开发者,你必须有觉悟:一旦你的API开放出去,有人开始用了,你就不能只管自己Happy了,你对平台的任何改动都需要考虑对当前用户的影响。因此,做开放平台,你从第一个API的设计就需要开始API...2013-12-15 19:51:42 · 503 阅读 · 0 评论 -
对象转换利器之Dozer
在Java的世界中,经常会涉及到需要在2个对象中进行转换,比如说:[list][*]调用SOAP Web服务,需要把自己的Domain对象转换为Soap服务的Jaxb对象请求,[*]在分层级SOA架构中,2个层级之间Domain对象的转换,[*]在分布式系统中,每个模块使用自己的领域对象,防止自己的业务被其他模块的domain对象影响[/list]通常情况下,程序员们会自己...2013-12-14 22:46:54 · 338 阅读 · 0 评论 -
进击的Java开发
今天在公司的邮件组中看到一组很有趣的讨论,这是我最喜欢目前公司的一个地方,经常有人主动把自己最新看到的有趣的东西分享出来。今天这组的话题是现代Java开发,Java无疑在企业级应用开发领域仍然独占鳌头。而Java的世界也在不断前进中。[b]开发工具[/b]:最好的Java IDE肯定是JetBrains的IntelliJ IDEA,没有之一。 有米的同学直接上Personal Licens...原创 2013-07-14 20:48:28 · 111 阅读 · 0 评论 -
基于Spring-WS的Restful API的集成测试
在很多Java企业级应用中,Spring占据了非常重要的位置,这就导致了基本上的技术选型都是围绕着Spring来, 比方说笔者最近的项目需要开发一个Restful的API接口,选型的时候就说,客户架构师直接就拍了spring-ws,原因呢?系统中其他的模块都是用的Spring-ws,保持一致,而且社区活跃,文档丰富,遇到问题易解决。好了,入正题。既然选定了Spring-WS, 已经TDD入...2013-11-28 19:41:56 · 115 阅读 · 0 评论 -
TDD Of Spring JMS
不知何时养成了习惯,在没有一个可运行的测试的时候,个人完全没有动力去写实际的业务代码。老觉得,没有测试来证明自己的确做了某件事,即使自己真的完成了某个Task,也心里很没底。比方说,我想写一个基于JMS的MessageSender, 首先就得想这个MessageSender的功能是什么? 我应该怎么测试这个功能?功能: MessageSender的作用就是发送一个指定的Messag...2013-11-25 19:53:58 · 77 阅读 · 0 评论 -
REST微服务架构之DropWizard
DropWizard是由Yammer开发团队贡献的一个后台服务开发框架,其集成了Java生态系统中各个问题域中最优秀的组件,帮助开发者快速的打造一个Rest风格的后台服务。 对开发者来说,使用DropWizard有如下好处:1、和Maven集成良好,也就是说和Gradle集成也很良好;2、开发迅速,部署简单;3、代码结构好,可读性高;4、自动为服务提供OM框架...2013-01-08 22:10:50 · 182 阅读 · 0 评论 -
说说SpringBatch的领域概念
谈到Spring Batch,会谈到很多的领域概念,Job, Step,JobLauncher,JobRepository,JobExecution,Chunk,Tasklet等等,这些概念一窝蜂的涌过来,让开发者非常容易迷失其中,本文的目的就是理顺一下这些领域概念,把所有这些概念逻辑的联系起来。首先,看一下Spring Batch官方文档中Spring Batch的架构图: [img...原创 2013-06-21 20:32:58 · 154 阅读 · 0 评论 -
Spring 4.0升级小贴士
随着Spring4.0的发布,很多同志估计都在考虑升级的事情了吧, 在前一篇([url]http://ningandjiao.iteye.com/admin/blogs/1993481[/url])中讲了Spring4.0给我们带来的新特性,如果真的非常喜欢的话,接下来就来看看升级注意事项,帮助想升级的同志们估算一下自己在自己的项目中升级到Spring 4.0的成本。[url]https://...2013-12-22 19:40:38 · 100 阅读 · 0 评论 -
Spring MVC中的异常处理
在一个良好的Rest架构的应用中,所有的异常都应该有对应的Http Status Code来表示具体的异常类型,这样可以客户端可以基于对应的Status Code做出最有利于自己的处理。在Spring MVC中,异常处理机制有3个选项:[list][*] 基于Exception的,即只处理某个异常[*] 基于Controller的,即处理某个Controller中抛出的异常。...2013-12-25 13:13:28 · 186 阅读 · 0 评论 -
Restful Spring MVC应用的Request验证
在开放平台的时候,尤其是坐Rest服务的时候,因为用户可以给你传输任何数据,因此,我们需要在服务的入口处添加一层Validator以保证所有无效的数据不泛滥到后续的处理流程中,该Validator会以Fail Fast的形式,尽早告诉客户请求不合法,以及为什么不合法。在Spring MVC框架中可以非常容易实现这样的一层Validator机制。在Rest服务中,需要验证的输入分为2个部分:...2013-12-26 15:05:14 · 274 阅读 · 0 评论 -
关于并发的思考
[size=large][b]并发数[/b][/size]并发数和2个因素有关,一是系统可用的处理器核数,这个值可以通过硬件查询得到,也可以通过如下代码得到:[code="java"]Runtime.getRuntime().availableProcessors();[/code]二是并发任务的类型,任务类型一般分为IO密集型和CPU密集型[list][*]I/O 密集的...2015-02-08 22:33:29 · 125 阅读 · 0 评论 -
Micro Service工具集之Swagger:可测试的样式化API文档
在我之前的一篇博文中,介绍了Yammer开发团队贡献的开源微服务开发框架DropWizard(http://ningandjiao.iteye.com/blog/1766498),有了服务之后,开发者最关心的事情是什么呢? 就是有人用你的服务。而开发者使用一个服务之前,首先需要知道的是该服务的API,目前几乎所有的开放平台都是把API以文档的形式放在网站上,如下:[img]http://dl2...2013-09-28 19:55:56 · 186 阅读 · 0 评论 -
使用Hystrix守护应用(3)
[size=large][b]监控HystrixCommand[/b][/size]除了隔离依赖服务的调用外,Hystrix还提供了近乎实时的监控,Hystrix会实时的,累加的记录所有关于HystrixCommand的执行信息,包括执行了每秒执行了多少请求,多少成功,多少失败等等,更多指标请查看:[url]https://github.com/Netflix/Hystrix/wiki/Met...2015-01-02 22:04:51 · 170 阅读 · 0 评论 -
使用Hystrix守护应用(2)
接上篇([url]http://ningandjiao.iteye.com/blog/2171185[/url]),[size=large][b]执行方式[/b][/size]HystrixCommand提供了3种执行方式:[b]同步执行:[/b]即一旦开始执行该命令,当前线程就得阻塞着直到该命令返回结果,然后才能继续执行下面的逻辑。当调用命令的execute()方法即为同步执行,...2014-12-30 14:35:20 · 222 阅读 · 0 评论 -
使用Hystrix守护应用(1)
Hystrix([url]https://github.com/Netflix/Hystrix[/url])是Netflix([url]https://www.netflix.com/global[/url])的一个开源项目,主要作用是通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。 其可以看做是Netflix团队对分布式系统运维的各种理念和实践的总结。值得一...2014-12-30 14:28:43 · 932 阅读 · 0 评论 -
性能测试工具之Gatling
Gatling一直是久闻其名但是未得机会运用,正好最近有需求做性能测试,于是趁此机会熟悉了一下,可以说,这是目前最合我胃口的性能测试工具。其主要有以下特点:[list][*]1. 绿色软件,即下即用。[*]2. DSL脚本描述测试场景,高端大气,易读易维护[*]3. 测试结果报表很漂亮,可读性高。[*]4. 使用Scala的actors和异步IO,资源消耗小,且运行稳定。[...2014-01-15 19:27:28 · 515 阅读 · 0 评论 -
JavaMail测试工具之GreenMail
不管现在各种Mock框架的运用有多广,我个人在写单元测试的时候还是特别烦Mock,原因如下:[list][*]1. 使用Mock需要Mock所有涉及到得行为,这其实代表了我们是在测试实现,而不是测试执行过程。这样会导致重构的时候经常需要修改很多测试代码。测试应该只关注输入输出,只要输入输出没变,就不应该影响测试。[*]2. 增加代码复杂度。[*]3. Mock的时候会不小心屏蔽掉一...2014-01-08 19:13:40 · 253 阅读 · 0 评论 -
定制一个Gradle Plugin --- project-structure
最近在项目中遇到一个不大,但是还蛮烦人的问题,在Maven的约定中,一个标准Java项目的代码结构如下:[code=""]project--src --main --java --resources --test --java --resources[/code] 当‘gradle i...2014-01-03 21:23:47 · 195 阅读 · 0 评论 -
重构之我见
所谓重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。 定义很明确,清楚,但是怎么证明重构真的改善了代码的质量,性能?怎么证明重构提高了软件的扩展性合并可维护性呢? 换句话说,怎么证明我们花在重构上的时间真的产生了价值? 在软件代码的开发中...原创 2012-08-18 09:22:33 · 90 阅读 · 0 评论 -
Spring Batch学习笔记(1)
刚把上一个项目的组的框架和技术栈理顺,突然又要转到新的项目组,而且现在已经不是刚入公司的新人了,没有那么多的时间慢慢适应,赶紧上手做事才是王道,在新的项目组的技术栈中,首当其冲的就是Spring Batch,赶紧上手练习之。Spring Batch是什么? Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都...原创 2012-08-01 22:26:59 · 339 阅读 · 0 评论 -
JBehave学习笔记(一)---介绍JBehave
1、什么是JBehaveJBehave是一个用java编写的BDD(Behavior-Driven-Design)框架, java界的Cucumber。(注: 1、BDD主要的目的是能够从业务领域专家的视角来编写测试用例,以解决技术人员和业务领域专家的沟通问题。2、Cucumber是基于Ruby的BDD框架) 2、JBehave的特点1)、纯Java实现,能调用jav...原创 2012-05-17 22:42:26 · 1295 阅读 · 0 评论 -
JDK7 AIO 入门(二)------AsynchronousServerSocketChannel
接上篇,接下来练习通过AIO实现一个简单的TCP server。熟悉NIO的朋友应该都了解ServerSocket,在AIO中与之对应的就是AsynchronousServerSocketChannel,查看其API文档,介绍如下”An asynchronous channel for stream-oriented listening sockets. “,就是一个异步的数据流监听Soc...原创 2012-05-03 22:55:46 · 209 阅读 · 0 评论 -
JDK7 AIO 入门(一)------AsynchronousFileChannel
随着JDK7的发布,Java的AIO正式支持版本也出炉了,就像当年发布NIO特性支持时,基本上所有的Java服务器都重写了自己的网络框架以通过NIO来提高服务器的性能。AIO的发布势必也会引起Java界的一次重写风潮,现在很多的网络框架(如Mina),大型软件(如Oracle DB)都宣布自己已经在新版本中支持了AIO的特性以提高性能。下面就来看一下aio的基本原理,以及如何使用JDK7的A...原创 2012-05-02 22:59:33 · 216 阅读 · 0 评论 -
OpenJDK源码分析(2)
[b] 找到jvm.dll之后呢?[/b]——加载。 也就是获取到应该加载的jvmPath之后,java.c接下来执行到263行: [code="c"] if (!LoadJavaVM(jvmpath, &ifn)) { exit(6); }[/code],通过java_md.c的LoadJavaVM函数来加载整个JVM虚拟机,该方法有2个参数...2012-01-25 21:30:37 · 159 阅读 · 0 评论 -
OpenJDK源码分析(1)
对于Java程序来说,JVM是一台完整的机器,可是对于真正的机器或OS来说,JVM只是其中一个进程而已。作为一个进程,它又是如何启动的呢?如下来一步一步分析。(注,本文分析的JDK源代码是openjdk6,下载地址:http://download.java.net/openjdk/jdk6/) JVM的进程入口是在...\jdk\src\share\bin\java.c。199行。该...2012-01-24 12:30:13 · 190 阅读 · 0 评论 -
从一个例子看JVM启动过程(2)
其实,在代码执行到Main函数之前,需要加载初始化很多类。在初始化虚拟机的这段时间中,Bits类先于VM类初始化,即在VM还没有初始化完的时候,Bits类就已经开始初始化静态属性maxMemory,而通过反射拿到的值也是这个时候设置的值。具体过程如下:[code="java"]private static volatile long maxMemory = VM.maxDirectMemory...2012-01-21 14:29:52 · 109 阅读 · 0 评论 -
从一个例子看JVM启动过程(1)
开题从一个例子说起:[code="java"]public class NativeMemoryGC{ @SuppressWarnings("restriction") public static void main(String[] args) throws SecurityException, NoSuchFieldException, ClassNotFoundE...2012-01-21 14:25:30 · 70 阅读 · 0 评论 -
从Maven到Gradle
1、安装 Gradle安装和Maven一样方便,只需要,下载(http://www.gradle.org/downloads )==》解压==》配置环境变量(GRADLE_HOME & PATH),配置好环境变量之后记得使用 source命令使新的环境变量生效。配置成功之后,可以在命令行通过 “gradle -v"验证是否安装成功。2、Gradle编译Maven风格的java项目...原创 2012-04-23 22:41:30 · 124 阅读 · 0 评论 -
JBehave学习笔记(二)---实战JBehave
[b]1、配置JBehave环境。[/b]1)、添加JBehave依赖包,基本的只需要添加jbehave-core和Junit包就足够了。2)、配置IntelliJ的JBehave插件,详情参见https://github.com/kumaraman21/IntelliJBehave/wiki[b]2、实现一个JBehave的Story基本过程[/b] JBahave的测...原创 2012-05-20 16:16:50 · 730 阅读 · 0 评论 -
JBehave学习笔记(3)--高级特性介绍
1、Composite Steps顾名思义就是能够把多个Steps组合为一个Step。例子[code="story"]Meta:@author liuxianning@theme compositeNarrative: This story is used to show composite steps.Scenario: Add a student into the...原创 2012-05-23 23:17:05 · 470 阅读 · 0 评论 -
Amazon EC2+Jenkins+Github构建自己的CI服务器
最近在做一个公司内部项目的时候,想搭建一个CI服务器,第一个想到的就是Jenkins,但是因为内部项目,在资源方面不想有更多的消耗,同时也想试玩一下当下正火的“云”概念,于是大家决定把CI服务器放到Amazon的EC2上。(1)、注册AWS账号,启动EC2实例 Amazon为每个新用户提供了一个Free Tier Usage的政策,具体政策如下[code="txt"]Free...原创 2012-06-24 01:38:08 · 321 阅读 · 0 评论 -
做项目时需要考虑的安全性问题
在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的安全性问题其实就是一个意识的问题,解决起来并不复杂,但是因为这些疏忽,却可能会给我们的用户带来很大的风险。下面就列举一些在做项目的时候应该考虑的一些安全性问题。[b]密码保存[/b]保存密码的第一准则是不能明文保存密码,之前CSDN密码泄露一事还记忆犹新。通常的做法是对密码进行不可逆加密,加密时不要使用MD5或者SHA系列的...2013-04-16 20:20:10 · 624 阅读 · 0 评论 -
使用Gradle部署jar包到Maven中央库
Maven作为目前Java界最好的Dependency管理系统,把jar包托管到Maven中央库,然后通过Maven Dependency使用是目前业界各种第三方库的普遍做法,如果,你想把自己开发的一些库分享给别人使用,也可以遵循这样的套路。Gradle可以看做是升级版的Maven,其使用了Maven最优秀的Dependency管理系统,但是,又规避了Maven的build pipeline的刻板...2013-04-12 16:15:55 · 677 阅读 · 0 评论 -
关于LISt Process...
前2天听了熊老师的一个Session,关于List Process的,差点忘了总结,现记录如下:从一个Story开始,现需求如下:(注:List中的每个元素都是都是整数)(1)、给定一个List,把List中的每个元素+1,返回新的List;(2)、给定一个List,把List中的每个元素*2,返回新的List;(3)、给定一个List,取出其中的偶数,返回新的List;...原创 2012-04-03 13:46:21 · 264 阅读 · 0 评论 -
TDD step by step
什么是TDD,字面很好理解,曾经的我以为就是先写测试,然后写实现,接着跑测试,通过,收工。今天厚着脸皮抓到高级敏捷咨询师力岩同学一起Pair,告诉我什么是真正的TDD,他以一个小Case的练习把我带进了TDD的大门,下面就来总结一下他是怎么step by step TDD的。 需求:国际象棋,有一个车(Rook),一个国王(King),当国王和车处于一条横线或一条竖线的时候,就叫做...原创 2012-04-01 22:03:34 · 105 阅读 · 0 评论 -
Toggle Annotation实现
在上一篇博客中介绍了一个从实际项目中抽取出来的小工具:Toggle([url]https://github.com/xianlinbox/Toggle[/url]), 这儿来记录下其整个实现过程:[b]Step1: 编写自己的Annotation[/b]Java从1.5版本引入了Annotation, 其从本质上来说不带有任何逻辑,只是可以附着在Package,Class,Meth...原创 2013-04-07 14:41:23 · 136 阅读 · 0 评论 -
A Little Java Feature Toggle Test Tool Introduction
[b]Toggle[/b]Feature Toggle is common concept in the current software development process, especially if you want to do continous dilivery. But there is a pain for developer to test both Feature Tog...原创 2013-04-07 12:26:55 · 152 阅读 · 0 评论 -
【CodeReview Automation】编写自己的PMD规则
什么样的代码叫做一个好的代码,相信每个人都有自己心中的一杆秤,而繁荣的Java社区也给了我们很多优秀的代码异味检测工具,Checkstyle,Findbug,PMD就是广为人知的几个。但是针对不同的问题,其中的异味和优秀实践各有不同,为了能够更好的Review迎合具体问题的代码,就需要我们能够在对问题有了了解之后,实现一些自己独有的代码检查规则,那么,以后我们针对这一问题的Code R...原创 2012-07-21 22:52:45 · 202 阅读 · 0 评论