Author: trustin
Date: Mon Sep 17 03:16:40 2007
New Revision: 576345

URL: http://svn.apache.org/viewvc?rev=576345&view=rev
Log:
* Removed compiler warnings in filter.reqres
* RequestResponseFilter now provides a way to override map/set creation.

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/Request.java
    
mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/Request.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/Request.java?rev=576345&r1=576344&r2=576345&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/Request.java 
(original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/Request.java 
Mon Sep 17 03:16:40 2007
@@ -40,7 +40,7 @@
 
     private volatile Runnable timeoutTask;
 
-    private volatile ScheduledFuture timeoutFuture;
+    private volatile ScheduledFuture<?> timeoutFuture;
 
     private final BlockingQueue<Object> responses = new 
LinkedBlockingQueue<Object>();
 
@@ -214,11 +214,11 @@
         this.timeoutTask = timeoutTask;
     }
 
-    ScheduledFuture getTimeoutFuture() {
+    ScheduledFuture<?> getTimeoutFuture() {
         return timeoutFuture;
     }
 
-    void setTimeoutFuture(ScheduledFuture timeoutFuture) {
+    void setTimeoutFuture(ScheduledFuture<?> timeoutFuture) {
         this.timeoutFuture = timeoutFuture;
     }
 }

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java?rev=576345&r1=576344&r2=576345&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java
 Mon Sep 17 03:16:40 2007
@@ -52,9 +52,9 @@
             .getName()
             + ".requestStore";
 
-    private static final String UNRESPONDED_REQUESTS = 
RequestResponseFilter.class
+    private static final String UNRESPONDED_REQUEST_STORE = 
RequestResponseFilter.class
             .getName()
-            + ".unrespondedRequests";
+            + ".unrespondedRequestStore";
 
     private final ResponseInspectorFactory responseInspectorFactory;
 
@@ -95,17 +95,19 @@
         IoSession session = parent.getSession();
         session.setAttribute(RESPONSE_INSPECTOR, responseInspectorFactory
                 .getResponseInspector());
-        session.setAttribute(REQUEST_STORE, new HashMap<Object, Request>());
-        session
-                .setAttribute(UNRESPONDED_REQUESTS,
-                        new LinkedHashSet<Request>());
+        session.setAttribute(REQUEST_STORE, createRequestStore(session));
+        session.setAttribute(UNRESPONDED_REQUEST_STORE, 
createUnrespondedRequestStore(session));
     }
 
     @Override
     public void onPostRemove(IoFilterChain parent, String name,
             NextFilter nextFilter) throws Exception {
         IoSession session = parent.getSession();
-        session.removeAttribute(UNRESPONDED_REQUESTS);
+        
+        destroyUnrespondedRequestStore(getUnrespondedRequestStore(session));
+        destroyRequestStore(getRequestStore(session));
+        
+        session.removeAttribute(UNRESPONDED_REQUEST_STORE);
         session.removeAttribute(REQUEST_STORE);
         session.removeAttribute(RESPONSE_INSPECTOR);
     }
@@ -164,7 +166,7 @@
                 ScheduledFuture<?> scheduledFuture = 
