List of usage examples for org.apache.mina.api IoFilter IoFilter
IoFilter
From source file:BuggyServer.java
License:Apache License
public static void main(String[] args) throws Exception { PropertyConfigurator.configure("log4j.properties"); LOG.info("starting echo server"); OneThreadSelectorStrategy strategy = new OneThreadSelectorStrategy( new SelectorFactory(NioSelectorProcessor.class)); NioTcpServer acceptor = new NioTcpServer(strategy); // create the fitler chain for this service acceptor.setFilters(new LoggingFilter("LoggingFilter1"), new IoFilter() { @Override/*from ww w.j a v a2s .co m*/ public void sessionOpened(IoSession session) { LOG.info("session {} open", session); } @Override public void sessionIdle(IoSession session, IdleStatus status) { LOG.info("session {} idle", session); } @Override public void sessionCreated(IoSession session) { LOG.info("session {} created", session); } @Override public void sessionClosed(IoSession session) { LOG.info("session {} open", session); } @Override public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) { // we just push the message in the chain controller.callWriteNextFilter(session, message); } @Override public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) { if (message instanceof ByteBuffer) { LOG.info("echoing"); session.write(message); } } }); acceptor.addListener(new IoServiceListener() { @Override public void sessionDestroyed(IoSession session) { LOG.info("session destroyed {}", session); } @Override public void sessionCreated(IoSession session) { LOG.info("session created {}", session); String welcomeStr = "welcome\n"; ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length()); bf.put(welcomeStr.getBytes()); bf.flip(); session.write(bf); } @Override public void serviceInactivated(IoService service) { LOG.info("service deactivated {}", service); } @Override public void serviceActivated(IoService service) { LOG.info("service activated {}", service); } }); startOfAll = System.currentTimeMillis(); List<BindingThread> threads = new ArrayList<BindingThread>(); for (int i = 9999; i < totalPorts + 9999; i++) { BindingThread bindingThread = new BindingThread(acceptor, i); threads.add(bindingThread); bindingThread.start(); } Thread.sleep(500); acceptor.unbindAll();// the iterator in it must be in the synchronized block, but it is not in the sync block, so the concurrentModificationException happens. // Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 // Exception in thread "main" java.util.ConcurrentModificationException // at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894) // at java.util.HashMap$KeyIterator.next(HashMap.java:928) // at org.apache.mina.transport.tcp.nio.NioTcpServer.unbindAll(NioTcpServer.java:127) // at org.apache.mina.examples.echoserver.BuggyServer.main(BuggyServer.java:143) // join does not work for the binding thread as they wait for the incoming requests. // try { // SocketAddress address = new InetSocketAddress(9999); // acceptor.bind(address); // LOG.debug("Running the server for 25 sec"); // Thread.sleep(25000); // LOG.debug("Unbinding the TCP port"); // acceptor.unbind(address); // } catch (IOException e) { // LOG.error("I/O exception", e); // } catch (InterruptedException e) { // LOG.error("Interrupted exception", e); // } }
From source file:performance.BuggyServer.java
License:Apache License
private static void setFiltersListeners(NioTcpServer acceptor) { // create the fitler chain for this service acceptor.setFilters(new LoggingFilter("LoggingFilter1"), new IoFilter() { @Override/* www .jav a 2 s.c om*/ public void sessionOpened(IoSession session) { LOG.info("session {} open", session); } @Override public void sessionIdle(IoSession session, IdleStatus status) { LOG.info("session {} idle", session); } @Override public void sessionCreated(IoSession session) { LOG.info("session {} created", session); } @Override public void sessionClosed(IoSession session) { LOG.info("session {} open", session); } @Override public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) { // we just push the message in the chain controller.callWriteNextFilter(session, message); } @Override public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) { if (message instanceof ByteBuffer) { LOG.info("echoing"); session.write(message); } } }); acceptor.addListener(new IoServiceListener() { @Override public void sessionDestroyed(IoSession session) { LOG.info("session destroyed {}", session); } @Override public void sessionCreated(IoSession session) { LOG.info("session created {}", session); String welcomeStr = "welcome\n"; ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length()); bf.put(welcomeStr.getBytes()); bf.flip(); session.write(bf); } @Override public void serviceInactivated(IoService service) { LOG.info("service deactivated {}", service); } @Override public void serviceActivated(IoService service) { LOG.info("service activated {}", service); } }); }