# Apache Mina Problem



## Kr0e (21. Feb 2009)

Hallo,
ich wollte mich mal etwas mit Mina beschäftigen habe jedoch ein Problem:
Man benötigt ja slf4j... Das ist ein Logging API. Habs mir runtergeladen und da ich nicht wusste welche Libs ich brauche.. einfach mal alle eingebunden. Problem:
Stackoverflow, dabei habe ich ein simples Tutorial von der Minaseite ausprobiert:

public class MinaTimeServer {

    private static final int PORT = 9123;

    public static void main(String[] args) throws IOException {
        ByteBuffer.setUseDirectBuffers(false);
        ByteBuffer.setAllocator(new SimpleByteBufferAllocator());

        IoAcceptor acceptor = new SocketAcceptor();

        SocketAcceptorConfig cfg = new SocketAcceptorConfig();
        cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
        cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

        acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg);
        System.out.println("MINA Time server started.");
    }
}

public class TimeServerHandler extends IoHandlerAdapter {
	public void exceptionCaught(IoSession session, Throwable t) throws Exception {
		t.printStackTrace();
		session.close();
	}

	public void messageReceived(IoSession session, Object msg) throws Exception {
		String str = msg.toString();
		if( str.trim().equalsIgnoreCase("quit") ) {
			session.close();
			return;
		}

		Date date = new Date();
		session.write( date.toString() );
		System.out.println("Message written...");
	}

	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("Session created...");

		if( session.getTransportType() == TransportType.SOCKET )
			((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 );

        session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );
	}
}

Dieser Code sollte doch ansich funktionieren, vorallem da es ja von der offiziellen Seite ist.
Ich habe schon viel von Mina gehört und dachte ansich es wäre gut, aber ich muss sagen, dass die Konfiguration nicht unbedingt einfach ist. Vorallem weil ich doch evt. garkeinen Log will ?! Also vlt. gibt es ja jemand der mir da mal helfen kann...

Gruß Chris

Hier ist die Fehlermeldung:

Exception in thread "main" java.lang.StackOverflowError
	at java.util.HashMap.get(Unknown Source)
	at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:67)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:209)
	at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:289)
	at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:69)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:209)
	at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:289)
	at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:69)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:209)

Dieser Fehler wiederholt sich unendlich^^ Deshalb der Stackoverflow... Das scheint sich iwie rekursiv immerwieder zu wiederholen...


----------



## tuxedo (23. Feb 2009)

Ohne auch nur eine Zeile gelesen zu haben:

Verwende doch bitte Code-Tags ... Das ist ja ein graus.. alles in der gleichen Farbe und Schriftart. Stell dir vor deine IDE würde das so machen...

*So, jetzt mal den eigentlichen Beitrag lesen* --> brb

So, gelesen. Ich denke dein Problem liegt darin, dass du einfach _alles_ in den Classpath getan hast.

SLF4J ist ein Logging-Wrapper der auf bestehende Logger aufbaut und dir, egal welchen Logger du letztendlich benutzt/drunter schraubst, immer das gleiche Log-Interface anbietet.

So. Wenn du jetzt mehrere/zu viele in den Classpath steckst, wird vermutlich SLF4J einfach alles benutzen. Und das könnte zu viel des guten sein.

Wenn du bisher kein besonderes Logging benutzt hast, schlage ich vor du lässt nur folgendes bzgl. MINA und Logging im Classpath:

slf4j-api-<latest_version>.jar
slf4j-jdk-<latest_version>.jar
mina-core-<latest_version>.jar

Dann sollte es auch klappen. 

- Alex


----------



## maki (23. Feb 2009)

> Habs mir runtergeladen und da ich nicht wusste welche Libs ich brauche.. einfach mal alle eingebunden.


Schlechte Idee.

Nimm die commons-logging-api, lass die Implementierung weg.



> Wer C++ kann, kann auch Java


Quatsch.


----------

