1. 程式人生 > >spring 整合 mina入門

spring 整合 mina入門

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


相關推薦

spring 整合 mina入門

一、applicationContent.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmln

spring整合WebService入門詳解

前言 webservice這個不知道大家首次接觸的時候是怎麼理解的,反正我記得我當時第一次接觸這個東西的時候以為又是一個XX框架,覺得還挺高大上。然而這一切在之後我使用過後才發現這些全都是YY。 那麼webservice到底是什麼呢,根據我自己的理解:簡單來說就像是一個公開

Spring Boot Dubbo 整合入門理解

Spring Boot Dubbo 整合和入門理解    1、搭建Dubbo 框架需要用到幾個元件來看一下元件理解以下dubbo 的整個過程 這樣畫大家應該可以看懂吧,下面就來介紹以下各個模組的安裝和使用。 2、zookeeper   

Spring Boot 初級入門教程(十八) —— 整合 MyBatis 另外一種開發方式

在前面兩篇文章《Spring Boot 初級入門教程(十五) —— 整合 MyBatis》和《Spring Boot 初級入門教程(十七) —— 通過 Oracle 資料庫測試已整合 MyBatis(附原始碼)》中,介紹瞭如何在 SpringBoot 中整合 MyBatis 以及通過 MySQL

Spring Boot 初級入門教程(十七) —— 通過 Oracle 資料庫測試已整合 MyBatis(附原始碼)

在文章《Spring Boot 初級入門教程(十五) —— 整合 MyBatis》中,已經對 MyBatis 進行了整合,只是當時是連 MySQL 資料庫進行的測試。這一篇簡單通過 Oracle 資料庫進行測試,確保整合的 MyBatis 在連線 Oracle 資料庫時也是有效的。 一、新增

Spring Boot 初級入門教程(十五) —— 整合 MyBatis

基於上篇文章,這篇主要說下如何整合 MyBatis,這樣測試時也不用在像 JdbcTemplate 那樣在 java 程式碼中寫 sql 語句了。 一、新增 MyBatis 依賴包 在 pom 檔案中,新增支援 MyBatis 的依賴包,如下: <!-- myba

Spring+SpringMVC+MyBatis入門實踐(4)Spring + MyBatis整合

本過程基於Mybatis入門進行, 所以在開始之前希望你建庫,表結構,Mybatis的常用用法都已經熟練了。 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http

WebService入門 - CXF與Spring整合 (maven專案)

可參考CXF官網-使用Spring編寫服務文件:http://cxf.apache.org/docs/writing-a-service-with-spring.html 1.新增依賴 <!-- spring與cxf 整合webservice 所需 -->

Spring-mybaits-mina整合,啟動多埠監聽

Spring-mybaits-mina三大框架的整合,mina可以使用Spring的資料庫資料庫連線池,無需額外定義mybaits連線池。 可以自定義監聽多埠,埠資料可以從資料庫中讀取 不想看部落格的話,專案完整下載地址:http://download.csdn.net/d

JAVAWEB開發之Spring詳解之——Spring入門以及IOC容器裝配Bean(xml和註解的方式)、Spring整合web開發、整合Junit4測試

public class BeanFactory{    public UserService getUserService(){         // 反射+配置檔案        return Class.forName(類名).newInStance();     } } xml、pro

spring整合mybatis(入門級簡單教程4)--掃描mapper類

引子:這裡,mapper類是指定義了資料庫操作方法的介面。如前面我們講到的UserMapper、ManagerMapper。為了讓spring容器知道它們的存在和作用,在前面我們在applicationContext.xml檔案中採用很麻煩的方式配置了它們。現在,讓我們來改進這點。1、下面是我們前面的配置方式

spring-boot整合graphql入門教程

本文介紹一個spring-boot + graphql, 是一個 graphql java 入門專案 graphql 到底是什麼     graphql 是一種 API 查詢語言, 用於伺服器端執行按已定義型別系統的查詢. GraphQL 不與任何特定的資料庫或儲存引擎進行繫結, 而是由您的程式碼

apache mina 學習(十四)-----與spring整合

mina與spring整合的主要問題就是mina中一些bean的配置需要spring的ioc,我們首先看一個簡單的服務端程式碼: public void initialize() throws IOException { // Create an Acceptor N

MyBatis快速入門(四) MyBatis和Spring整合

匯入依賴包 前面介紹了MyBatis的相關知識,現在來介紹一下如何和Spring進行整合。MyBatis和Spring的整合工作是由MyBatis團隊完成的。所以我們首先要先引入MyBatis和Spring的整合依賴包。這裡我用的是Gradle,如果使用其他構

Shiro入門-shiro與spring整合

引入jar <!-- shiro核心jar --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shi

Spring Boot從入門到實戰:整合Web專案常用功能

在Web應用開發過程中,一般都涵蓋一些常用功能的實現,如資料庫訪問、異常處理、訊息佇列、快取服務、OSS服務,以及介面日誌配置,介面文件生成等。如果每個專案都來一套,則既費力又難以維護。可以通過Spring Boot的Starter來將這些常用功能進行整合與集中維護,以達到開箱即用的目的。 專案基於Spri

Spring Boot從入門到實戰:整合通用Mapper簡化單表操作

資料庫訪問是web應用必不可少的部分。現今最常用的資料庫ORM框架有Hibernate與Mybatis,Hibernate貌似在傳統IT企業用的較多,而Mybatis則在網際網路企業應用較多。通用Mapper(https://github.com/abel533/Mapper) 是一個基於Mybat

Spring Boot從入門到實戰:整合AOPLog來記錄介面訪問日誌

日誌是一個Web專案中必不可少的部分,藉助它我們可以做許多事情,比如問題排查、訪問統計、監控告警等。一般通過引入slf4j的一些實現框架來做日誌功能,如log4j,logback,log4j2,其效能也是依次增強。在springboot中,預設使用的框架是logback。我們經常需要在方法開頭或結尾加日誌記錄

Spring(三):Spring整合Hibernate

ng- checkout wait 哪些 check driver eas package class 背景:   本文主要介紹使用spring-framework-4.3.8.RELEASE與hibernate-release-5.2.9.Final項目整合搭建

Spring整合Mybatis

man ati log ans nfa use oca utf-8 ann 1、DAO層: Mybatis的配置文件:sqlMapConfig.xml,不需要配置任何內容,但需要有文件頭,文件必須存在。 spring的配置文件:applicationContext-dao.