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);