Apache MINA 从1.x到2.x的一些改变

在Apache MINA 2.x中提供了新的API,并且有一部分不能向前兼容,这主要是一些处理复杂的部分,这里只介绍一下不兼容的内容,因为大部分还是兼容的。

1 ThreadModel已经被移除

ThreadModel最初是为了简化应用预定义的线程模型到IoService的处理的。然而,配置线程模型因为简单而引入很多构造来,这样其产生的混乱多于其易用性了,所以移除。

2 IoService配置简化

在1.x中,IoService以及其子接口(如IoAcceptor和IoConnector)有很多自己的配置方法,基本上,配置一个服务有如下两种方式:

用明确的bind()或connect()呼叫来指定一个IoServiceConfig。

SocketAcceptor acceptor = new SocketAcceptor();
SocketAcceptorConfig myServiceConfig = new SocketAcceptorConfig();
myServiceConfig.setReuseAddress(true);
acceptor.bind(myHandler, myServiceConfig);

在没有指定IoServiceConfig时,用IoService.defaultConfig属性。

SocketAcceptor acceptor = new SocketAcceptor();
acceptor.getDefaultConfig().setReuseAddress(true);
acceptor.bind(new InetSocketAddress(8080), myHandler);

配置一个IoFilterChain会带来令人头痛的问题,在IoService中,除了有一个IoFilterChainBuilder在一个IoServiceConfig中外,还有一个附加的全局IoFilterChainBuilder。这就意味着配置一个IoFilterChain会有两个IoFilterChinaBuilder被使用。大部分用户配置IoFilterChain只使用全局的IoFilterChinaBuilder并且觉得已经足够。

IoAcceptor acceptor = new SocketAcceptor();
acceptor.getFilterChain().addLast("myFilter1", new MyFisrtFilter());
acceptor.getDefaultConfig().getFilterChain().addLast("myFilter2", new MySecondFilter());
acceptor.bind(new InetSocketAddress(8080), myHandler); // Which filter will be the first?

MINA 2.0 简化了API,提供更容易的方法,请与下面的代码相比较:

SocketAcceptor acceptor = new SocketAcceptor();
acceptor.setReuseAddress(true);
acceptor.getFilterChain().addLast("myFilter1", new MyFirstFilter());
acceptor.getFilterChain().addLast("myFilter2", new MySecondFilter());
acceptor.getSessionConfig().setTcpNoDelay(true);
acceptor.setLocalAddress(new InetSocketAddress(8080));
acceptor.setHandler(myHandler);
acceptor.bind();
// 新的API 限制一个Acceptor只有一个绑定,下面的语法会抛出IOException.
acceptor.bind();

这里你可能注意到其与Spring框架整合也变得容易了。

3 ByteBuffer池被移聊,堆缓冲成为缺省的缓冲类型

ByteBuffer一直是MINA宣传的一个东西,不过最近测试中发现,在很多现代的JVM中,其性能不如堆缓冲,另外,当配置的缓冲不够时会出现意外的OutOfMemoryError。为了提高性能以及稳定性,MINA开发组将缺省的缓冲改为"堆",因为没有池了,所以,ByteBuffer以及acquire()和release()也被移除。

参考文档:

Apache MINA Changes Between 2.x and 1.x http://mina.apache.org/changes-between-2x-and-1x.html

Added by Trustin Lee, last edited by Trustin Lee on Apr 09, 2007

你可能感兴趣的:(Apache MINA 从1.x到2.x的一些改变)