Mina与Spring整合

本文将说明mina如何与Spring整合使用。原文请看http://mina.apache.org/integrating-with-spring.html

 

 

应用程序结构

我们将要构造一个如下内容的工程

  • 一个Handler
  • 两个Filter - Logging Filter 和 ProtocolCodec Filter
  • NioDatagram Socket


初始化代码

让我们先看看代码,我们省略了部分代码

 

Java代码
  1. public void initialize() throws IOException {  
  2.   
  3.     // 创建一个 Acceptor  
  4.     NioDatagramAcceptor acceptor = new NioDatagramAcceptor();  
  5.   
  6.     // 加入 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.     // 创建 Session Configuration  
  15.     DatagramSessionConfig dcfg = acceptor.getSessionConfig();  
  16.         dcfg.setReuseAddress(true);  
  17.         logger.debug("Starting Server......");  
  18.         // 绑定并监听  
  19.         acceptor.bind(new InetSocketAddress(DEFAULT_PORT));  
  20.         logger.debug("Server listening on "+DEFAULT_PORT);  
  21. }  
public void initialize() throws IOException {// 创建一个 AcceptorNioDatagramAcceptor acceptor = new NioDatagramAcceptor();// 加入 Handleracceptor.setHandler(new ServerHandler());acceptor.getFilterChain().addLast("logging",new LoggingFilter());acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new SNMPCodecFactory()));// 创建 Session ConfigurationDatagramSessionConfig dcfg = acceptor.getSessionConfig();        dcfg.setReuseAddress(true);        logger.debug("Starting Server......");        // 绑定并监听        acceptor.bind(new InetSocketAddress(DEFAULT_PORT));        logger.debug("Server listening on "+DEFAULT_PORT);}

 

整合处理

与Spring整合我们需要以下步骤

  • 设置IO handler
  • 创建Filter并加入chain中
  • 创建并设置Socket


注意:最新版本的Mina并不像早起版本一样包含Spring连接的包。 The package is now named Integration Beans, to make the implementation work for all DI frameworks.


让我们看看Spring的配置文件。请注意观察我从配置文件中摘取的部分


这个例子源于mina发行版中的Chat example ,请参考例子中的XML文件。


让我们在Spring的上下文(Context)中设置IO Handler

 

Xml代码
  1. <bean id="trapHandler" class="com.ashishpaliwal.udp.mina.server.ServerHandler" />  
  <bean id="trapHandler" class="com.ashishpaliwal.udp.mina.server.ServerHandler" />

 让我们创建Filter Chain

 

Xml代码
  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.   <!-- 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>  
<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" />  <!-- 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>

 在这里我们创建了一个Filter实例。在ProtocolCodec factory中我们使用了构造器注入,在后面是loggingFilter。我们定义完成了将要使用的Filter,然后我们接着定义执行这些Filter的Filter Chain,定义一个ID为“FilterChainBuidler”的Bean,然后将Filter注入其中。我们即将完成我们的整合,现在只需要创建一个Socket并绑定它。

 

让我们完成最后一部分

 

Xml代码
  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. <!-- IoAcceptor 绑定在 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>  
<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><!-- IoAcceptor 绑定在 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>

现在我们创建一个ioAcceptor并设置IO handler 和 Filter Chain。在Spring里写一个函数来读取配置文件。

 

Java代码
  1. public void initializeViaSpring() throws Exception {  
  2.     new ClassPathXmlApplicationContext("trapReceiverContext.xml");  
  3. }  
public void initializeViaSpring() throws Exception {    new ClassPathXmlApplicationContext("trapReceiverContext.xml");}

 

我们只需要写一个main函数来调用这个方法就可以初始化mina了。

转载于:https://www.cnblogs.com/tqsummer/archive/2010/09/01/1815105.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值