Когда мой запрос поступает на мой контроллер, executorService создает threadpool и создает некоторые потоки для выполнения некоторой логики, мой запрос возвращается в браузер. Моя проблема начинается здесь, потоки, которые работают на стороне сервера, требуют объекта сеанса, потоки получают сеанс как null. какой подход я использую для установки значения сеанса после ответа возвращается к clientide.Bowow это код, пожалуйста, дайте некоторое подходящее решение, так что я могу получить значение сеанса после завершения запроса.Как получить сеанс, когда запрос завершен
@RequestMapping (значение = "/ expandAllController", метод = RequestMethod.POST) общественных @ResponseBody недействительными expandAllController (@RequestParam окончательного String [] controllerList, окончательный запрос HttpServletRequest) {
int listSize=controllerList.length;
BlockingQueue controllerDataQueue=cacheUtility.initBlockingQueue(listSize);
ExecutorService executor=Executors.newCachedThreadPool();
for(String controllerID:controllerList){
executor.submit(new producer(controllerID,request,controllerDataQueue));
}
executor.shutdown();
try {
executor.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// data fetching Thread
}
private class producer implements Runnable{
Object responseObj=null;
String controllerID;
HttpServletRequest request;
BlockingQueue controllerDataQueue;
producer(String controllerID ,HttpServletRequest request, BlockingQueue controllerDataQueue){
this.controllerDataQueue=controllerDataQueue;
this.controllerID=controllerID;
this.request=request;
}
@Override
public void run() {
int ThreadCount=0;
final HttpSession session = request.getSession();
final CommonSettings commonSettings = CommonSettings
.getInstance(session);
// for(String controllerID:controllerList){
controllerData.setControllerId(controllerID);
responseObj=expandController(controllerData,session);
if(responseObj!=null){
try {
controllerDataQueue.put(responseObj);
ThreadCount++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Простите, пожалуйста, прочитайте и изучите некоторые основы Java, прежде чем вы захотите сделать что-то подобное. Ваш код ужасен. – sk2212
, то, пожалуйста, предложите исправительное решение. – Sapu