一、applicationContent.xml
<?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">
<bean id="myHandler" class="com.nfhn.mina.ServerHandle"></bean>
<bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter"></bean>
<bean id="codecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<!-- <bean class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" /> -->
<bean class="com.nfhn.mina.ServerCodeFactory"></bean>
</constructor-arg>
</bean>
<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="codecFilter"/>
</map>
</property>
</bean>
<bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioDatagramAcceptor" init-method="bind" destroy-method="unbind">
<property name="defaultLocalAddress" value=":8888" />
<property name="handler" ref="myHandler" />
<property name="filterChainBuilder" ref="filterChainBuilder" />
</bean>
<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>
</beans>
二、业务处理类:
package com.nfhn.mina;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.nfhn.dto.TestDTO;
import com.nfhn.service.TestService;
import com.nfhn.util.XMLParser;
public class ServerHandle extends IoHandlerAdapter {
private static Logger log = LoggerFactory.getLogger(ServerHandle.class);
@Autowired
private TestService testService;
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
try {
String msg = (String)message;
log.info("mina recieve message: " + msg);
TestDTO dto = (TestDTO)XMLParser.unmarshal(msg, TestDTO.class);
log.info(dto.toString());
testService.insert(dto);
session.write(System.currentTimeMillis());
} catch(Exception e) {
e.printStackTrace();
throw e;
}
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
System.out.println("error");
super.exceptionCaught(session, cause);
}
}
三、客户端:
package com.nfhn.action;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.log4j.Logger;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.DatagramConnector;
import org.apache.mina.transport.socket.nio.NioDatagramConnector;
import com.nfhn.dto.TestDTO;
import com.nfhn.util.XMLParser;
public class ClientNIO extends IoHandlerAdapter{
private static Logger log = Logger.getLogger(ClientNIO.class);
private DatagramConnector connector;
private IoSession session;
private String hostname = "127.0.0.1";
private int port = 8888;
public ClientNIO() {
inti();
}
private void inti() {
log.info("client");
connector = new NioDatagramConnector();
connector.setHandler(this);
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
chain.addLast("logger", new LoggingFilter());
chain.addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"))));
IoFuture connFuture = connector.connect(new InetSocketAddress(hostname, port));
connFuture.addListener(new IoFutureListener() {
public void operationComplete(IoFuture future) {
ConnectFuture connFuture = (ConnectFuture) future;
if (connFuture.isConnected()) {
session = future.getSession();
try {
sendData();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
log.error("Not connected...exiting");
}
}
});
}
private void sendData() throws InterruptedException {
TestDTO dto = new TestDTO();
dto.setMessage("nfhn");
dto.setTimes(String.valueOf(System.currentTimeMillis()));
String str = XMLParser.marshal(dto, TestDTO.class);
session.write(str);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
log.info("client recieve message: " + message.toString());
Thread.sleep(10000);
sendData();
}
public static void main(String[] args) {
new ClientNIO();
}
}
四、依赖包:
<mina.version>2.0.0-M2</mina.version>
<mina.spring.version>1.1.7</mina.spring.version>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>${mina.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-integration-spring</artifactId>
<version>${mina.spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-integration-beans</artifactId>
<version>${mina.version}</version>
</dependency>