Author: jvermillard
Date: Thu Nov 6 01:46:39 2008
New Revision: 711811
URL: http://svn.apache.org/viewvc?rev=711811&view=rev
Log:
removed IoService idleing
cleaned IdleStatusCheker
removed refrence to IdlStatusChecker from IoAbstractService
added the Idle checking task only on the service needing it (vmpipe & serial)
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoService.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceStatistics.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/IdleStatusChecker.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
mina/sandbox/jvermillard/mina-cleaning/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
Thu Nov 6 01:46:39 2008
@@ -571,7 +571,7 @@
// process idle sessions
if (currentTime - lastIdleCheckTime >= 1000) {
lastIdleCheckTime = currentTime;
- IdleStatusChecker.notifyIdleness(
+ AbstractIoSession.notifyIdleness(
getListeners().getManagedSessions().values().iterator(),
currentTime);
}
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
Thu Nov 6 01:46:39 2008
@@ -612,7 +612,7 @@
// process idle sessions
if (currentTime - lastIdleCheckTime >= 1000) {
lastIdleCheckTime = currentTime;
- IdleStatusChecker.notifyIdleness(allSessions(), currentTime);
+ AbstractIoSession.notifyIdleness(allSessions(), currentTime);
}
}
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
Thu Nov 6 01:46:39 2008
@@ -105,12 +105,9 @@
_stats.setLastWriteTime(s.getActivationTime());
_stats.setLastThroughputCalculationTime(s.getActivationTime());
- // Start idleness notification.
- idleStatusChecker.addService(s);
}
public void serviceDeactivated(IoService service) {
- idleStatusChecker.removeService((AbstractIoService) service);
}
public void serviceIdle(IoService service, IdleStatus idleStatus) {
@@ -147,17 +144,11 @@
private IoFuture disposalFuture;
- private final IdleStatusChecker idleStatusChecker = new
IdleStatusChecker();
-
/**
* [EMAIL PROTECTED]
*/
private IoServiceStatistics stats = new IoServiceStatistics(this);
- /**
- * Reference to the object holding all the idle state vars.
- */
- private IoServiceIdleState idleState = new IoServiceIdleState(this);
/**
* Constructor for [EMAIL PROTECTED] AbstractIoService}. You need to
provide a default
@@ -208,8 +199,6 @@
}
threadName = getClass().getSimpleName() + '-' + id.incrementAndGet();
-
- executeWorker(idleStatusChecker.getNotifyingTask(),
"idleStatusChecker");
}
/**
@@ -300,8 +289,7 @@
}
}
}
-
- idleStatusChecker.getNotifyingTask().cancel();
+
if (disposalFuture != null) {
disposalFuture.awaitUninterruptibly();
}
@@ -398,13 +386,6 @@
/**
* [EMAIL PROTECTED]
*/
- public IoServiceIdleState getIdleState() {
- return idleState;
- }
-
- /**
- * [EMAIL PROTECTED]
- */
public IoServiceStatistics getStatistics() {
return stats;
}
@@ -442,9 +423,6 @@
return listeners;
}
- protected final IdleStatusChecker getIdleStatusChecker() {
- return idleStatusChecker;
- }
protected final void executeWorker(Runnable worker) {
executeWorker(worker, null);
@@ -561,10 +539,4 @@
return stats.getScheduledWriteMessages();
}
- /**
- * TODO
- */
- public void notifyIdleness(long currentTime) {
- idleState.notifyIdleness(currentTime);
- }
}
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoService.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoService.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoService.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoService.java
Thu Nov 6 01:46:39 2008
@@ -190,13 +190,6 @@
int getScheduledWriteMessages();
/**
- * Returns the IoServiceIdleState for this service.
- *
- * @return The idle state object for this service.
- */
- IoServiceIdleState getIdleState();
-
- /**
* Returns the IoServiceStatistics object for this service.
*
* @return The statistics object for this service.
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java
Thu Nov 6 01:46:39 2008
@@ -136,25 +136,6 @@
}
/**
- * Calls [EMAIL PROTECTED] IoServiceListener#serviceIdle(IoService,
IdleStatus)}
- * for all registered listeners.
- */
- public void fireServiceIdle(IdleStatus status) {
- if (!activated.get()) {
- return;
- }
-
- for (IoServiceListener l : listeners) {
- try {
- l.serviceIdle(service, status);
- } catch (Throwable e) {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- }
- }
-
-
- /**
* Calls [EMAIL PROTECTED] IoServiceListener#serviceDeactivated(IoService)}
* for all registered listeners.
*/
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceStatistics.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceStatistics.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceStatistics.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/service/IoServiceStatistics.java
Thu Nov 6 01:46:39 2008
@@ -315,7 +315,6 @@
public final void increaseReadBytes(long increment, long currentTime) {
readBytes.addAndGet(increment);
lastReadTime = currentTime;
- service.getIdleState().resetIdleCountForRead();
}
/**
@@ -324,7 +323,6 @@
public final void increaseReadMessages(long currentTime) {
readMessages.incrementAndGet();
lastReadTime = currentTime;
- service.getIdleState().resetIdleCountForRead();
}
/**
@@ -333,7 +331,6 @@
public final void increaseWrittenBytes(int increment, long currentTime) {
writtenBytes.addAndGet(increment);
lastWriteTime = currentTime;
- service.getIdleState().resetIdleCountForWrite();
}
/**
@@ -342,7 +339,6 @@
public final void increaseWrittenMessages(long currentTime) {
writtenMessages.incrementAndGet();
lastWriteTime = currentTime;
- service.getIdleState().resetIdleCountForWrite();
}
/**
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
Thu Nov 6 01:46:39 2008
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.net.SocketAddress;
import java.nio.channels.FileChannel;
+import java.util.Iterator;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -48,6 +49,7 @@
import org.apache.mina.core.write.WriteException;
import org.apache.mina.core.write.WriteRequest;
import org.apache.mina.core.write.WriteRequestQueue;
+import org.apache.mina.core.write.WriteTimeoutException;
import org.apache.mina.core.write.WriteToClosedSessionException;
import org.apache.mina.util.CircularQueue;
import org.apache.mina.util.ExceptionMonitor;
@@ -1153,6 +1155,81 @@
}
/**
+ * Fires a [EMAIL PROTECTED] IoEventType#SESSION_IDLE} event to any
applicable
+ * sessions in the specified collection.
+ *
+ * @param currentTime the current time (i.e. [EMAIL PROTECTED]
System#currentTimeMillis()})
+ */
+ public static void notifyIdleness(Iterator<? extends IoSession> sessions,
long currentTime) {
+ IoSession s = null;
+ while (sessions.hasNext()) {
+ s = sessions.next();
+ notifyIdleSession(s, currentTime);
+ }
+ }
+
+ /**
+ * Fires a [EMAIL PROTECTED] IoEventType#SESSION_IDLE} event if applicable
for the
+ * specified [EMAIL PROTECTED] session}.
+ *
+ * @param currentTime the current time (i.e. [EMAIL PROTECTED]
System#currentTimeMillis()})
+ */
+ public static void notifyIdleSession(IoSession session, long currentTime) {
+ notifyIdleSession0(
+ session, currentTime,
+ session.getConfig().getIdleTimeInMillis(IdleStatus.BOTH_IDLE),
+ IdleStatus.BOTH_IDLE, Math.max(
+ session.getLastIoTime(),
+ session.getLastIdleTime(IdleStatus.BOTH_IDLE)));
+
+ notifyIdleSession0(
+ session, currentTime,
+
session.getConfig().getIdleTimeInMillis(IdleStatus.READER_IDLE),
+ IdleStatus.READER_IDLE, Math.max(
+ session.getLastReadTime(),
+ session.getLastIdleTime(IdleStatus.READER_IDLE)));
+
+ notifyIdleSession0(
+ session, currentTime,
+
session.getConfig().getIdleTimeInMillis(IdleStatus.WRITER_IDLE),
+ IdleStatus.WRITER_IDLE, Math.max(
+ session.getLastWriteTime(),
+ session.getLastIdleTime(IdleStatus.WRITER_IDLE)));
+
+ notifyWriteTimeout(session, currentTime);
+ }
+
+ private static void notifyIdleSession0(
+ IoSession session, long currentTime,
+ long idleTime, IdleStatus status, long lastIoTime) {
+ if (idleTime > 0 && lastIoTime != 0
+ && currentTime - lastIoTime >= idleTime) {
+ session.getFilterChain().fireSessionIdle(status);
+ }
+ }
+
+ private static void notifyWriteTimeout(
+ IoSession session, long currentTime) {
+
+ long writeTimeout = session.getConfig().getWriteTimeoutInMillis();
+ if (writeTimeout > 0 &&
+ currentTime - session.getLastWriteTime() >= writeTimeout &&
+ !session.getWriteRequestQueue().isEmpty(session)) {
+ WriteRequest request = session.getCurrentWriteRequest();
+ if (request != null) {
+ session.setCurrentWriteRequest(null);
+ WriteTimeoutException cause = new
WriteTimeoutException(request);
+ request.getFuture().setException(cause);
+ session.getFilterChain().fireExceptionCaught(cause);
+ // WriteException is an IOException, so we close the session.
+ session.close();
+ }
+ }
+ }
+
+
+
+ /**
* TODO Add method documentation. Name is ridiculously too long.
*/
private class CloseRequestAwareWriteRequestQueue implements
WriteRequestQueue {
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/IdleStatusChecker.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/IdleStatusChecker.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/IdleStatusChecker.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/core/session/IdleStatusChecker.java
Thu Nov 6 01:46:39 2008
@@ -25,52 +25,62 @@
import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
-import org.apache.mina.core.service.AbstractIoService;
-import org.apache.mina.core.service.IoService;
-import org.apache.mina.core.write.WriteRequest;
-import org.apache.mina.core.write.WriteTimeoutException;
import org.apache.mina.util.ConcurrentHashSet;
/**
* Detects idle sessions and fires <tt>sessionIdle</tt> events to them.
+ * To be used for service unable to trigger idle events alone, like VmPipe
+ * or SerialTransport. Polling base transport are advised to trigger idle
+ * events alone, using the poll/select timeout.
*
* @author The Apache MINA Project ([EMAIL PROTECTED])
* @version $Rev: 525369 $, $Date: 2007-04-04 05:05:11 +0200 (mer., 04 avr.
2007) $
*/
public class IdleStatusChecker {
- private final Set<AbstractIoSession> sessions =
+
+ // the list of session to check
+ private final Set<AbstractIoSession> sessions =
new ConcurrentHashSet<AbstractIoSession>();
- private final Set<AbstractIoService> services =
- new ConcurrentHashSet<AbstractIoService>();
+ /* create a task you can execute in the transport code,
+ * if the transport is like NIO or APR you don't need to call it,
+ * you just need to call the needed static sessions on select()/poll()
+ * timeout.
+ */
private final NotifyingTask notifyingTask = new NotifyingTask();
+
private final IoFutureListener<IoFuture> sessionCloseListener =
new SessionCloseListener();
public IdleStatusChecker() {}
+ /**
+ * Add the session for being checked for idle.
+ * @param session the session to check
+ */
public void addSession(AbstractIoSession session) {
sessions.add(session);
CloseFuture closeFuture = session.getCloseFuture();
+
+ // isn't service reponsability to remove the session nicely ?
closeFuture.addListener(sessionCloseListener);
}
- public void addService(AbstractIoService service) {
- services.add(service);
- }
-
- public void removeSession(AbstractIoSession session) {
+ /**
+ * remove a session from the list of session being checked.
+ * @param session
+ */
+ private void removeSession(AbstractIoSession session) {
sessions.remove(session);
}
- public void removeService(AbstractIoService service) {
- services.remove(service);
- }
-
public NotifyingTask getNotifyingTask() {
return notifyingTask;
}
+ /**
+ * The class to place in the transport executor for checking the sessions
idle
+ */
public class NotifyingTask implements Runnable {
private volatile boolean cancelled;
private volatile Thread thread;
@@ -81,7 +91,7 @@
while (!cancelled) {
// Check idleness with fixed delay (1 second).
long currentTime = System.currentTimeMillis();
- notifyServices(currentTime);
+
notifySessions(currentTime);
try {
@@ -103,22 +113,12 @@
}
}
- private void notifyServices(long currentTime) {
- Iterator<AbstractIoService> it = services.iterator();
- while (it.hasNext()) {
- AbstractIoService service = it.next();
- if (service.isActive()) {
- notifyIdleness(service, currentTime, false);
- }
- }
- }
-
private void notifySessions(long currentTime) {
Iterator<AbstractIoSession> it = sessions.iterator();
while (it.hasNext()) {
AbstractIoSession session = it.next();
if (session.isConnected()) {
- notifyIdleSession(session, currentTime);
+ AbstractIoSession.notifyIdleSession(session, currentTime);
}
}
}
@@ -129,99 +129,4 @@
removeSession((AbstractIoSession) future.getSession());
}
}
-
- /**
- * Fires a [EMAIL PROTECTED] IoEventType#SESSION_IDLE} event to any
applicable
- * sessions in the specified collection.
- *
- * @param currentTime the current time (i.e. [EMAIL PROTECTED]
System#currentTimeMillis()})
- */
- public static void notifyIdleness(Iterator<? extends IoSession> sessions,
long currentTime) {
- IoSession s = null;
- while (sessions.hasNext()) {
- s = sessions.next();
- notifyIdleSession(s, currentTime);
- }
- }
-
- public static void notifyIdleness(IoService service, long currentTime) {
- notifyIdleness(service, currentTime, true);
- }
-
- private static void notifyIdleness(IoService service, long currentTime,
boolean includeSessions) {
- if (!(service instanceof AbstractIoService)) {
- return;
- }
-
- ((AbstractIoService) service).notifyIdleness(currentTime);
-
- if (includeSessions) {
- notifyIdleness(service.getManagedSessions().values().iterator(),
currentTime);
- }
- }
-
- /**
- * Fires a [EMAIL PROTECTED] IoEventType#SESSION_IDLE} event if applicable
for the
- * specified [EMAIL PROTECTED] session}.
- *
- * @param currentTime the current time (i.e. [EMAIL PROTECTED]
System#currentTimeMillis()})
- */
- public static void notifyIdleSession(IoSession session, long currentTime) {
- notifyIdleSession0(
- session, currentTime,
- session.getConfig().getIdleTimeInMillis(IdleStatus.BOTH_IDLE),
- IdleStatus.BOTH_IDLE, Math.max(
- session.getLastIoTime(),
- session.getLastIdleTime(IdleStatus.BOTH_IDLE)));
-
- notifyIdleSession0(
- session, currentTime,
-
session.getConfig().getIdleTimeInMillis(IdleStatus.READER_IDLE),
- IdleStatus.READER_IDLE, Math.max(
- session.getLastReadTime(),
- session.getLastIdleTime(IdleStatus.READER_IDLE)));
-
- notifyIdleSession0(
- session, currentTime,
-
session.getConfig().getIdleTimeInMillis(IdleStatus.WRITER_IDLE),
- IdleStatus.WRITER_IDLE, Math.max(
- session.getLastWriteTime(),
- session.getLastIdleTime(IdleStatus.WRITER_IDLE)));
-
- notifyWriteTimeout(session, currentTime);
- updateThroughput(session, currentTime);
- }
-
- private static void notifyIdleSession0(
- IoSession session, long currentTime,
- long idleTime, IdleStatus status, long lastIoTime) {
- if (idleTime > 0 && lastIoTime != 0
- && currentTime - lastIoTime >= idleTime) {
- session.getFilterChain().fireSessionIdle(status);
- }
- }
-
- private static void notifyWriteTimeout(
- IoSession session, long currentTime) {
-
- long writeTimeout = session.getConfig().getWriteTimeoutInMillis();
- if (writeTimeout > 0 &&
- currentTime - session.getLastWriteTime() >= writeTimeout &&
- !session.getWriteRequestQueue().isEmpty(session)) {
- WriteRequest request = session.getCurrentWriteRequest();
- if (request != null) {
- session.setCurrentWriteRequest(null);
- WriteTimeoutException cause = new
WriteTimeoutException(request);
- request.getFuture().setException(cause);
- session.getFilterChain().fireExceptionCaught(cause);
- // WriteException is an IOException, so we close the session.
- session.close();
- }
- }
- }
-
- private static void updateThroughput(
- IoSession session, long currentTime) {
- session.updateThroughput(currentTime, false);
- }
}
\ No newline at end of file
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
Thu Nov 6 01:46:39 2008
@@ -32,6 +32,7 @@
import org.apache.mina.core.service.AbstractIoAcceptor;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.TransportMetadata;
+import org.apache.mina.core.session.IdleStatusChecker;
import org.apache.mina.core.session.IoSession;
/**
@@ -42,6 +43,10 @@
* @version $Rev$, $Date$
*/
public final class VmPipeAcceptor extends AbstractIoAcceptor {
+
+ // object used for checking session idle
+ private IdleStatusChecker idleChecker;
+
static final Map<VmPipeAddress, VmPipe> boundHandlers = new
HashMap<VmPipeAddress, VmPipe>();
/**
@@ -56,6 +61,10 @@
*/
public VmPipeAcceptor(Executor executor) {
super(new DefaultVmPipeSessionConfig(), executor);
+ idleChecker = new IdleStatusChecker();
+ // we schedule the idle status checking task in this service exceutor
+ // it will be woke up every seconds
+ executeWorker(idleChecker.getNotifyingTask(), "idleStatusChecker");
}
public TransportMetadata getTransportMetadata() {
@@ -86,6 +95,8 @@
@Override
protected IoFuture dispose0() throws Exception {
+ // stop the idle checking task
+ idleChecker.getNotifyingTask().cancel();
unbind();
return null;
}
Modified:
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
Thu Nov 6 01:46:39 2008
@@ -33,9 +33,12 @@
import org.apache.mina.core.service.AbstractIoConnector;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.TransportMetadata;
+import org.apache.mina.core.session.IdleStatusChecker;
import org.apache.mina.core.session.IoSessionInitializer;
import org.apache.mina.util.ExceptionMonitor;
+import com.sun.corba.se.spi.legacy.connection.GetEndPointInfoAgainException;
+
/**
* Connects to [EMAIL PROTECTED] IoHandler}s which is bound on the specified
* [EMAIL PROTECTED] VmPipeAddress}.
@@ -45,6 +48,9 @@
*/
public final class VmPipeConnector extends AbstractIoConnector {
+ // object used for checking session idle
+ private IdleStatusChecker idleChecker;
+
/**
* Creates a new instance.
*/
@@ -57,6 +63,10 @@
*/
public VmPipeConnector(Executor executor) {
super(new DefaultVmPipeSessionConfig(), executor);
+ idleChecker = new IdleStatusChecker();
+ // we schedule the idle status checking task in this service exceutor
+ // it will be woke up every seconds
+ executeWorker(idleChecker.getNotifyingTask(), "idleStatusChecker");
}
public TransportMetadata getTransportMetadata() {
@@ -103,7 +113,7 @@
// The following sentences don't throw any exceptions.
getListeners().fireSessionCreated(localSession);
- getIdleStatusChecker().addSession(localSession);
+ idleChecker.addSession(localSession);
} catch (Throwable t) {
future.setException(t);
return future;
@@ -119,7 +129,7 @@
// The following sentences don't throw any exceptions.
entry.getListeners().fireSessionCreated(remoteSession);
- getIdleStatusChecker().addSession(remoteSession);
+ idleChecker.addSession(remoteSession);
} catch (Throwable t) {
ExceptionMonitor.getInstance().exceptionCaught(t);
remoteSession.close();
@@ -135,6 +145,8 @@
@Override
protected IoFuture dispose0() throws Exception {
+ // stop the idle checking task
+ idleChecker.getNotifyingTask().cancel();
return null;
}
Modified:
mina/sandbox/jvermillard/mina-cleaning/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/mina-cleaning/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java?rev=711811&r1=711810&r2=711811&view=diff
==============================================================================
---
mina/sandbox/jvermillard/mina-cleaning/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
(original)
+++
mina/sandbox/jvermillard/mina-cleaning/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
Thu Nov 6 01:46:39 2008
@@ -49,6 +49,8 @@
*/
public final class SerialConnector extends AbstractIoConnector {
private final Logger log;
+
+ private IdleStatusChecker idleChecker;
public SerialConnector() {
this(null);
@@ -57,6 +59,12 @@
public SerialConnector(Executor executor) {
super(new DefaultSerialSessionConfig(), executor);
log = LoggerFactory.getLogger(SerialConnector.class);
+
+ idleChecker = new IdleStatusChecker();
+ // we schedule the idle status checking task in this service exceutor
+ // it will be woke up every seconds
+ executeWorker(idleChecker.getNotifyingTask(), "idleStatusChecker");
+
}
@Override
@@ -125,6 +133,8 @@
@Override
protected IoFuture dispose0() throws Exception {
+ // stop the idle checking task
+ idleChecker.getNotifyingTask().cancel();
return null;
}
@@ -171,6 +181,6 @@
}
IdleStatusChecker getIdleStatusChecker0() {
- return super.getIdleStatusChecker();
+ return idleChecker;
}
-}
+}
\ No newline at end of file