Problemas com Apache MINA

Salve galera,

A questao é a seguinte turma, preciso desenvolver um servidor onde recebera conexões de equipamentos embarcados. Não estou querendo usar sockets nativos para desenvolver, pesquisei na internet e achei o MINA da Apache.

Minha aplicacao recebe uma String de indentificacao do equipamento assim que o equipamento conecta no servidor.

Quando eu uso a linha abaixo o servidor nao chama o metodo public void messageReceived(IoSession session, Object message) da classe ServerHandler

acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

Quando comento a linha acima e rodo o meu servidor o metodo public void messageReceived(IoSession session, Object message) da classe ServerHandler é chamado normalmente, so que o paramatro “messagem” tenho que usar o classe IoBuffer para ler os dados, ate ai blza, mas eu preciso enviar comandos para o equipamento. quando eu faço assim:

 session.write("@");

Com essa linha acima, surge o seguinte erro:

Don't know how to handle message of type 'java.lang.String'.  Are you missing a protocol encoder?

Como que eu resolvo isso? Alguem ja trabalhou com o MINA? Tem algum outro filtro que eu possa usar no MINA para resolver esse problema de conexao com o meu equipamento?

Abaixo os meus fontes:

Classe ServerHandler

public class ServerHandler extends IoHandlerAdapter {

    @Override
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        System.out.println(cause.getMessage());
    }

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        StringBuilder sb = new StringBuilder();
        IoBuffer buffer = (IoBuffer) message;
        if (!buffer.hasRemaining()) {
            System.out.println("NO bytes to read keep waiting");
        }
        while (buffer.hasRemaining()) {
            sb.append((char) buffer.get());
        }
        System.out.println(sb.toString());
        session.write("@");
    }

    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println("IDLE " + session.getIdleCount(status));

    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("messageSent");
    }

    @Override
    public void sessionCreated(IoSession session) throws Exception {
        System.out.println("sessionCreated");
    }

    @Override
    public void sessionOpened(IoSession session) throws Exception {
        System.out.println("sessionOpened");
    }
}

Classe ServerMina

public class ServerMina {
    private static final int PORT = 8084;

    public static void main(String[] args) throws IOException {
        IoAcceptor acceptor = new NioSocketAcceptor();
        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        //acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter2(new TextLineCodecFactory2(Charset.forName("UTF-8"))));
        acceptor.setHandler(new SViasServerHandler());
        acceptor.getSessionConfig().setReadBufferSize(2048);
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 1);
        acceptor.getSessionConfig().setWriterIdleTime(60);
        acceptor.bind(new InetSocketAddress(PORT));
    }
}

Bom dia, já faz tempo mais quem tem o mesmo problema basta escrever dentro do IoBuffer e ao invés o “@” mandar o IoBuffer.

Abs