Apache mina2 用户指南(十七)spring集成

本文演示了 MINA 应用和 Spring 的整合。我在我的博客中写了这篇文章,后来也把它放在了这里,这里是这篇信息本来就该归类的地方。你可以在 集成 Spring 到 Apache MINA  找到原始文本。
         应用架构
        一个标准的 MINA 应用应该具有以下构造:
  • 一个 Handler (处理器)
  • 两个 Filter (过滤器) - Logging 过滤器和 ProtocolCodec 过滤器
  • Nio Datagram Socket
         初始化代码
        我们先看一下代码。简单起见我们忽略掉了负责粘合的相关代码。
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public void initialize() throws IOException {  
  2.   
  3.     // Create an Acceptor  
  4.     NioDatagramAcceptor acceptor = new NioDatagramAcceptor();  
  5.   
  6.     // Add Handler  
  7.     acceptor.setHandler(new ServerHandler());  
  8.   
  9.     acceptor.getFilterChain().addLast("logging",  
  10.                 new LoggingFilter());  
  11.     acceptor.getFilterChain().addLast("codec",  
  12.                 new ProtocolCodecFilter(new SNMPCodecFactory()));  
  13.   
  14.     // Create Session Configuration  
  15.     DatagramSessionConfig dcfg = acceptor.getSessionConfig();  
  16.         dcfg.setReuseAddress(true);  
  17.         logger.debug("Starting Server......");  
  18.         // Bind and be ready to listen  
  19.         acceptor.bind(new InetSocketAddress(DEFAULT_PORT));  
  20.         logger.debug("Server listening on "+DEFAULT_PORT);  
  21. }  

         集成过程
        要集成 Spring,我们需要做以下事情:
  • 设置 IO 处理器
  • 创建过滤器并依次添加到过滤器链
  • 创建套接字并设置套接字参数
        注意:最新的 MINA 发布版本没有像之前的版本那样具有针对 Spring 的包。该包现在命名为集成 Bean,以使得实现能够支持所有 DI 框架。
        看一下 Spring xml 文件。请注意我已经将 xml 中的通用部分移除,仅仅放进了集成需要的部分。本文示例是由 MINA 的应用  聊天示例  衍生而来。请参阅聊天示例的 xml。
        现在让我们把事情放在一起。
        在 Spring context 文件中设置 IO 处理器:
[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <!-- The IoHandler implementation -->  
  2. <bean id="trapHandler" class="com.ashishpaliwal.udp.mina.server.ServerHandler">  

        创建过滤器链:
[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <bean id="snmpCodecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">  
  2.   <constructor-arg>  
  3.     <bean class="com.ashishpaliwal.udp.mina.snmp.SNMPCodecFactory" />  
  4.   </constructor-arg>  
  5. </bean>  
  6.   
  7. <bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />  
  8.   
  9. <!-- The filter chain. -->  
  10. <bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">  
  11.   <property name="filters">  
  12.     <map>  
  13.       <entry key="loggingFilter" value-ref="loggingFilter"/>  
  14.       <entry key="codecFilter" value-ref="snmpCodecFilter"/>  
  15.     </map>  
  16.   </property>  
  17. </bean>  

        这里,创建了我们的 IoFilter 实例。参考 ProtocolCodec 工厂,我们使用了构造子注入。Logging 过滤器的创建则直截了当。定义了要使用的过滤器的 bean 之后,现在我们来创建用于实现的过滤器链。我们定义了一个 id 为 "FilterChainBuidler" 的 bean 并将定义好的过滤器添加给它。差不多了,现在要做的只是创建套接字和调用绑定了。
        来完成最后的部分,创建套接字并完成过滤器链:
[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
  2.     <property name="customEditors">  
  3.       <map>  
  4.         <entry key="java.net.SocketAddress">  
  5.           <bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />  
  6.         </entry>  
  7.       </map>  
  8.     </property>  
  9. </bean>  
  10.   
  11. <!-- The IoAcceptor which binds to port 161 -->  
  12. <bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioDatagramAcceptor" init-method="bind" destroy-method="unbind">  
  13.   <property name="defaultLocalAddress" value=":161" />  
  14.   <property name="handler" ref="trapHandler" />  
  15.   <property name="filterChainBuilder" ref="filterChainBuilder" />  
  16. </bean>  

        现在我们创建了我们的 ioAcceptor,设置了 IO 处理器和过滤器链。现在我们就可以写一个方法来使用 Spring 读取这个文件并启动我们的应用了。代码如下:
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public void initializeViaSpring() throws Exception {  
  2.     new ClassPathXmlApplicationContext("trapReceiverContext.xml");  
  3. }  

原文链接: http://mina.apache.org/mina-project/userguide/ch17-spring-integration/ch17-spring-integration.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值