日期:2014-05-16 浏览次数:21298 次
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
	 default-lazy-init="false">
	
	<!--
		This makes it possible to specify java.net.SocketAddress values (e.g.
		:80 below) as Strings. They will be converted into
		java.net.InetSocketAddress objects by Spring.
	-->
	<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="java.net.SocketAddress">
					<bean class="org.apache.mina.integration.spring.InetSocketAddressEditor" />
				</entry>
			</map>
		</property>
	</bean>
	<!-- The IoHandler implementation -->
	<bean id="myHandler" class="com.mina.MyProtocolHandler">
		
	</bean>
	<bean id="filterChainBuilder"
		class="org.apache.mina.integration.spring.DefaultIoFilterChainBuilderFactoryBean">
		<property name="filters">
			<list>
				<bean class="org.apache.mina.filter.LoggingFilter" />
			</list>
		</property>
	</bean>
	<!--
		By default MINA uses an ExecutorThreadModel. This demonstrates how to
		use your own with some non default settings. The threadModel will be
		set on the SocketAcceptorConfig defined below. To configure a
		ExecutorFilter directly you will have to use the ThreadModel.MANUAL
		ThreadModel instead.
	-->
	<bean id="threadModel"
		class="org.apache.mina.integration.spring.ExecutorThreadModelFactoryBean">
		<property name="serviceName" value="MyMinaService" />
		<property name="executor">
			<bean
				class="org.apache.mina.integration.spring.ThreadPoolExecutorFactoryBean">
				<property name="corePoolSize" value="2" />
				<property name="maxPoolSize" value="30" />
				<property name="keepAliveSeconds" value="30" />
			</bean>
		</property>
	</bean>
	<bean id="ioAcceptor"
		class="org.apache.mina.integration.spring.IoAcceptorFactoryBean">
		<property name="target">
			<bean class="org.apache.mina.transport.socket.nio.SocketAcceptor" />
		</property>
		<property name="bindings">
			<list>
				<bean class="org.apache.mina.integration.spring.Binding">
					<property name="address" value=":8081" />
					<property name="handler" ref="myHandler" />
					<property name="serviceConfig">
						<bean class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
							<property name="filterChainBuilder" ref="filterChainBuilder" />
							<property name="reuseAddress" value="true" />
							<property name="threadModel" ref="threadModel" />
						</bean>
					</property>
				</bean>
			</list>
		</property>
	</bean>
</beans>
public class MyProtocolHandler extends IoHandlerAdapter {
	
	@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		if (message instanceof ByteBuffer) {
			ByteBuffer rb = (ByteBuffer) message;
			byte[] moMessage = new byte[rb.remaining()];
			rb.get(moMessage);
			Endpoint endpoint = new MinaEndpoint(session);
			endpoint.receive(moMessage);
		}
		super.messageReceived(session, message);
	}
}
public class MinaEndpoint implements Endpoint {
	
	private IoSession session;
	
	public MinaEndpoint(IoSession session) {