001
014
015 package com.liferay.portal.service;
016
017 import com.liferay.portal.kernel.util.AutoResetThreadLocal;
018
019 import java.util.LinkedList;
020
021
024 public class ServiceContextThreadLocal {
025
026 public static ServiceContext getServiceContext() {
027 LinkedList<ServiceContext> serviceContextStack =
028 _serviceContextThreadLocal.get();
029
030 if (serviceContextStack.isEmpty()) {
031 return null;
032 }
033
034 return serviceContextStack.peek();
035 }
036
037 public static ServiceContext popServiceContext() {
038 LinkedList<ServiceContext> serviceContextStack =
039 _serviceContextThreadLocal.get();
040
041 if (serviceContextStack.isEmpty()) {
042 return null;
043 }
044
045 return serviceContextStack.pop();
046 }
047
048 public static void pushServiceContext(ServiceContext serviceContext) {
049 LinkedList<ServiceContext> serviceContextStack =
050 _serviceContextThreadLocal.get();
051
052 serviceContextStack.push(serviceContext);
053 }
054
055 private static ThreadLocal<LinkedList<ServiceContext>>
056 _serviceContextThreadLocal =
057 new AutoResetThreadLocal<LinkedList<ServiceContext>>(
058 ServiceContextThreadLocal.class + "._serviceContextThreadLocal",
059 new LinkedList<ServiceContext>()) {
060
061 @Override
062 protected LinkedList<ServiceContext> copy(
063 LinkedList<ServiceContext> serviceContexts) {
064
065 LinkedList<ServiceContext> cloneServiceContexts =
066 new LinkedList<ServiceContext>();
067
068 for (ServiceContext serviceContext : serviceContexts) {
069 ServiceContext cloneServiceContext =
070 (ServiceContext)serviceContext.clone();
071
072 cloneServiceContexts.add(cloneServiceContext);
073 }
074
075 return cloneServiceContexts;
076 }
077
078 };
079
080 }