一个标准的MINA应用包含:
1.一个处理器;
2.两个过滤器-Logging Filter and a ProtocolCodec Filter
3.一个异步的Socket NioSocketAcceptor
初始化代码如下:
public void initialize() throws IOException {
// 创建一个Acceptor
NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
// 添加一个处理器
acceptor.setHandler(new ServerHandler());
// 添加日志过滤器和消息编码解码器
acceptor.getFilterChain().addLast("logging",
new LoggingFilter());
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new SNMPCodecFactory()));
// 获取session配置
DatagramSessionConfig dcfg = acceptor.getSessionConfig();
dcfg.setReuseAddress(true);
logger.debug("Starting Server......");
// 绑定端口
acceptor.bind(new InetSocketAddress(DEFAULT_PORT));
logger.debug("Server listening on "+DEFAULT_PORT);
}
按照如下步骤与spring进行整合:
1.设置一个处理器
2.创建过滤器并加到过滤器链
3.创建一个socket并设置sockot的参数
注意:在最新版本的MINA中没有针对spring的包,这个包现在被命名为 Integration Beans,使它的实现能够工作于所有的DI 框架。
编辑Spring xml文件:
1.设置处理器
<span style="font-family:Microsoft YaHei;font-size:18px;"><bean id="trapHandler" class="com.ashishpaliwal.udp.mina.server.ServerHandler"></span>
<span style="font-family:Microsoft YaHei;font-size:18px;"><bean id="snmpCodecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<bean class="com.ashishpaliwal.udp.mina.snmp.SNMPCodecFactory" />
</constructor-arg>
</bean>
<bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />
<!-- The filter chain. -->
<bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
<property name="filters">
<map>
<entry key="loggingFilter" value-ref="loggingFilter"/>
<entry key="codecFilter" value-ref="snmpCodecFilter"/>
</map>
</property>
</bean></span>
这里创建了IOFilter实例。ProtocolCodecfactory使用了构造器注入。我们创建好了过滤器,再创建过滤器链并将过滤器加到其中。
3.创建socket
<span style="font-family:Microsoft YaHei;font-size:18px;"><bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.net.SocketAddress">
<bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>
<!-- The IoAcceptor which binds to port 161 -->
<bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioDatagramAcceptor" init-method="bind" destroy-method="unbind">
<property name="defaultLocalAddress" value=":161" />
<property name="handler" ref="trapHandler" />
<property name="filterChainBuilder" ref="filterChainBuilder" />
</bean></span>