Author: elecharny Date: Sun Mar 8 19:24:58 2009 New Revision: 751504 URL: http://svn.apache.org/viewvc?rev=751504&view=rev Log: o Added Javadoc to the WriteRequestQueue interface o Rename CloseRequestAwareWriteRequestQueue to CloseAwareWriteQueue o Added some comments in code o Renamed finishSessionInitialization to initSession o Minor refactoring
Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java mina/trunk/core/src/main/java/org/apache/mina/core/write/WriteRequestQueue.java mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java Sun Mar 8 19:24:58 2009 @@ -252,7 +252,7 @@ session = newSession; } - finishSessionInitialization(session, null, null); + initSession(session, null, null); try { this.getFilterChainBuilder().buildFilterChain(session.getFilterChain()); Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java Sun Mar 8 19:24:58 2009 @@ -478,12 +478,15 @@ H handle = handles.next(); handles.remove(); + // Associates a new created connection to a processor, + // and get back a session T session = accept(processor, handle); + if (session == null) { break; } - finishSessionInitialization(session, null, null); + initSession(session, null, null); // add the session to the SocketIoProcessor session.getProcessor().add(session); Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoConnector.java Sun Mar 8 19:24:58 2009 @@ -324,7 +324,7 @@ if (connect(handle, remoteAddress)) { ConnectFuture future = new DefaultConnectFuture(); T session = newSession(processor, handle); - finishSessionInitialization(session, future, sessionInitializer); + initSession(session, future, sessionInitializer); // Forward the remaining process to the IoProcessor. session.getProcessor().add(session); success = true; @@ -432,7 +432,7 @@ try { if (finishConnect(handle)) { T session = newSession(processor, handle); - finishSessionInitialization(session, connectionRequest, connectionRequest.getSessionInitializer()); + initSession(session, connectionRequest, connectionRequest.getSessionInitializer()); // Forward the remaining process to the IoProcessor. session.getProcessor().add(session); nHandles ++; Modified: mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java Sun Mar 8 19:24:58 2009 @@ -437,12 +437,13 @@ // TODO Figure out make it work without causing a compiler error / warning. @SuppressWarnings("unchecked") - protected final void finishSessionInitialization(IoSession session, + protected final void initSession(IoSession session, IoFuture future, IoSessionInitializer sessionInitializer) { // Update lastIoTime if needed. if (stats.getLastReadTime() == 0) { ((IoServiceStatistics)stats).setLastReadTime(getActivationTime()); } + if (stats.getLastWriteTime() == 0) { ((IoServiceStatistics)stats).setLastWriteTime(getActivationTime()); } @@ -472,7 +473,7 @@ "Failed to initialize a writeRequestQueue.", e); } - if (future != null && future instanceof ConnectFuture) { + if ((future != null) && (future instanceof ConnectFuture)) { // DefaultIoFilterChain will notify the future. (We support ConnectFuture only for now). session.setAttribute(DefaultIoFilterChain.SESSION_CREATED_FUTURE, future); Modified: mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java Sun Mar 8 19:24:58 2009 @@ -553,11 +553,13 @@ } /** - * TODO Add method documentation + * Create a new close aware write queue, based on the given write queue. + * + * @param writeRequestQueue The write request queue */ public final void setWriteRequestQueue(WriteRequestQueue writeRequestQueue) { this.writeRequestQueue = - new CloseRequestAwareWriteRequestQueue(writeRequestQueue); + new CloseAwareWriteQueue(writeRequestQueue); } @@ -1244,38 +1246,61 @@ /** - * TODO Add method documentation. Name is ridiculously too long. + * A queue which handles the CLOSE request. + * + * TODO : Check that when closing a session, all the pending + * requests are correctly sent. */ - private class CloseRequestAwareWriteRequestQueue implements WriteRequestQueue { + private class CloseAwareWriteQueue implements WriteRequestQueue { private final WriteRequestQueue q; - public CloseRequestAwareWriteRequestQueue(WriteRequestQueue q) { + /** + * {...@inheritdoc} + */ + public CloseAwareWriteQueue(WriteRequestQueue q) { this.q = q; } + /** + * {...@inheritdoc} + */ public synchronized WriteRequest poll(IoSession session) { WriteRequest answer = q.poll(session); + if (answer == CLOSE_REQUEST) { AbstractIoSession.this.close(); dispose(session); answer = null; } + return answer; } + /** + * {...@inheritdoc} + */ public void offer(IoSession session, WriteRequest e) { q.offer(session, e); } + /** + * {...@inheritdoc} + */ public boolean isEmpty(IoSession session) { return q.isEmpty(session); } + /** + * {...@inheritdoc} + */ public void clear(IoSession session) { q.clear(session); } + /** + * {...@inheritdoc} + */ public void dispose(IoSession session) { q.dispose(session); } Modified: mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java Sun Mar 8 19:24:58 2009 @@ -159,24 +159,39 @@ } private static class DefaultWriteRequestQueue implements WriteRequestQueue { - + /** A queue to store incoming write requests */ private final Queue<WriteRequest> q = new CircularQueue<WriteRequest>(16); + /** + * {...@inheritdoc} + */ public void dispose(IoSession session) { } + /** + * {...@inheritdoc} + */ public void clear(IoSession session) { q.clear(); } + /** + * {...@inheritdoc} + */ public synchronized boolean isEmpty(IoSession session) { return q.isEmpty(); } + /** + * {...@inheritdoc} + */ public synchronized void offer(IoSession session, WriteRequest writeRequest) { q.offer(writeRequest); } + /** + * {...@inheritdoc} + */ public synchronized WriteRequest poll(IoSession session) { return q.poll(); } Modified: mina/trunk/core/src/main/java/org/apache/mina/core/write/WriteRequestQueue.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/write/WriteRequestQueue.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/core/write/WriteRequestQueue.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/core/write/WriteRequestQueue.java Sun Mar 8 19:24:58 2009 @@ -30,14 +30,37 @@ */ public interface WriteRequestQueue { + /** + * Get the first request available in the queue for a session. + * @param session The session + * @return The first available request, if any. + */ WriteRequest poll(IoSession session); + + /** + * Add a new WriteRequest to the session write's queue + * @param session The session + * @param writeRequest The writeRequest to add + */ void offer(IoSession session, WriteRequest writeRequest); + + /** + * Tells if the WriteRequest queue is empty or not for a session + * @param session The session to check + * @return <code>true</code> if the writeRequest is empty + */ boolean isEmpty(IoSession session); + + /** + * Removes all the requests from this session's queue. + * @param session The associated session + */ void clear(IoSession session); /** * Disposes any releases associated with the specified session. * This method is invoked on disconnection. + * @param session The associated session */ void dispose(IoSession session); } Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Sun Mar 8 19:24:58 2009 @@ -216,6 +216,7 @@ // accept the connection from the client SocketChannel ch = handle.accept(); + if (ch == null) { return null; } Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java Sun Mar 8 19:24:58 2009 @@ -162,6 +162,6 @@ } void doFinishSessionInitialization(IoSession session, IoFuture future) { - finishSessionInitialization(session, future, null); + initSession(session, future, null); } } Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java?rev=751504&r1=751503&r2=751504&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java Sun Mar 8 19:24:58 2009 @@ -99,7 +99,7 @@ VmPipeSession localSession = new VmPipeSession(this, getListeners(), actualLocalAddress, getHandler(), entry); - finishSessionInitialization(localSession, future, sessionInitializer); + initSession(localSession, future, sessionInitializer); // and reclaim the local address when the connection is closed. localSession.getCloseFuture().addListener(LOCAL_ADDRESS_RECLAIMER);