Repository: deltaspike Updated Branches: refs/heads/master 0316dab80 -> 6f37b12f0
DELTASPIKE-414 Refactored RequestResponseHolder to allow to bind request/response individually Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/360a6946 Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/360a6946 Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/360a6946 Branch: refs/heads/master Commit: 360a69460cb4384554e9c3fa4060ec2b62f2bc00 Parents: 0316dab Author: Christian Kaltepoth <[email protected]> Authored: Mon Mar 10 07:55:32 2014 +0100 Committer: Christian Kaltepoth <[email protected]> Committed: Mon Mar 10 07:55:32 2014 +0100 ---------------------------------------------------------------------- .../servlet/impl/produce/RequestResponse.java | 63 ----------------- .../impl/produce/RequestResponseHolder.java | 72 +++++++++++--------- .../produce/RequestResponseHolderFilter.java | 6 +- .../impl/produce/ServletObjectProducer.java | 10 +-- 4 files changed, 50 insertions(+), 101 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java deleted file mode 100644 index 9e554d6..0000000 --- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.deltaspike.servlet.impl.produce; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -/** - * Simple value objects that holds a request/response pair. - */ -class RequestResponse -{ - - private final ServletRequest request; - private final ServletResponse response; - - /** - * Creates a new instance of this class. - * - * @param request - * the request - * @param response - * the response - */ - RequestResponse(ServletRequest request, ServletResponse response) - { - this.request = request; - this.response = response; - } - - /** - * Returns the request stored in this object. - */ - ServletRequest getRequest() - { - return request; - } - - /** - * Returns the response stored in this object. - */ - ServletResponse getResponse() - { - return response; - } - -} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java index b7dd459..3660d9f 100644 --- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java +++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java @@ -22,69 +22,79 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** - * The {@link RequestResponseHolder} holds {@link RequestResponse} objects in a {@link ThreadLocal}. + * Utility class which is used to bind the {@link ServletRequest} and {@link ServletResponse} to the current thread. + * + * @param <Type> + * {@link ServletRequest} or {@link ServletResponse} */ -class RequestResponseHolder +class RequestResponseHolder<Type> { - private static final ThreadLocal<RequestResponse> requestResponseThreadLocal = new ThreadLocal<RequestResponse>(); + /** + * Instance for storing the {@link ServletRequest} + */ + static final RequestResponseHolder<ServletRequest> REQUEST = new RequestResponseHolder<ServletRequest>(); + + /** + * Instance for storing the {@link ServletResponse} + */ + static final RequestResponseHolder<ServletResponse> RESPONSE = new RequestResponseHolder<ServletResponse>(); + + private final ThreadLocal<Type> threadLocal = new ThreadLocal<Type>(); private RequestResponseHolder() { - // no instance creation allowed + // hide constructor } /** - * Binds the a request/response pair to the current thread. + * Binds the request or response to the current thread. * - * @param request - * The request, must not be <code>null</code> - * @param response - * The response, must not be <code>null</code> + * @param instance + * The request/response + * @throws IllegalStateException + * if there is already an instance bound to the thread */ - static void bind(ServletRequest request, ServletResponse response) + void bind(Type instance) { - bind(new RequestResponse(request, response)); + if (isBound()) + { + throw new IllegalStateException("There is already an instance bound to this thread."); + } + threadLocal.set(instance); } /** - * Binds the a request/response pair to the current thread. - * - * @param pair - * The request/response pair, must not be <code>null</code> + * Returns <code>true</code> if there is already an instance bound to the thread */ - static void bind(RequestResponse pair) + boolean isBound() { - if (requestResponseThreadLocal.get() != null) - { - throw new IllegalStateException("There is already an instance stored for this thread."); - } - requestResponseThreadLocal.set(pair); + return threadLocal.get() != null; } /** - * Releases the stored request/response pair for the current thread. + * Release the instance bound to the current thread */ - static void release() + void release() { - requestResponseThreadLocal.remove(); + threadLocal.remove(); } /** - * Retrieves the request/response pair associated with the current thread. + * Retrieve the request/response bound to the current thread. * - * @return The request/response pair, never <code>null</code> + * @return instance bound to the thread * @throws IllegalStateException - * if no pair is associated with the thread + * if there is no instance bound to the thread */ - static RequestResponse get() + Type get() { - RequestResponse requestResponse = requestResponseThreadLocal.get(); - if (requestResponse == null) + Type instance = threadLocal.get(); + if (instance == null) { throw new IllegalStateException("Attempt to access the request/response without an active HTTP request"); } - return requestResponse; + return instance; } } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java index 29ac2cb..f63e67d 100644 --- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java +++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java @@ -44,14 +44,16 @@ public class RequestResponseHolderFilter implements Filter ServletException { - RequestResponseHolder.bind(request, response); + RequestResponseHolder.REQUEST.bind(request); + RequestResponseHolder.RESPONSE.bind(response); try { chain.doFilter(request, response); } finally { - RequestResponseHolder.release(); + RequestResponseHolder.REQUEST.release(); + RequestResponseHolder.RESPONSE.release(); } } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java index f74f3f3..3f9ca66 100644 --- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java +++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java @@ -62,7 +62,7 @@ public class ServletObjectProducer @RequestScoped public ServletRequest getServletRequest() { - return RequestResponseHolder.get().getRequest(); + return RequestResponseHolder.REQUEST.get(); } @Produces @@ -71,7 +71,7 @@ public class ServletObjectProducer @RequestScoped public HttpServletRequest getHttpServletRequest() { - ServletRequest request = RequestResponseHolder.get().getRequest(); + ServletRequest request = RequestResponseHolder.REQUEST.get(); if (request instanceof HttpServletRequest) { return (HttpServletRequest) request; @@ -84,7 +84,7 @@ public class ServletObjectProducer @RequestScoped public ServletResponse getServletResponse() { - return RequestResponseHolder.get().getResponse(); + return RequestResponseHolder.RESPONSE.get(); } @Produces @@ -93,7 +93,7 @@ public class ServletObjectProducer @RequestScoped public HttpServletResponse getHttpServletResponse() { - ServletResponse response = RequestResponseHolder.get().getResponse(); + ServletResponse response = RequestResponseHolder.RESPONSE.get(); if (response instanceof HttpServletResponse) { return (HttpServletResponse) response; @@ -106,7 +106,7 @@ public class ServletObjectProducer @SessionScoped public HttpSession getHttpSession() { - ServletRequest request = RequestResponseHolder.get().getRequest(); + ServletRequest request = RequestResponseHolder.REQUEST.get(); if (request instanceof HttpServletRequest) { return ((HttpServletRequest) request).getSession(true);
