Archive for the 'framework' Category
开源分词程序ki-analyzer启动
星期六, 六月 18th, 2011
ki-analyzer 是基于ik-analyzer 修改而来的分词程序,所以名字上只是简单的变了一下,源码方面还是沿用了ik的包名等。之所以在ik-analyzer之上山寨另一个轮子,也实在是因为我的需求ik-analyzer不能很好满足,并且功能、设计、改动方面较ik-analyzer有很大出入,所以另起山寨。ik-analyzer项目现在还活着,前不久发布了新版,貌似只是源码实现细节的调整,项目也不是很活跃。当然,国内的几个开源分词程序基本都停滞了。ki-analyzer程序是上周修改的,这周实际测试了一下,只能说bug方面基本稳定,但尚需进一步检验。因为一些想要的功能暂时还用不上,所以也没着急做。关于ki-analyzer的详细情况可以参考项目首页信息,对该项目感兴趣或有问题的朋友可以联系我。
使用依赖注入框架Google Guice替代new和工厂类
星期五, 六月 25th, 2010
在新系统中使用了Guice来统一了对象注入和创建方式,也不是刻意为之,而是由两个经典问题引起的:
1)对于对象的创建,可以使用new、静态工厂、抽象工厂等方式,使得对象创建方式不统一,而使用哪种方式最好也很难有定论,并且随着代码的变化,创建方式也可能会需要有更好的变化。
2)对于类成员的设置,最直接的是在类内部直接创建,但这样硬编码会影响灵活的测试性,解决的方法是通过外部注入成员,好处自不必说,但在一个复杂的系统中,类之间的关联及层次关系,使得一个上层对象的创建往往需要依赖多个下层的类,使得对象创建代码变的冗余而复杂。
解决上面两个问题,我就想到了依赖注入(DI)框架(也被成为IOC容器,取控制反转之意),我需要选择一个得手的依赖注入框架来满足需求。
Netty实现原理浅析
星期六, 六月 19th, 2010
Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步。本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 究。如果下面的内容有错误或不严谨的地方,也请指正和谅解。对于Netty使用者来说,Netty提供了几个典型的example,并有详尽的API doc和guide doc,本文的一些内容及图示也来自于Netty的文档,特此致谢。
Netty使用初步
星期六, 六月 19th, 2010
Java1.4提供了NIO使开发者可以使用Java编写高性能的服务端程序,但使用原生的NIO API就像Linux C中网络编程一样,还是需要做IO处理、协议处理等低层次工作。所以,就像C服务端程序大量使用libevent作为网络应用框架一样,Java社区也不断涌现出基于NIO的网络应用框架。在这其中,Jboss出品的Netty就是个中翘楚。Netty是个异步的事件驱动网络应用框架,具有高性能、高扩展性等特性。Netty提供了统一的底层协议接口,使得开发者从底层的网络协议(比如TCP/IP、UDP)中解脱出来。就使用来说,开发者只要参考 Netty提供的若干例子和它的指南文档,就可以放手开发基于Netty的服务端程序了。
在Java社区,最知名的开源Java NIO框架要属Mina和Netty,而且两者渊源颇多,对两者的比较自然不少。实际上,Netty的作者原来就是Mina作者之一,所以可以想到,Netty和Mina在设计理念上会有很多共同点。我对Mina没什么研究,但其作者介绍,Netty的设计对开发者有更友好的扩展性,并且性能方面要优于Mina,而Netty完善的文档也很吸引人。所以,如果你在寻找Java NIO框架,Netty是个很不错的选择。本文的内容就是围绕一个demo介绍使用Netty的点点滴滴。
SEDA介绍与分析
星期天, 二月 7th, 2010
SEDA(Staged Event-Driven Architecture)并不是很新的技术,但它总会在我阅读的资料里出现些许影子,所以就拿出一些时间看了一下与它相关的论文资料。SEDA的目标很远大,它要构建支持大并发的互联网系统,并克服多线程及事件驱动的服务器端模型的缺点。但SEDA来源于学术界,并且这个东西还是有些复杂了,所以至今工业级的应用不是很多。它的官网是http://www.eecs.harvard.edu/~mdw/proj/seda/,上面的一些论文还是很不错的,值得拜读。