Apache MINAを使ってみよう - Apache MINAで簡易なサーバ作成
2009/03/05 17:59Update
Apache MINAはNIOベースのオープンソース・ネットワークアプリケーションフレームワークです。Apache MINAを利用すれば、高いパフォーマンスとスケーラブリティを持つネットワーク・アプリケーションを簡単に作成できます。本文はApache MINAを利用して、簡単なサーバサイドのアプリケーションを作成してみようと思います。
Apache MINAについて
――――――――――――――――――――――――
Apache MINA - ネットワークアプリケーションフレームワーク
――――――――――――――――――――――――
Apache MINAダウンロード 
今回は
Apache MINA 1.1.7 stable (Java 5+)
をダウンロードします。
Apache MINAを利用するのに、SLF4Jというログライブラリを別途ダウンロードする必要があります。
SLF4Jについて
――――――――――――――――――――――――
SLF4J - Log4jやLogbackなどのログライブラリ・ラッパー
――――――――――――――――――――――――
SLF4Jログ・ライブラリのダウンロード
ダウンロードしたそれぞれのファイルを解凍し、中にある
mina-core-x.y.z.jar
slf4j-api-x.y.z.jar
slf4j-simple-x.y.z.jar
3つのファイルをclasspathに通してください。
※x.y.zはそれぞれのバージョン番号になります。
※SLF4Jログシステムについて、今回はslf4j-simple-x.y.z.jarを利用します。
では、早速次のサンプルコードを見てみましょう。
TestApacheMinaMyServer.java
解説:
ソースの中にも書かれたように、Apache MINAを利用してサーバサイドのアプリケーション開発はすごく簡単です。
1)SocketAcceptorでIoAcceptor生成(サーバサイド)
IoAcceptor acceptor = new SocketAcceptor();
2)設定
IoAcceptorConfig config = new SocketAcceptorConfig();
..
3)ApacheMinaMyServer起動
acceptor.bind(new InetSocketAddress(PORT), new MyHandler(), config);
4)IoHandlerAdapterを継承したクラスを定義
このクラスは何らかのイベント(異常、新規接続、接続クローズ、メッセージなど)があった時呼び出されます。
実行
1)、このアプリケーションを実行します。
2)クライアントから接続します。
Apache MINA - ネットワークアプリケーションフレームワーク
SLF4J - Log4jやLogbackなどのログライブラリ・ラッパー
――――――――――――――――――――――――
Apache MINA - ネットワークアプリケーションフレームワーク
――――――――――――――――――――――――
Apache MINAダウンロード 
今回は
Apache MINA 1.1.7 stable (Java 5+)
をダウンロードします。
Apache MINAを利用するのに、SLF4Jというログライブラリを別途ダウンロードする必要があります。
SLF4Jについて
――――――――――――――――――――――――
SLF4J - Log4jやLogbackなどのログライブラリ・ラッパー
――――――――――――――――――――――――
SLF4Jログ・ライブラリのダウンロード
ダウンロードしたそれぞれのファイルを解凍し、中にある
mina-core-x.y.z.jar
slf4j-api-x.y.z.jar
slf4j-simple-x.y.z.jar
3つのファイルをclasspathに通してください。
※x.y.zはそれぞれのバージョン番号になります。
※SLF4Jログシステムについて、今回はslf4j-simple-x.y.z.jarを利用します。
では、早速次のサンプルコードを見てみましょう。
Apache MINAサンプル
TestApacheMinaMyServer.javaimport java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.common.*;
import org.apache.mina.transport.socket.nio.*;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
/**
* ApacheMina使ったみよう。サンプル
*/
public class TestApacheMinaMyServer {
private static final int PORT = 8080;
/**
*
*/
public static void main(String[] args) throws IOException {
//1)SocketAcceptorでIoAcceptor生成(サーバサイド)
IoAcceptor acceptor = new SocketAcceptor();
//2)設定
IoAcceptorConfig config = new SocketAcceptorConfig();
DefaultIoFilterChainBuilder chain = config.getFilterChain();
// テキスト・codec
chain.addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory()));
//3)ApacheMinaMyServer起動
acceptor.bind(new InetSocketAddress(PORT), new MyHandler(), config);
System.out.println("ApacheMinaServer started on port " + PORT);
}
}
/**
* 処理用Handlerクラス
*/
class MyHandler extends IoHandlerAdapter {
/**
* 異常があった場合呼び出される
*/
@Override
public void exceptionCaught(IoSession ssn, Throwable cause) {
cause.printStackTrace();
ssn.close();
}
/**
* セッションを開く時呼び出される
*/
@Override
public void sessionOpened(IoSession ssn) throws Exception {
System.out.println("session open for " + ssn.getRemoteAddress());
}
/**
* セッションを閉じる時呼び出される
*/
@Override
public void sessionClosed(IoSession ssn) throws Exception {
System.out.println("session closed from " + ssn.getRemoteAddress());
}
/**
* クライアントからのメッセージがあった時呼び出される
*/
public void messageReceived(IoSession ssn, Object msg) throws Exception {
String ip = ssn.getRemoteAddress().toString();
System.out.println("===> Message From " + ip + " : " + msg);
ssn.write("Hello " + msg);
}
}
解説:
ソースの中にも書かれたように、Apache MINAを利用してサーバサイドのアプリケーション開発はすごく簡単です。
1)SocketAcceptorでIoAcceptor生成(サーバサイド)
IoAcceptor acceptor = new SocketAcceptor();
2)設定
IoAcceptorConfig config = new SocketAcceptorConfig();
..
3)ApacheMinaMyServer起動
acceptor.bind(new InetSocketAddress(PORT), new MyHandler(), config);
4)IoHandlerAdapterを継承したクラスを定義
このクラスは何らかのイベント(異常、新規接続、接続クローズ、メッセージなど)があった時呼び出されます。
実行
1)、このアプリケーションを実行します。
javac TestApacheMinaMyServer.java
java TestApacheMinaMyServer
ApacheMinaServer started on port 8080
ポート8080に待っているよっというメッセージが出力しています。java TestApacheMinaMyServer
ApacheMinaServer started on port 8080
2)クライアントから接続します。
telnet localhost 8080
で8080ポートにtelnetし、適当なメッセージを入力してみると、コンソールに次のようなメッセージが表示されます。java TestApacheMinaMyServer
ApacheMinaServer started on port 8080
session open for /127.0.0.1:2679
===> Message From /127.0.0.1:2679 : hello
===> Message From /127.0.0.1:2679 : test
session closed from /127.0.0.1:2679
ApacheMinaServer started on port 8080
session open for /127.0.0.1:2679
===> Message From /127.0.0.1:2679 : hello
===> Message From /127.0.0.1:2679 : test
session closed from /127.0.0.1:2679
参考資料
Apache MINA - ネットワークアプリケーションフレームワーク
SLF4J - Log4jやLogbackなどのログライブラリ・ラッパー
Sponsored Link
Comments
- Relative Articles
- Java OutOfMemoryError対策 - (2009/04/14 16:23)
- Jakarta Commons NETによるFTP処理(FTPClient) - (2009/01/28 19:40)
- DTDファイル処理 - DTDParser - Java DTD パーサー - (2009/01/30 17:48)
- Apache Commons EmailによるEメール送信 - (2009/02/06 17:51)
- Apache Commons Digesterを使おう - サンプルから学ぶXML文書の読み込み - (2009/02/09 17:09)
- テンプレートエンジンApache Velocityを使おう - VelocityでDAOの自動生成ツールを作成 - (2009/02/10 11:12)
- Jakarta Commons によるHTTP処理(HttpClient) - (2009/02/17 15:14)
- JavaでWeb HTTPサーバを実装してみる - (2009/02/28 15:09)
- 全文検索システムApache Luceneを使ってみる - (2009/04/11 13:45)
- PSD-parser - JavaでPSDファイルを抽出するためのライブラリ - (2009/04/21 00:09)