Apache Mina 文檔翻譯 - 第十七章 - Spring整合

[size=x-large]第十七章 - Spring整合[/size]

本章中演示瞭如何把MINA應用程序和Spring框架整合在一起。 文章的內容來源於http://www.ashishpaliwal.com/blog/2008/11/integrating-apache-mina-with-spring/

[size=medium]應用程序的結構[/size]

我們創建一個標準結果的MINA應用程序:

一個IoHandler
兩個Filter - LoggingFilter 和 ProtocolCodecFilter
基於UDP的NioDatagram Socket

[size=medium]初始化代碼[/size]

我們先看一下代碼,爲了簡單我們把多餘的代碼去掉了


public void initialize() throws IOException {

// 創建一個Acceptor
NioDatagramAcceptor acceptor = new NioDatagramAcceptor();

// 添加一個IoHandler
acceptor.setHandler(new ServerHandler());

acceptor.getFilterChain().addLast("logging",
new LoggingFilter());
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new SNMPCodecFactory()));

// 創建Session Configuration
DatagramSessionConfig dcfg = acceptor.getSessionConfig();
dcfg.setReuseAddress(true);
logger.debug("Starting Server......");
// 綁定端口開始監聽
acceptor.bind(new InetSocketAddress(DEFAULT_PORT));
logger.debug("Server listening on "+DEFAULT_PORT);
}


[size=medium]整合[/size]

要整合到Spring環境裏,要做下面的事情:

設置IoHandler
創建一個Filter並加入到過濾器鏈
創建Socket並設定Socket參數

注意:最新的MINA中已經不包含面向Spring整合的專用包。現在的包本身都是對整合非常友好的,也就是可以很容易的整合到所有的DI框架。

我們看一下Spring的XML配置文件。我已經移除了XML中通用的部分,只留下了跟本章相關的內容。下面的例子來至於MINA發佈包中的Chat的例子。可以在那裏找到完成的內容。

現在把東西放到一起。

我們來看一下Spring的環境配置文件的IoHandler


<!-- IoHandler的實現 -->
<bean id="trapHandler" class="com.ashishpaliwal.udp.mina.server.ServerHandler">

下面創建一個過濾器實例和過濾器鏈

<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" />

<!-- 過濾器鏈 -->
<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>


在這裏我們創建了IoFilter的實例。在ProtocolCodecFilter中我們通過構造函數注入的方式把ProtocolCodec工廠傳遞給ProtocolCodecFilter。 LoggingFilter的創建非常直接。當我們定義好所有的過濾器實例後,開始創建過濾器鏈。我們定義了一個名爲filterChainBuilder的bean,並把過濾器添加到裏面。現在基本上都準備完畢,可以創建Socket並綁定監聽端口。

下面是創建Socket相關的代碼:


<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>

<!-- 定義IoAccepter,綁定到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,設置IoHandler和過濾器鏈。現在我們做一個函數來啓動Spring環境,讀取配置文件,進而啓動我們的應用程序。代碼如下:


public void initializeViaSpring() throws Exception {
new ClassPathXmlApplicationContext("trapReceiverContext.xml");
}
發佈了15 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章