1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.servlet.filters.threadlocal;
16  
17  import com.liferay.portal.kernel.util.GetterUtil;
18  import com.liferay.portal.kernel.util.InitialThreadLocal;
19  import com.liferay.portal.kernel.util.PropsUtil;
20  import com.liferay.portal.kernel.util.ThreadLocalRegistry;
21  import com.liferay.portal.servlet.filters.BasePortalFilter;
22  
23  import javax.servlet.FilterChain;
24  import javax.servlet.http.HttpServletRequest;
25  import javax.servlet.http.HttpServletResponse;
26  
27  /**
28   * <a href="ThreadLocalFilter.java.html"><b><i>View Source</i></b></a>
29   *
30   * @author Brian Wing Shun Chan
31   */
32  public class ThreadLocalFilter extends BasePortalFilter {
33  
34      public static final boolean ENABLED = GetterUtil.getBoolean(
35          PropsUtil.get(ThreadLocalFilter.class.getName()));
36  
37      public static boolean isInUse() {
38          if (_useCountThreadLocal.get() > 0) {
39              return true;
40          }
41          else {
42              return false;
43          }
44      }
45  
46      protected void processFilter(
47              HttpServletRequest request, HttpServletResponse response,
48              FilterChain filterChain)
49          throws Exception {
50  
51          _useCountThreadLocal.set(_useCountThreadLocal.get() + 1);
52  
53          try {
54              processFilter(
55                  ThreadLocalFilter.class, request, response, filterChain);
56          }
57          finally {
58              _useCountThreadLocal.set(_useCountThreadLocal.get() - 1);
59  
60              ThreadLocalRegistry.resetThreadLocals();
61          }
62      }
63  
64      private static ThreadLocal<Long> _useCountThreadLocal =
65          new InitialThreadLocal<Long>(0L);
66  
67  }