request.getTimeoutFuture();
                 if (scheduledFuture != null) {
                     scheduledFuture.cancel(false);
-                    Set<Request> unrespondedRequests = 
getUnrespondedRequests(session);
+                    Set<Request> unrespondedRequests = 
getUnrespondedRequestStore(session);
                     synchronized (unrespondedRequests) {
                         unrespondedRequests.remove(request);
                     }
@@ -241,7 +243,7 @@
             request.setTimeoutFuture(timeoutFuture);
 
             // Add the timtoue task to the unfinished task set.
-            Set<Request> unrespondedRequests = getUnrespondedRequests(session);
+            Set<Request> unrespondedRequests = 
getUnrespondedRequestStore(session);
             synchronized (unrespondedRequests) {
                 unrespondedRequests.add(request);
             }
@@ -258,7 +260,7 @@
             throws Exception {
         // Copy the unifished task set to avoid unnecessary lock acquisition.
         // Copying will be cheap because there won't be that many requests 
queued.
-        Set<Request> unrespondedRequests = getUnrespondedRequests(session);
+        Set<Request> unrespondedRequests = getUnrespondedRequestStore(session);
         List<Request> unrespondedRequestsCopy;
         synchronized (unrespondedRequests) {
             unrespondedRequestsCopy = new ArrayList<Request>(
@@ -289,8 +291,60 @@
     }
 
     @SuppressWarnings("unchecked")
-    private Set<Request> getUnrespondedRequests(IoSession session) {
-        return (Set<Request>) session.getAttribute(UNRESPONDED_REQUESTS);
+    private Set<Request> getUnrespondedRequestStore(IoSession session) {
+        return (Set<Request>) session.getAttribute(UNRESPONDED_REQUEST_STORE);
+    }
+    
+    /**
+     * Returns a [EMAIL PROTECTED] Map} which stores [EMAIL PROTECTED] [EMAIL 
PROTECTED] Request}
+     * pairs whose [EMAIL PROTECTED] Response}s are not received yet.  Please 
override
+     * this method if you need to use other [EMAIL PROTECTED] Map} 
implementation
+     * than the default one ([EMAIL PROTECTED] HashMap}).
+     */
+    protected Map<Object, Request> createRequestStore(
+            @SuppressWarnings("unused") IoSession session) {
+        return new HashMap<Object, Request>();
+    }
+
+    /**
+     * Returns a [EMAIL PROTECTED] Set} which stores [EMAIL PROTECTED] 
Request} whose
+     * [EMAIL PROTECTED] Response}s are not received yet. Please override
+     * this method if you need to use other [EMAIL PROTECTED] Set} 
implementation
+     * than the default one ([EMAIL PROTECTED] LinkedHashSet}).  Please note 
that
+     * the [EMAIL PROTECTED] Iterator} of the returned [EMAIL PROTECTED] Set} 
have to iterate
+     * its elements in the insertion order to ensure that
+     * [EMAIL PROTECTED] RequestTimeoutException}s are thrown in the order 
which
+     * [EMAIL PROTECTED] Request}s were written.  If you don't need to 
guarantee
+     * the order of thrown exceptions, any [EMAIL PROTECTED] Set} 
implementation
+     * can be used.
+     */
+    protected Set<Request> createUnrespondedRequestStore(
+            @SuppressWarnings("unused") IoSession session) {
+        return new LinkedHashSet<Request>();
+    }
+    
+    /**
+     * Releases any resources related with the [EMAIL PROTECTED] Map} created 
by
+     * [EMAIL PROTECTED] #createRequestStore(IoSession)}.  This method is 
useful
+     * if you override [EMAIL PROTECTED] #createRequestStore(IoSession)}.
+     * 
+     * @param requestStore what you returned in [EMAIL PROTECTED] 
#createRequestStore(IoSession)}
+     */
+    protected void destroyRequestStore(
+            @SuppressWarnings("unused")
+            Map<Object, Request> requestStore) {
+    }
+
+    /**
+     * Releases any resources related with the [EMAIL PROTECTED] Set} created 
by
+     * [EMAIL PROTECTED] #createUnrespondedRequestStore(IoSession)}.  This 
method is
+     * useful if you override [EMAIL PROTECTED] 
#createUnrespondedRequestStore(IoSession)}.
+     * 
+     * @param requestStore what you returned in [EMAIL PROTECTED] 
#createUnrespondedRequestStore(IoSession)}
+     */
+    protected void destroyUnrespondedRequestStore(
+            @SuppressWarnings("unused")
+            Set<Request> unrespondedRequestStore) {
     }
 
     private class TimeoutTask implements Runnable {
@@ -308,7 +362,7 @@
         }
 
         public void run() {
-            Set<Request> unrespondedRequests = getUnrespondedRequests(session);
+            Set<Request> unrespondedRequests = 
getUnrespondedRequestStore(session);
             if (unrespondedRequests != null) {
                 synchronized (unrespondedRequests) {
                     unrespondedRequests.remove(request);


Reply via email to